TestNg运行多个套件运行多次

时间:2017-09-08 23:03:33

标签: java testng

我有一个高级XML文件: testsng.xml

<suite name="allSuites">
  <suite-files>
    <suite-file path="tests.run1.xml" />
  </suite-files>
</suite>

我的目的是使用org.testng.xml.Parser解析此XML文件,为其添加一些信息。

  Parser parser = new Parser(inputXml);
  parser.setLoadClasses(false);
  Collection<XmlSuite> suites = parser.parse();
  XmlSuite parentSuite = suites.iterator().next();   

然后,一旦结构具有所有必要的测试/类,将其传递回TestNG:

  TestNG testng = new TestNG();
  List<XmlSuite> suitesList = new ArrayList<XmlSuite>();
  suitesList.add(parentSuite);
  testng.setXmlSuites(suitesList);
  testng.run();

我看到的问题是tests.run1.xml正在运行两次(当我只希望它运行一次时),甚至不让第一次运行结束:

[TestNG] Running:
tests.run1.xml
...
[TestNG] Running:
tests.run1.xml
...
[TestNG] Running:
testsng.xml

1 个答案:

答案 0 :(得分:1)

我不确定这是否应该被视为TestNG中的错误,或者是否应将其视为按设计工作

问题是您正在显式调用解析逻辑来构造List<XmlSuite>,然后将其传递给TestNG。但是,由于您创建的XmlSuite列表是通过TestNG解析器解析的,因此它会将套件文件名的详细信息添加到其中。

现在,当您将此XmlSuite插入TestNG时,TestNG会在内部再次对其进行解析,从而导致您的Child Test套件再次创建。这解释了你的儿童套房跑了两次。

如果你想要的只是丰富/修改你的套件文件的内容,那么这是一种更简洁的方法。

  • 确保您使用的是TestNG v6.11或更高版本。
  • 构建一个实现org.testng.IAlterSuiteListener的TestNG侦听器,并在其alter()方法中迭代List<XmlSuite>并添加您的浓缩逻辑。
  • 您现在可以通过<listeners>标记(或)通过@Listeners注释(或)通过服务加载程序注入此侦听器。您可以参考更多相关信息here

我已将此记录为TestNG中的错误。有关错误详情,请参阅here

有关如何使用IAlterSuiteListener

的示例,请参阅StackOverflow上的答案here