当前位置: 首页 > 知识库问答 >
问题:

如何确保TestNG连续而不是交错地在测试类上运行方法?

匡玉堂
2023-03-14

当我单独运行每个测试时,它们都通过了。但是当我同时运行几个测试时(使用maven或我的IDE,IntelliJ),不同测试类的方法是交错运行的,例如。第二个类的数据库初始化在第一个类启动后运行,但在第一个类的所有测试方法运行之前运行,因此这些方法将失败(因为数据库已经包含第二个类的数据)。

最简单的解决方案是强制TestNG运行器连续运行类(即,在运行另一个类的测试方法之前,等待一个测试类的所有测试方法都完成)。这能做到吗?

我可能可以通过将每个类指定为套件中的单独测试来实现这一点,但我不想这样做,因为这意味着每当我添加一个笨拙且容易出错的测试类时,我必须向套件添加一些东西。

我目前没有使用DBUnit,Unitils等;我不太了解这些工具,但我得到的印象是,这些工具不能解决我的问题。

我使用JPA在每个测试类中初始化数据库(即创建实体对象并预先设置它们)。

共有1个答案

唐焕
2023-03-14

即使在顺序模式下,TestNG也可以将同一套件中的测试方法交织在一起。它确实保证了@beforeClass->@test->@afterClass序列,但它可以执行以下操作:

before class1
    test class1.method1
before class2
    test class2.method1
    test class1.method2
after class1
    test class2.method2
after class2

解决方案是强制每个类在一个不同的套件中(这些套件是真正按顺序执行的)。在2.16版本中,maven surefire插件将每个类放在一个单独的套件中,这样问题就得到了解决。

另一方面,IDEA(甚至是最新的13个EAP)生成一个包含同一套件中所有类的xml文件。希望IDEA也能跟进并解决这个问题。在使用共享资源(如数据库)时,交错测试是一个搅局者。

 类似资料:
  • 我从以下链接实现了re运行失败的TestNG测试类的逻辑: 不幸的是,它使用“test”注释运行该方法,而不运行BeforeClass(@BeforeClass)和AfterClass(@AfterClass)方法。我试图研究ITestAnnotations的setDependsOnMethods和getDependsOnMethods方法,但没有成功。 有人知道如何让侦听器类同时运行Before

  • 问题内容: 我正在尝试从Jenkins运行TestNG测试(在一个包含的Java项目中),但是没有运气。 似乎Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng- plugin )仅发布TestNG测试的结果,但实际上不运行测试类…或我错了吗? 无论如何,我如何在Jenkins的TestNG项目中实际运行TestN

  • 我试图从Jenkins那里运行TestNG测试(在一个包含Java的项目中),但没有成功。 看起来好像是Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng-plugin)只发布TestNG测试的结果,但不实际运行测试类。。。还是我错了? 在任何情况下,我如何在与Jenkins的TestNG项目中实际运行TestNG

  • 这是驱动程序类,它将为每个测试方法创建驱动程序实例。

  • 问题内容: 我正在尝试从Jenkins运行TestNG测试(在一个包含的Java项目中),但是没有运气。 似乎Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng- plugin )仅发布TestNG测试的结果,但实际上不运行测试类…或我错了吗? 无论如何,我该如何在Jenkins的TestNG项目中实际运行Test