我打算同时为两个testng.xml文件启动Chrome浏览器。每个testng.xml文件都有两个以上的测试。
然后,我将两个xml文件合并到名为 parentsuite.xml 文件的单个套件文件中。
当testng1.xml和testng2.xml文件各自只有test方法时,会启动两个chrome浏览器。但是,如果testng1.xml文件具有多个测试方法,则只有在testng1.xml文件执行完成后才会启动第二个chrome浏览器。
请查看以下示例。
testng1.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel suite 1" >
<test name="Browser Setup">
<parameter name="browser" value="Chrome" />
<classes>
<class name="com.simpletest.LaunchBrowser"/>
</classes>
</test>
<test name="ApplicationSignin">
<paramater name = "username" value="xxxx"/>
<parameter name="pwd" value="1111"/>
<classes>
<class name="com.simpletest.Signin"/>
</classes>
</test>
</suite>
testng2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel suite 2" >
<test name="Browser Setup">
<parameter name="browser" value="Chrome" />
<classes>
<class name="com.simpletest.LaunchBrowser"/>
</classes>
</test>
<test name="Application Signin">
<paramater name = "username" value="yyyy"/>
<parameter name="pwd" value="2222"/>
<classes>
<class name="com.simpletest.Signin"/>
</classes>
</test>
</suite>
启动浏览器的示例代码
public class LaunchBrowser
{
@Test
@Parameters("browser")
public void startBrowser(String browser)
{
switch(browser)
{
case "Chrome":
desCapabilities = DesiredCapabilities.chrome();
desCapabilities.setPlatform(Platform.ANY);
desCapabilities.setBrowserName(DriverConstants.CHROME_BROWSER);
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
driver = new ChromeDriver();
driver.manage().window().maximize();
System.out.println("For Browser : " + browser);
break;
case "Firefox":
desCapabilities = DesiredCapabilities.firefox();
desCapabilities.setPlatform(Platform.ANY);
desCapabilities.setBrowserName(DriverConstants.FIREFOX_BROWSER);
driver = new FirefoxDriver();
driver.manage().window().maximize();
System.out.println("For Browser : " + browser);
break;
default :
System.out.println("Brower choice not available");
}
}
parentsuite.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Selenium Test Suite" thread-count="2" preserve-order="true">
<suite-files>
<suite-file path="testng1.xml" />
<suite-file path="testng2.xml" />
</suite-files>
</suite>
注意:如何在不使用网格概念的情况下解决此问题。请帮我解决这个问题。
答案 0 :(得分:1)
为了让您平行拆分@Test
种方法,您需要将属性parallel
设置为<suite>
标记中的以下值之一
methods
- 这会导致所有@Test
方法并行运行。tests
- 这会导致<test>
个标记并行运行,但每个@Test
标记中存在的<test>
方法将按顺序运行classes
- 这将导致TestNG并行运行所有测试类(测试类本质上是一个包含一个或多个@Test
方法的类),但仍然是@Test
方法按顺序运行。instances
- 只有在@Factory
带注释的构造函数时才会涉及。因此,您可以根据需要选择其中一个并行执行策略,让TestNG并行运行测试。
但所有的说法和完成,按照您在评论中向我解释的内容,您的测试代码需要一些修复。您尚未展示如何在测试类中的两个或多个WebDriver
方法之间共享@Test
个实例。
因此,有可能一旦启用并行执行,您将看到新问题。
默认情况下, TestNG(例如,通过maven surefire插件运行时)并不会并行运行多个套件。要了解如何并行运行多个套件(<suite>
),请参阅我的博文here