我正在使用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?
答案 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>
工作正常!!它将首先执行当前套装,然后逐个执行包含的套件列表。