我浏览了几个不同的帖子和网站(以及TestNG API),寻找如何运行和创建自定义测试。我没有找到(或者没有理解)如何在程序中以编程方式运行自定义testng.xml(测试套件)。
我已经创建了一个看起来像这样的testng.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="The Login Suite'" verbose="1" >
<test name="Some login check" >
<classes>
<class name="tests.first_login"/>
</classes>
</test>
<test name="Another login check" >
<classes>
<class name="tests.second_login"/>
</classes>
</test>
</suite>
我知道可以在Eclipse之外执行我的测试套件,但我不想这样做。为什么?因为我正在通过调度程序运行测试。所以我需要一个可配置的testng.xml文件。
我尝试使用类似于以下代码的代码生成虚拟XML测试套件:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG tng = new TestNG();
tng.addListener(tla);
XmlSuite loginSuite = new XmlSuite();
loginSuite.setName("The Login Suite");
XmlTest first_test = new XmlTest();
first_test.setName("Some login check");
first_test.setSuite(loginSuite);
List<XmlClass> fistlogin_classes = new ArrayList<XmlClass>();
fistlogin_classes.add(new XmlClass("tests.fist_login"));
XmlTest second_test = new XmlTest();
second_test.setName("Another login check");
loginSuite.addTest(SOEtest);
List<XmlClass> secondlogin_classes = new ArrayList<XmlClass>();
secondlogin_classes.add(new XmlClass("tests.second_login"));
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(loginSuite);
tng.setXmlSuites(suites);
tng.run();
但是,你猜怎么着……这也行不通。TestNg似乎找不到包含测试方法的类。代码成功执行,但没有运行任何测试,也没有失败或跳过任何测试。
我尝试的另一件事是将testng.xml导出为*.jar文件,并定义它的路径,看起来像这样:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG tng = new TestNG();
tng.setXmlPathInJar("tests.jar");
tng.addListener(tla);
tng.run();
注意:测试测试,jar位于项目的根目录。像<.../loginproject/tests.jar>这样。
到目前为止,我唯一做好的事情就是这个:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG tng = new TestNG();
tng.setDefaultTestName("Login check");
tng.setDefaultSuiteName("The Login suite");
tng.setTestClasses(new Class[] { fist_login.class });
tng.addListener(tla);
tng.run();
然而,这并不符合我的项目要求,我的要求是创建一个像上面XML中显示的测试套件。 我需要1个测试套件,其中包含不同的登录测试,每个测试都在自己的类中实现。 另外最后一个解决方案的问题是我添加到列表中的每个类都将被立即执行,但我需要在执行另一个之后运行它们。
我更喜欢的解决方案是允许我直接执行自定义testng.xml,但如果有人告诉我我在创建虚拟XML文件时做错了什么,我也会很高兴。
预先感谢大家的帮助。
更新和解决方案: 我已经想出了解决方案,将我的套件文件添加到列表中,并通过API方法将该列表添加到TestNG的套件列表中。具体如下:
List<String> testFilesList = new ArrayList<String>();
testFilesList.add("./testng.xml"); //test suite resides in the working directory's root folder
**testng.setTestSuites(testFilesList);** //you can addd multiple suites either here by adding multiple files or include all suites needed in the testng.xml file
testng.setUseDefaultListeners(false);
testng.addListener(htmlRep);
testng.run();