В то время как я работал над открытым исходным кодом проекта на 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 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 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):
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