如何运行集成测试?

时间:2010-03-31 11:38:18

标签: java junit continuous-integration integration integration-testing

在我们的项目中,我们进行了大量的单元测试。它们有助于保持项目的良好测试。

除了它们之外,我们还有一组测试,它们是单元测试,但取决于某种外部资源。我们称之为外部测试。例如,他们有时可以访问网络服务。

虽然单元测试很容易运行,但有时候集成测试无法通过:例如,由于超时错误。此外,这些测试可能需要很长时间才能运行。

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

对于普通单元测试,我们使用TeamCity进行持续集成。

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

4 个答案:

答案 0 :(得分:3)

我们正在使用Maven2:maven-surefire-plugin来运行单元测试(在测试阶段)和maven-failsafe-plugin用于集成测试(集成测试阶段)。

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

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

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

我们正在使用Hudson进行CI。

答案 1 :(得分:3)

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

  1. 性能:集成测试要慢得多,
  2. 测试脆弱性:由于与环境相关的条件(假阳性),集成测试会更频繁地失败。
  3. 我们使用TeamCity作为我们的主要持续集成服务器和Maven作为构建系统。我们使用以下算法来运行测试:

    1. 我们在Eclipse IDE中和每次提交之前运行单元测试。
    2. 我们使用Maven的mvn clean install
    3. 在TeamCity代理上每次提交后自动运行单元测试
    4. 在“main”构建完成后,我们在TeamCity代理上自动运行集成测试。
    5. 我们触发集成测试执行的方式是将TeamCity的integration.tests任务配置为依赖于“main”continous.build任务,有关详细信息,请参阅此处:http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

      我们只运行集成测试(不包括单元测试):

      • 使用名为的单独目录 “src / it / java”保持整合 测试,
      • 默认情况下从maven-surefire-plugin配置(配置/排除元素)中排除此源文件夹,
      • 使用称为“集成”的Maven配置文件来排除常规单元测试并包含来自“src / it / java”的测试(此配置文件通过在integration.tests任务中传递-Pintegration来配置)。

答案 2 :(得分:1)

我们在一个巨大的套件中运行所有测试。运行需要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 )

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

答案 3 :(得分:0)

我们使用 Jenkins 自动运行我们的测试。

小心单元和集成之间的差异 - 测试。谈论“整合单元测试”是一件令人困惑的事情

Maven 为区分单元测试和集成测试提供了良好的支持 - 故障安全& Surefire插件。

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

然后您只使用mvn test - 运行单元测试或mvn verify运行集成测试。

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

希望能帮助他人。