TestNG可以运行多个套件吗?

时间:2010-12-21 16:01:34

标签: selenium testng

我正在使用Selenium和TestNG测试web-ui。我有一个包含许多测试类的测试套件。 我有@BeforeSuite方法也有@Parameters注释,此方法接收运行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?

5 个答案:

答案 0 :(得分:18)

您可以像这样使用testNG套件:

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

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

答案 1 :(得分:7)

将参数标记放在测试标记内并创建另一个测试标记:

<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

答案 2 :(得分:4)

使用TestNG XML运行多个套件,下面是正确的代码,我准备了三个套件suiteA.xml,suiteB.xml,suiteC.xml,并将它们整合到testng.xml中。您可以复制粘贴以下代码并更改类标记中的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 :(得分: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>

答案 4 :(得分:2)

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

工作正常!!它将首先执行当前套装,然后逐个执行包含的套件列表。