Java TestNg运行多次运行的多个套件
我有一个高级XML文件: testsng.xmlJava TestNg运行多次运行的多个套件,java,testng,Java,Testng,我有一个高级XML文件: testsng.xml <suite name="allSuites"> <suite-files> <suite-file path="tests.run1.xml" /> </suite-files> </suite> 我不确定这是否应该被视为TestNG中的一个bug,或者这是否应该被视为按设计工作 问题是您显式地调用解析逻辑来构造列表,然后将其传递到TestNG中。但是由于您创建的Xm
<suite name="allSuites">
<suite-files>
<suite-file path="tests.run1.xml" />
</suite-files>
</suite>
我不确定这是否应该被视为TestNG中的一个bug,或者这是否应该被视为按设计工作 问题是您显式地调用解析逻辑来构造
列表
,然后将其传递到TestNG中。但是由于您创建的XmlSuite
列表是通过TestNG解析器解析的,因此它将套件文件名的详细信息添加到其中
现在,当您将这个XmlSuite插入到TestNG中时,TestNG会再次对其进行内部解析,从而再次创建您的子测试套件。这就解释了为什么您的儿童套件会运行两次
如果您只想丰富/修改套件文件的内容,那么这里有一种更简洁的方法
- 确保您使用的是TestNG v6.11或更高版本
- 构建一个实现
的TestNG侦听器,并在其org.TestNG.IAlterSuiteListener
方法中,遍历alter()
并添加扩展逻辑列表
- 现在,您可以通过
标记(或)通过
注释(或)通过服务加载器注入此侦听器。你可以参考更多关于它的信息@Listeners
您可以参考我关于StackOverflow的回答,了解如何使用
IAlterSuiteListener
如何触发您的测试?我不确定是否理解您的问题。testng.run()将运行测试用例感谢您的反馈!我没有意识到解析器代码与TestNG对象紧密耦合。我认为它实际上只是一个解析器。然后,您可以修改结构,并在准备就绪时将其传递给TestNg。让我看看你的建议。如果有帮助,请接受答案。另一方面,这个问题在TestNG的最新快照版本中得到了修复,从TestNG 6.13开始,您应该能够按原样使用原始代码。
Parser parser = new Parser(inputXml);
parser.setLoadClasses(false);
Collection<XmlSuite> suites = parser.parse();
XmlSuite parentSuite = suites.iterator().next();
TestNG testng = new TestNG();
List<XmlSuite> suitesList = new ArrayList<XmlSuite>();
suitesList.add(parentSuite);
testng.setXmlSuites(suitesList);
testng.run();
[TestNG] Running:
tests.run1.xml
...
[TestNG] Running:
tests.run1.xml
...
[TestNG] Running:
testsng.xml