TestNG:如何以编程方式 运行 自定义 TestNG.XML 文件
TestNG: how do I run a custom TestNG.XML File programmatically
我浏览了几个不同的线程和网站(以及 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 似乎没有找到包含测试方法的 class(es)。代码正在成功执行,但没有测试 运行、none 失败或被跳过。
我尝试的另一件事是将 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 个测试套件,其中包含不同的登录测试,每个测试都在自己的 class 中实现。最后一个解决方案的问题是,我添加到列表中的每个 class 都会立即执行,但我需要一个接一个地 运行 它们。
我更喜欢允许我直接执行自定义的解决方案 testng.xml 但如果有人能告诉我我在创建虚拟 XML 时做错了什么,我也会很高兴文件。
提前谢谢大家。
更新和解决方案:
我想出了一个解决方案,我将我的西装文件添加到一个列表中,然后通过 API 方法将该列表添加到 TestNGs 的套件列表中。
看起来像这样:
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();
对于虚拟 xml 示例,您错过了将 class 添加到测试以及将测试添加到您的套件。
即
first_test.getClasses().addAll(fistlogin_classes);
loginSuite.addTest(first_test);
public static void main(String[] args) {
TestNG testng = new TestNG();
List<String> suites = Lists.newArrayList();
suites.add(".//TestNG.xml");
testng.setTestSuites(suites);
testng.run();
}
我浏览了几个不同的线程和网站(以及 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 似乎没有找到包含测试方法的 class(es)。代码正在成功执行,但没有测试 运行、none 失败或被跳过。
我尝试的另一件事是将 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 个测试套件,其中包含不同的登录测试,每个测试都在自己的 class 中实现。最后一个解决方案的问题是,我添加到列表中的每个 class 都会立即执行,但我需要一个接一个地 运行 它们。
我更喜欢允许我直接执行自定义的解决方案 testng.xml 但如果有人能告诉我我在创建虚拟 XML 时做错了什么,我也会很高兴文件。
提前谢谢大家。
更新和解决方案: 我想出了一个解决方案,我将我的西装文件添加到一个列表中,然后通过 API 方法将该列表添加到 TestNGs 的套件列表中。 看起来像这样:
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();
对于虚拟 xml 示例,您错过了将 class 添加到测试以及将测试添加到您的套件。
即
first_test.getClasses().addAll(fistlogin_classes);
loginSuite.addTest(first_test);
public static void main(String[] args) {
TestNG testng = new TestNG();
List<String> suites = Lists.newArrayList();
suites.add(".//TestNG.xml");
testng.setTestSuites(suites);
testng.run();
}