TestNG:如何以编程方式运行自定义TestNG.XML文件

Chr*_*ski 3 java eclipse testng custom-configuration programmatically-created

我浏览了几个不同的线程和网站(以及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>
Run Code Online (Sandbox Code Playgroud)

我知道我可以从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();
Run Code Online (Sandbox Code Playgroud)

但是猜猜......那也行不通.TestNg似乎没有找到包含测试方法的类.代码正在成功执行,但没有运行测试,没有失败或跳过.

我尝试的另一件事是将testng.xml导出到*.jar文件并定义它的路径如下所示:

                TestListenerAdapter tla = new TestListenerAdapter();
                TestNG tng = new TestNG();
                tng.setXmlPathInJar("tests.jar");
                tng.addListener(tla);
                tng.run();
Run Code Online (Sandbox Code Playgroud)

注意:测试测试,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();
Run Code Online (Sandbox Code Playgroud)

然而,这不符合我的项目要求,即创建如上面XML中所示的测试套件.我需要1个Test Suite,它们在各自的类中都有不同的登录测试.最后一个解决方案的问题是我添加到列表中的每个类都是立即执行但我需要在另一个之后运行它们.

我赞成一个允许我直接执行自定义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();
Run Code Online (Sandbox Code Playgroud)

小智 5

public static void main(String[] args) {
    TestNG testng = new TestNG();
    List<String> suites = Lists.newArrayList();
    suites.add(".//TestNG.xml");
    testng.setTestSuites(suites);
    testng.run();
}
Run Code Online (Sandbox Code Playgroud)


nih*_*neo 0

对于虚拟 xml 示例,您错过了将类添加到测试以及将测试添加到套件的情况。

IE

first_test.getClasses().addAll(fistlogin_classes);
loginSuite.addTest(first_test);
Run Code Online (Sandbox Code Playgroud)