我正在使用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?
您可以像这样删除testNG套件:
<suite name="allSuites">
<suite-files>
<suite-file path="suite1.xml" />
<suite-file path="suite2.xml" />
...
</suite-files>
</suite>
您还可以将这些套件与ant任务并行运行。如果您愿意,我将为ant提供示例代码。
将参数标签放入测试标签内并创建另一个测试标签:
<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
。
要使用TestNG XML运行多个套件,正确的代码如下,我准备了三个套件suiteA.xml
,suiteB.xml
,suiteC.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>
<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>
<suite name="allSuites">
<suite-files>
<suite-file path="suite1.xml" />
<suite-file path="suite2.xml" />
</suite-files>
</suite>
效果很好!它将首先执行当前的诉讼,然后将逐一执行包含的套件列表。