TestNG可以运行多个套件吗?

问题描述 投票:10回答:5

我正在使用Selenium和TestNG测试Web UI。我有一个包含许多测试类的测试套件。我有一个@BeforeSuite方法,也有一个@Parameters批注,该方法接收browser作为参数,将在其中运行Selenium测试,并执行以下行:

selenium = new DefaultSelenium("localhost", 4444, browser, "http://localhost:8099");
selenium.start();

我用于运行测试套件的XML是:

<suite name="suite">
<parameter name = "browser" value = "*firefox"/>
 <test name="allTests">
  <classes>
   <class name="test.webui.MemcachedDeploymentTest" />
  </classes>
 </test> 
</suite>

这可以正常工作,并且该测试可以在Firefox中运行。我的问题是,我想在首次运行完成后立即以某种方式再次运行此套件,但是这次使用Chrome作为浏览器。我现在有2个XML套件,其中一个带有Chrome,另一个带有Firefox。有没有办法自动运行这些测试套件?也许使用第三个XML?

selenium testng
5个回答
21
投票

您可以像这样删除testNG套件:

<suite name="allSuites">
  <suite-files>
    <suite-file path="suite1.xml" />
    <suite-file path="suite2.xml" />
    ...
  </suite-files>
</suite>

您还可以将这些套件与ant任务并行运行。如果您愿意,我将为ant提供示例代码。


9
投票

将参数标签放入测试标签内并创建另一个测试标签:

<suite name="suite">
    <test name="Firefox tests">
        <parameter name="browser" value="*firefox" />
        <classes>
            <class name="test.webui.MemcachedDeploymentTest" />
        </classes>
    </test>
    <test name="Chrome tests">
        <parameter name="browser" value="*chrome" />
        <classes>
            <class name="test.webui.MemcachedDeploymentTest" />
        </classes>
    </test>
</suite>

较不那么冗长的另一种选择是使用@Factory


7
投票

要使用TestNG XML运行多个套件,正确的代码如下,我准备了三个套件suiteA.xmlsuiteB.xmlsuiteC.xml并将它们合并到< [testng.xml。您可以复制粘贴以下代码,然后在class标记中更改packagename.classname并运行它即可。

suiteA.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="SuiteA" > <!-- suite name="Suite Name" --> <test name="TestA1" allow-return-values="true"> <classes> <!-- packagename.Testcase class name --> <class name ="com.qtpselenium.suiteA.TestCaseA1" /> </classes> </test> <test name="TestA2" allow-return-values="true"> <classes> <!-- packagename.Testcase class name --> <class name ="com.qtpselenium.suiteA.TestCaseA1" /> </classes> </test> </suite>

suiteB.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="SuiteB" > <!-- suite name="Suite Name" --> <test name="TestB1" allow-return-values="true"> <classes> <!-- packagename.Testcase class name --> <class name ="com.qtpselenium.suiteB.TestCaseB1" /> </classes> </test> <test name="TestB2" allow-return-values="true"> <classes> <!-- packagename.Testcase class name --> <class name ="com.qtpselenium.suiteB.TestCaseB2" /> </classes> </test> </suite>

suiteC.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="SuiteC" > <!-- suite name="Suite Name" --> <test name="TestC1" allow-return-values="true"> <classes> <!-- packagename.Testcase class name --> <class name ="com.qtpselenium.suiteC.TestCaseC1" /> </classes> </test> <test name="TestC2" allow-return-values="true"> <classes> <!-- packagename.Testcase class name --> <class name ="com.qtpselenium.suiteC.TestCaseC2" /> </classes> </test> </suite>

testng.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="TestNG Dadadriver suite" > <!-- suite name="Suite Name" --> <suite-files> <suite-file path="./suiteA.xml" /> <suite-file path="./suiteB.xml" /> <suite-file path="./suiteC.xml" /> </suite-files> </suite>

3
投票
通过Maven:

<plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <suiteXmlFiles> <suiteXmlFile>src/test/resources/unit-testng.xml</suiteXmlFile> <suiteXmlFile>src/test/resources/api-testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>


3
投票
<suite name="allSuites"> <suite-files> <suite-file path="suite1.xml" /> <suite-file path="suite2.xml" /> </suite-files> </suite>
效果很好!它将首先执行当前的诉讼,然后将逐一执行包含的套件列表。
© www.soinside.com 2019 - 2024. All rights reserved.