在開源GitHub專案中,該專案旨在展示Selenium WebDriver框架與Java的運作原理,隨著專案發展,需要創建多個testng.xml檔案以運行不同的測試。
這些多個檔案是用於將測試進行分類,並將所有與相關網站相關的測試放置在單一的testng.xml中(我使用了不同的示範網站來展示可使用Selenium WebDriver自動化的不同操作)。
我想對多個testng.xml檔案的 使用以及如何執行測試進行闡述。由於我們使用的是Maven作為構建工具,因此需要一個單一的testng.xml檔案來運行專案中的所有測試。同時,在某些情況下,需要通過運行單個testng.xml檔案來對測試失敗進行調試。
在此專案中,我創建了9個不同的testng.xml檔案,它們包含了多個測試,我正在使用一個單一的testng.xml檔案來運行這些9個不同的testng.xml檔案中的所有測試。是的,這是可能的!
因此,加入我的旅程,我將展示如何使用單個testng.xml檔案運行多個testng.xml檔案。我也將闡述如何從9個可用的檔案中執行單個testng.xml檔案,並從命令行使用Maven運行它。
使用單個testng.xml檔案運行多個testng.xml檔案
讓我們先著手運行所有測試,使用所有的9個不同的testng.xml檔案。這個問題的解決方案是在您的testng.xml檔案中使用<suite-files> </suite-files>
標籤,並在這個標籤之間提供其他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>
一旦我們執行這個檔案,它將按照<suite-files>
標籤中更新的順序執行相應的testng.xml。所以,“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檔案中更新的所有測試被執行(無論通過還是失敗),並且執行完成,就會選擇下一個檔案運行另一組測試。
TestNG不支援同時運行套件檔案。
使用Maven運行單個testng.xml檔案
您在IDE中有一個選項,可以通過右擊並選擇 testng.xml 文件來運行您的測試。然而,當來到大規模測試的CI/CD管道時,這個選項就不那麼管用了,因為您需要使用命令行在大规模測試管道中運行測試。
配置您的項目以使用命令行運行suite-xml文件
我們需要進行以下配置,才能使用Maven運行testng.xml文件。
在您的pom.xml文件中更新Maven Surefire插件:
請注意上面截圖中的<SuiteXmlFile>
標籤。suiteXmlFile
的值被設定為${suite-xml}
。我們將在大规模pom.xml文件的屬性區塊中為此声明設定默認值:
上文所用testng.xml文件的默認路徑已被設定,並已在其中更新suite-files
的路徑。
因此,當我們運行命令mvn clean install
或mvn clean test
時,Maven將根據属性格式化區塊中更新的文件路徑選擇testng.xml默認文件,並運行所有測試。
現在,浮现在心中的問題是人:“如果我想執行任何其他testng.xml文件,我該怎麼做?有這個可能嗎?”
答案是“是的”: 我們可以在命令行中加入-Dsuite-xml=<testng.xml 文件路徑>
來在我们的mvn
命令中運行任何testng.xml文件。
記住,我們之前在pom.xml中的Maven Surefire插件區段设置了这个配置。
我們只需要在命令行中為suite-xml
属性變量传递值,这可以通过在mvn
命令中使用-D
选项来完成:
mvn clean test -Dsuite-xml=<testng.xml file path>
現在,讓我們试试命令行,並使用Maven從命令行運行不同的testng.xml 文件,就像我們剛剛學到的那样。
我們將運行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 清理 安装/ mvn 清理 驗證等。
測試已經成功地运行,結果在控制台上打印出来。它显示共有32個測試成功通過。
為了确认已選擇正確的XML文件並且執行了測試,我們讓我們使用IDE執行testng-theinternet.xml
文件並檢查執行了多少個測試。
我們可以看到共有32個測試被執行且通過,這证明我們使用mvn
命令執行的測試是正確地對於我們傳入的testng.xml文件执行的。
結論
我們可以有多個testng.xml文件來根據我們项目中不同的模組/網站來分隔測試,並且這些多個testng.xml文件可以使用一個testng.xml文件來執行。
同樣地,我們可以使用Maven Surefire插件從命令行執行testng.xml文件。
Source:
https://dzone.com/articles/working-with-multiple-testngxml-files