TestNG: как программно запустить пользовательский файл TestNG.XML

Я просмотрел несколько разных тем и веб-сайтов (а также API TestNG) в поисках того, как запускать и создавать собственные тесты. Я не нашел (или не понял), как я могу программно запустить собственный 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 Test Suite, с различными тестами входа в систему, каждый из которых реализован в своем классе. Также проблема с последним решением состоит в том, что каждый класс, который я добавляю в список, выполняется одновременно, но мне нужно запускать их за другим.

Я бы предпочел решение, позволяющее мне напрямую выполнять пользовательский файл 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();

2 ответа

Решение

В примере с виртуальным 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();
}
Другие вопросы по тегам