處理多個 testng.xml 文件

在開源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

 

<?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

 

<?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 installmvn 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命令之前,請確保您在项目的根文件夹路徑上):

Plain Text

 

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