我有一个高级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
答案 0 :(得分:1)
我不确定这是否应该被视为TestNG中的错误,或者是否应将其视为按设计工作
问题是您正在显式调用解析逻辑来构造List<XmlSuite>
,然后将其传递给TestNG。但是,由于您创建的XmlSuite
列表是通过TestNG解析器解析的,因此它会将套件文件名的详细信息添加到其中。
现在,当您将此XmlSuite插入TestNG时,TestNG会在内部再次对其进行解析,从而导致您的Child Test套件再次创建。这解释了你的儿童套房跑了两次。
如果你想要的只是丰富/修改你的套件文件的内容,那么这是一种更简洁的方法。
org.testng.IAlterSuiteListener
的TestNG侦听器,并在其alter()
方法中迭代List<XmlSuite>
并添加您的浓缩逻辑。<listeners>
标记(或)通过@Listeners
注释(或)通过服务加载程序注入此侦听器。您可以参考更多相关信息here。我已将此记录为TestNG中的错误。有关错误详情,请参阅here。
有关如何使用IAlterSuiteListener