java - Selenium 网格,并行运行时测试在同一线程上开始

标签 java multithreading selenium ant testng

使用 selenium grid 和 TestNg 运行并行测试,@BeforeTest 方法似乎在同一个线程上启动两个测试,有什么想法吗?我试图确保每个测试类都在自己的线程上启动。

@BeforeTest(alwaysRun = true)
@Parameters({ "selenium.OS", "selenium.browser","selenium.testClassNameHere" })
public void beforeTest(String OS, String browser, String testClassNameHere) {
    Out.trace("Starting beforeTest for "+testClassNameHere+" on thread:  " + Thread.currentThread().hashCode());
    //create driver here
    Out.trace("beforeTest has finished");
}

但是,这里的日志显示,两个测试类在同一线程上启动,并且只创建了两个驱动程序,这会导致监听器和报告方面出现各种令人头痛的问题。

TRACE: Starting beforeTest for AcceptanceTests.ErrorReportingTests on thread:  777376239
TRACE: Starting beforeTest for AcceptanceTests.PopupTests on thread:  777376239
TRACE: Starting beforeTest for AcceptanceTests.LoginPageTests on thread:  1235740568
TRACE: Finished making driver.
TRACE: Finished making driver.
TRACE: beforeTest has finished
TRACE: beforeTest has finished

这是显示三个测试类的 ANT xml 文件...

<?xml version="1.0"?>
<suite name="Debugging QA Tests" parallel="tests" thread-count="10">
   <test name="Popup Tests" preserve-order="true" >
        <parameter name="selenium.OS" value="localhost" />
        <parameter name="selenium.browser" value="chrome" />
        <parameter name="selenium.testClassNameHere" value="AcceptanceTests.PopupTests" />
        <classes>
            <class name="qaautomation.AcceptanceTests.PopupTests" />
        </classes>
    </test>
  <test name="Login Page Tests" preserve-order="true">
        <parameter name="selenium.OS" value="localhost" />
        <parameter name="selenium.browser" value="chrome" />
        <parameter name="selenium.testClassNameHere" value="AcceptanceTests.LoginPageTests" />
        <classes>
            <class name="qaautomation.AcceptanceTests.LoginPageTests" />
        </classes>
    </test>
    <test name="Error Reporting Tests" preserve-order="true">
        <parameter name="selenium.OS" value="localhost" />
        <parameter name="selenium.browser" value="chrome" />
       <parameter name="selenium.testClassNameHere" value="AcceptanceTests.ErrorReportingTests" />
         <classes>
            <class name="qaautomation.AcceptanceTests.ErrorReportingTests" />
        </classes>
    </test>
</suite> 

最佳答案

您在哪个类中定义了 beforeTest 方法。 我创建了相同的结构,并且以下代码在不同的线程上为我工作。

public class TestCase {

    @BeforeTest(alwaysRun = true)
    @Parameters({ "selenium.OS", "selenium.browser","selenium.testClassNameHere" })
    public void beforeTest(String OS, String browser, String testClassNameHere) {
        System.out.println("Starting beforeTest for "+testClassNameHere+" on thread:  " + Thread.currentThread().hashCode());
        //create driver here
        System.out.println("beforeTest has finished");
    }
}

public class PopupTests extends TestCase{

    @Test(description="popup reporting")
    public void teszt()
    {
        System.out.println("popup");
    }
}
public class ErrorReportingTests extends TestCase{

    @Test(description="error reporting")
    public void teszt()
    {
        System.out.println("Error");
    }
}

public class LoginPageTests extends TestCase {

    @Test(description="login reporting")
    public void teszt()
    {
        System.out.println("Login");
    }
}

我使用了与您给出的相同的 testng xml 配置文件,以下是我的输出。

Starting beforeTest for AcceptanceTests.ErrorReportingTests on thread:  1968879864
beforeTest has finished
Starting beforeTest for AcceptanceTests.LoginPageTests on thread:  88161428
beforeTest has finished
Starting beforeTest for AcceptanceTests.PopupTests on thread:  1040963230
beforeTest has finished
Login
popup
Error

关于java - Selenium 网格,并行运行时测试在同一线程上开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32913892/

相关文章:

java - 让多个线程使用和更改同一个变量

java - ArrayList#contains 上的 ArrayIndexOutOfBounds(多线程)

java - 如何为 container.listBlobs() 和 blob.exists() 生成单个帐户 SAS

java - 将 double 转换为 BigDecimal 并设置 BigDecimal 精度

java - 使用枚举类型创建的单例,线程安全问题

python - 在 c9 中运行 selenium

C# 扩展 Selenium Webdriver 类

Python Selenium 获取所有 "href"属性

java - 如何在 Java EE 6 上使用 Entity.xml,或者等效项是什么

java - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本等对应的手册