代码之家  ›  专栏  ›  技术社区  ›  iKenndac

如何运行集成测试?

  •  5
  • iKenndac  · 技术社区  · 5 年前

    在我们的项目中,我们有很多单元测试。它们有助于使项目得到很好的测试。

    除此之外,我们还有一组测试,它们是单元测试,但依赖于某种外部资源。我们称之为 外部测试 . 例如,他们有时可以访问web服务。

    虽然单元测试很容易运行,但集成测试有时无法通过:例如,由于超时错误。此外,这些测试可能会花费太多时间来运行。

    目前,我们保留集成/外部单元测试只是为了在开发相应功能时运行它们。

    对于简单的单元测试,我们使用teamcity进行持续集成。

    如何运行集成单元测试,何时运行它们?

    4 回复  |  直到 6 年前
        1
  •  2
  •   kopper    14 年前

    在我们的项目中,我们有单独的常规/普通单元测试套件和单独的集成测试套件。有两个原因:

    1. 性能:集成测试要慢得多,
    2. 测试脆弱性:集成测试由于与环境相关的条件(给出误报)而失败的频率更高。

    我们使用TeamCity作为主要的持续集成服务器,使用Maven作为构建系统。我们使用以下算法运行测试:

    1. 我们在EclipseIDE内和每次提交之前运行单元测试。
    2. 我们使用maven的 mvn clean install
    3. “主”构建完成后,我们在TeamCity代理上自动运行集成测试。

    触发集成测试执行的方法是将TeamCity的integration.tests任务配置为依赖于“main”continous.build任务,有关详细信息,请参阅此处: http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

    我们只通过以下方式运行集成测试(不包括单元测试):

    • 使用名为 “SRC/I/Java”保持集成 测验,
    • 默认情况下,从maven surefire插件配置(configuration/excludes element)中排除此源文件夹,
    • 使用Maven配置文件称为“集成”来排除常规的单元测试,并包含来自“SRC/IT/Java”的测试(此配置文件是通过在集成测试中传递Pintegration来配置的)。
        2
  •  3
  •   lexicore    14 年前

    我们使用maven2:maven surefire插件运行单元测试(在测试阶段)和maven failsafe插件进行集成测试(集成测试阶段)。

    默认情况下,所有测试在项目生成时运行,但是可以使用配置文件关闭集成测试。

    在许多情况下,集成测试是模块的一部分,在某些情况下,还有专门的模块只做集成测试。

    其中一个团队还使用fitnesse进行验收测试。这些测试也在专用模块中。

    我们用哈德逊做ci。

        3
  •  1
  •   S.Lott    14 年前

    我们在一个巨大的套件中运行所有的测试。跑步需要7分钟。

    我们的集成测试创建模拟服务器。它们从不超时——除非测试要求服务器超时。

    所以我们有以下几种情况。(代码示例是python)

    class SomeIntegrationTest( unittest.TestCase ):
        def setUp( self ):
            testclient.StartVendorMockServer( 18000 ) # port number
            self.connection = applicationLibrary.connect( 'localhost', 18000 )
        def test_should_do_this( self ):
            self.connection.this()
            self.assert...
        def tearDown( self ):
            testClient.KillVendorMockServer( 18000 )
    

    这有一些限制——它总是为每个测试派生客户机模拟服务器。有时候没关系,有时候开始和停止太多了。

    我们还有以下几样东西

    class SomeIntegrationTest( unittest.TestCase ):
        def setUp( self ):
            self.connection = applicationLibrary.connect( 'localhost', 18000 )
        def test_should_do_this( self ):
            self.connection.this()
            self.assert...
    
     if __name__ == "__main__":
         testclient.StartVendorMockServer( 18000 ) # port number
         result= unittest.TextTestRunner().run()
         testclient.KillVendorMockServer( 18000 )
         system.exit( result.failures + result.errors )
    

    为了支持这种测试,我们有许多用于各种集成测试的模拟服务器。

        4
  •  0
  •   Merowinger    6 年前

    我们使用 詹金斯 自动运行我们的测试。

    注意单元测试和集成测试之间的差异。谈论“集成单元测试”令人困惑

    马文 为区分单元测试和集成测试提供了良好的支持- Failsafe&SureFire插件。

    来自apache maven项目: failsafe插件设计用于运行集成测试,而surefire插件设计用于运行单元测试。 (见: http://maven.apache.org/surefire/maven-failsafe-plugin/ ) 您需要在pom.xml中配置这些插件

    你就只能用 mvn test -运行单元测试或 mvn verify 运行集成测试。

    单元测试应每隔15分钟定期进行一次f.i.。 集成测试,通常需要很长时间,应该每24小时运行一次f.i.。

    希望能帮助别人。