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

Java TestNG:如何以编程方式运行自定义TestNG.XML文件,java,eclipse,testng,programmatically-created,custom-configuration,Java,Eclipse,Testng,Programmatically Created,Custom Configuration,我浏览了几个不同的线程和网站(以及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" >

我浏览了几个不同的线程和网站(以及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>
            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();
                TestListenerAdapter tla = new TestListenerAdapter();
                TestNG tng = new TestNG();
                tng.setXmlPathInJar("tests.jar");
                tng.addListener(tla);
                tng.run();
注意:testtests,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所示的测试套件。我需要一个测试套件,有不同的登录测试,每个都在自己的类中实现。最后一个解决方案的问题是,我添加到列表中的每个类都会立即执行,但我需要一个接一个地运行它们

我喜欢一种允许我直接执行定制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();
List testFilesList=newarraylist();
testFilesList.add(“./testng.xml”)//测试套件驻留在工作目录的根文件夹中
**testng.setTestSuites(testFilesList);**//您可以在此处通过添加多个文件或在testng.xml文件中包含所需的所有套件来添加多个套件
setUseDefaultListeners(false);
testng.addListener(htmlRep);
testng.run();

对于虚拟xml示例,您没有将类添加到测试中,也没有将测试添加到套件中

i、 e

publicstaticvoidmain(字符串[]args){
TestNG TestNG=新的TestNG();
List suites=Lists.newArrayList();
suites.add(“.//TestNG.xml”);
testng.setTestSuites(套房);
testng.run();
}

您如何从调度程序触发测试?您是将maven与jenkins或jar文件一起使用吗?我使用->>>java.util.Timerby通过TimerTask触发它们:我改为使用Quartz调度程序。我试着用jenkins运行它,但在windows 7和受限的公司设置中效果不好。我希望做类似的事情,我正在创建一个GUI,让您从windows文件资源管理器中选择XML文件,然后将XML路径保存为字符串。我已经使用了您更新的解决方案,但是仍然返回一个错误,说它找不到我的测试类。这样很难排除代码中的问题。你为什么不创建一个线程,发布你的代码并在这里引用它呢。
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();
}