Работа с несколькими файлами testng.xml

В то время как я работал над открытым исходным кодом проекта на GitHub, созданным для демонстрации работы с frameworks Selenium WebDriver на Java, по мере роста проекта появилась необходимость создавать множество testng.xml файлов для запуска различных тестов.

Эти многочисленные файлы были созданы для разделения тестов и размещения всех тестов, связанных с соответствующим веб-сайтом, в одном testng.xml (я использовал различные демо-веб-сайты для демонстрации различных действий, которые можно автоматизировать с использованием Selenium WebDriver).

Я подумал навести порядок с тем, как использовать несколько testng.xml файлов и как запускать тесты. Так как Maven является средством сборки, для выполнения всех тестов в проекте необходим только один testng.xml файл. Кроме того, были случаи, в которых для устранения ошибок в тестах надо было запускать один testng.xml файл.

В этом проекте я создал 9 различных testng.xml файлов, содержащих множество тестов, и я запускаю все тесты в этих 9 различных testng.xml файлах с помощью одного testng.xml файла. Да, это возможно!

Таким образом, присоединяйтесь к моему путешествию, где я покажу, как выполнять несколько testng.xml файлов с использованием одного testng.xml файла. Я также покажу, как выполнять один testng.xml файл из 9 доступных и запускать его с помощью Maven из командной строки.

Выполнение множества testng.xml файлов с использованием одного testng.xml файла

Пробуем сначала сделать все тесты с помощью 9 различных файлов testng.xml. решение этого заключается в использовании тэга <suite-files> </suitefiles>  в вашем файле testng.xml и предоставление других путей к файлам testng.xml  между этими тэгами. Вот пример файла, чтобы показать о чем я говорю:

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium 4 POC Tests ">
<suite-files>
    <suite-file path="testng-saucedemo.xml"/>
    <suite-file path="testng-automationpractice.xml"/>
    <suite-file path="testng-theinternet.xml"/>
    <suite-file path="testng-juice-shop.xml"/>
    <suite-file path="testng-lambdatestecommerce.xml"/>
    <suite-file path="testng-seleniumgrid-theinternet.xml"/>
    <suite-file path="testng-lambdatest-selenium-playground.xml"/>
    <!--        <suite-file path="testng-seleniumgrid-juiceshop.xml"/>-->
</suite-files>
</suite> 

Когда мы выполняем этот файл, оно будет выполнять соответствующие файлы testng.xml в том порядке, в котором они были обновлены между тэгами <suite-files>. Таким образом, "testng-saucedemo.xml" будет выполнен первым, затем, "testng-automationpractice.xml" будет выполнен, и так далее.

Все testng.xml файлы, указанные в примере выше, содержат много тестов. Таким образом, все тесты в соответствующих testng.xml будут выполнены, и после завершения выполнения следующий XML-файл будет выбран для выполнения.

Следующие содержимое файла testng-saucedemo.xml :

XML

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests" parallel="tests" thread-count="4" verbose="2">
<test name="selenium 4 Tests with Chrome Browser">
    <parameter name="browser" value="chrome"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Firefox Browser">
    <parameter name="browser" value="firefox"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Edge Browser" enabled="false">
    <parameter name="browser" value="edge"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Opera Browser" enabled="false">
    <parameter name="browser" value="opera"/>
    <classes>
        <class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
            <methods>
                <include name="loginSauceDemoTest"/>
                <include name="logOutSauceDemoTest"/>
            </methods>
        </class>
    </classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

Когда все тесты, определенные в этом XML-файле, будут выполнены (независимо от того, пройдены они успешно или нет), и выполнение будет закончено, следующий файл будет выбран для выполнения другой набор тестов.

Parallel execution of suite files is not supported by testng.

Executing a Single testng.xml File Using Maven

В IDE у вас есть опция запуска ваших тестов с использованием файла testng.xml путем нажатия правой кнопкой мыши на нем и выбора опции запустить тесты. However, когда речь идет о выполнении тестов в CI/CD-pipeline, этот вариант не годится, так как вам нужно выполнять тесты с помощью команд в автоматизированном pipeline.

Configuring Your Project To Run suite-xml File Using Command Line

Для того, чтобы выполнить файл testng.xml с использованием Maven,我们需要设置以下配置.

Обновите плагин Maven Surefire в вашем pom.xml:

Обратите внимание на тег <SuiteXmlFile> в снимок выше. Значение для suiteXmlFile установлено как ${suite-xml}. Мы будем устанавливать значение по умолчанию для этого объявления в блоке свойств файла pom.xml следующим образом:

Путь по умолчанию к testng.xml установлен для файла, который мы использовали в предыдущей секции этого блога, и обновили путь suite-files в нем.

Так что теперь, если мы выполним команду mvn clean install или mvn clean test, Maven выберет стандартный файл testng.xml на основании пути, который обновлен в блоке свойств и выполнит все тесты.

Сейчас, вопрос, который возникает в уме: “Что мне делать, если я хочу выполнить любой другой testng.xml файл, возможно ли это?”

Ответ: “Да”: мы можем запустить любой testng.xml файл в нашем проекте, добавив -Dsuite-xml=<путь к файлу testng.xml> в нашу команду mvn .

Помните, ранее мы настраивали это в блоке Maven Surefire plugin в pom.xml.

Нам просто нужно передать значения для переменной свойства suite-xml в командной строке, что можно сделать, используя опцию -D в команде mvn:

 
mvn clean test -Dsuite-xml=<testng.xml file path>

Давайте теперь попробуем использовать командную строку и запустим различные testng.xml файлы с помощью Maven из командной строки, как мы только что узнали.

Мы запустим файл testng-internet.xml, убедимся, что он должен переопределить существующий стандартный testng.xml и запустить только тот, который мы передадим в команду. Мы должны передать полный путь, где сохранен testng.xml, и в нашем случае он находится в папке test-suite, поэтому полный путь test-suites\testng-theinternet.xml. Вот команда, которую мы запустим (убедитесь, что вы находитесь в папке корня проекта в окне командной строки, прежде чем выполнить команду Maven):

Plain Text

 

mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml


Опция “-Dsuite-xml” может использоваться с другими командами Maven, например, такими как: mvn clean install/ mvn clean verify и т.д.

Тесты были успешно запущены и результаты были выведены на консоль. Судя по сообщению, было проведено 32 теста, и все они были успешно пройдены.

Для подтверждения правильного выбора XML-файла и проведения тестов выполним тесты для файла testng-theinternet.xml с помощью IDE и проверим количество выполненных тестов.

Мы можем увидеть, что 32 теста было выполнено и они были успешно пройдены, что подтверждает, что тесты, выполненные с помощью команды mvn, были правильно выполнены для файла testng.xml, который мы передали.

Заключение

Мы можем использовать несколько файлов testng.xml, чтобы разделить тесты на различные модули/веб-сайты в нашем проекте, и эти несколько файлов testng.xml могут быть выполнены одним файлом testng.xml.

Таким же образом мы можем выполнить файл testng.xml с помощью командной строки с использованием плагина Maven Surefire.

Source:
https://dzone.com/articles/working-with-multiple-testngxml-files