我正在尝试运行配置套件文件的并行测试。测试是针对使用Selenium的web应用程序。套件文件由多个测试组成。每个测试都包含多个测试类。每个测试中的第一个类用于初始化(@beforetest)WebDriver并关闭它(@aftertest)。WebDriver是静态的,以便将其传递给其他类(原因是我们需要从最后一个测试类结束的地方继续测试)。
当套件配置为按顺序运行测试时,测试将成功运行。但是当套件被配置为并行运行测试时,所有套件测试都只使用上次加载的webdriver并且每个测试都不在其各自的浏览器中运行。
你知道我怎样才能克服这种情况吗?
检查下面的套件模板:
<suite name="Register and Login functionality" parallel="tests" thread-count="2">
<test name="Test-1">
<parameter name="browser" value="chrome" />
<classes>
<class name="Init" />
<class name="Register" />
<class name="Login" />
</classes>
</test>
<test name="Test-2">
<parameter name="browser" value="chrome" />
<classes>
<class name="Init" />
<class name="Register" />
<class name="Login" />
</classes>
</test>
</suite>
来自Init测试类的模板:
public class Init{
private static WebDriver driver;
public WebDriver getWebDriver(){
return this.driver;
}
@BeforeTest
public void setUp(){
driver = new ChromeWebDriver();
}
@AfterTest
public void quit(){
driver.stop();
}
}
register测试类中的模板:
public class Register{
private WebDriver driver;
@BeforeClass
public void setUp(){
driver = Init.getWebDriver();
}
@Test
public void test1(){
........
........
}
@Test
public void test2(){
........
........
}
}
来自登录测试类的模板:
public class Login{
private WebDriver driver;
@BeforeClass
public void setUp(){
driver = Init.getWebDriver();
}
@Test
public void test1(){
........
........
}
@Test
public void test2(){
........
........
}
}
您正在init类中使用静态webdriver,这将确保只启动一个webdriver实例。
private static WebDriver driver;
正如您在问题中提到的,每个测试都不是在其各自的浏览器中运行的。您需要更改静态web驱动程序。删除静态web驱动程序并为每个测试启动web驱动程序,这将在新浏览器中打开每个测试。
静态对象对于JVM将是单个的。对于您的情况,可以将它们存储在ThreadLocal对象中。只需更改您的init类。
public static class Init{
private static ThreadLocal<WebDriver> WEBDRIVER = new ThreadLocal<WebDriver>();
public static WebDriver getWebDriver(){
WebDriver driver= WEBDRIVER.get();
if (driver== null) {
driver = new ChromeWebDriver();
WEBDRIVER.set(driver);
}
return driver;
}
@AfterTest
public void quit(){
getWebDriver().quit();
}
}
如果使用init作为基类扩展register和login类。那么您可以简单地避免在suite xml中提及init类
有4个类包含测试< code>TestClass1、TestClasss2、TestClass3、TestClass4。您需要创建2个测试套件,每个套件将包含2个类,并使用< code>Maven surefire插件并行运行它们。 我创建了两个包含以下内容的xml文件: 和 也添加到: 接下来,我用命令< code>mvn clean test运行项目,项目将要运行,但是测试没有开始。我哪里错了
我设置了Selenium grid2,它与以下并行TestNG测试套件配合得很好: 但是当我在TestNG蚂蚁任务中执行测试时,并行不再工作。 在我将测试套件文件中的并行模式更改为“tests”后,它再次工作,如下所示: 那么,这是否意味着TestNG ant任务不支持“类”并行测试套件?
请让我知道是否可以通过TestNG运行并行套件?
我试图使用XML和TestNG运行一个测试套件,但是我总是同时使用Eclipse和命令行得到相同的消息: 该文件已正确读取,但测试似乎没有运行。 以下是我的testng.xml的内容: 这是我的目录结构在Eclipse中的样子: 此外,这也是我试图通过命令行运行测试套件的方式: 我尝试过通过eclipse清理项目,但似乎没有帮助。我也试过跑步: < code>mvn clean,但它也没有完成工作
POM依赖项 测试套件。xml
执行testng xml时,它在套件中只执行1个测试 基本测试- 登录测试-