当前位置: 首页 > 知识库问答 >
问题:

并行测试环境中的testNG和selenium

终祯
2023-03-14

我正在使用testNg硒网格进行测试会话,我对整个东西非常满意 关键是测试的数量正在增长,现在它们至少需要 3 小时才能执行(在 30 个浏览器上进行 -100 次测试) 我计划进行 -150 次测试,所以,正如您可以想象的那样,我必须找到一个解决方案并并行启动它们 我试图玩一下这个,但没有现在很幸运,我现在看到的是两个浏览器启动,但只有一个通过测试。另一个只是等待:-)测试的结构如下,基本上 1 个测试=1 个类。在每次测试之前/之后,我都有一个@BeforeClass(启动驱动程序)和一个@AfterClass(停止驱动程序)

测试NG.xml -

    <test name="Smoke Test in IE - IE REMOTE" preserve-order="true">
        <parameter name="browser" value="IE" ></parameter> 
            <classes>

                <class name="com.TestThis.Script1" />
                <class name="com.TestThis.Script2" />
            </classes>
    </test>

测试类看起来像这个公共类Script1扩展了SelTestCase{

try {   
    GlobalHelp.LogIn("usr","pwd");
    customVerification.verifyTrue("Verify main page loaded( check download zone is visible!!)", ObjectHelp.isElementVisible(ObjectsPaths.Main_DownloadZone,120000)==true);
    customVerification.SoftVerifyEquals("Verify main page is displayed " , driver.getTitle(), "Application Stuff");
} catch (Exception e) {

    Reporter.log("from exception" + e.toString());          
    customVerification.verificationErrors.append(e);    
}
}

}

模块与之前

@BeforeSuite
@Parameters("appURL")
public void setEnv(
        @Optional(ObjectsPaths.MAIN_URL) String appURL) {
    this.appURL = appURL;   

}

@BeforeClass
@Parameters({ "browser", "HUBip" })
public void launchBrowser(@Optional("IE") String browser, @Optional("localhost") String HUBip) throws MalformedURLException {

    String brw=browser;
    String ip=HUBip;

    try {
         if (sBrw.equalsIgnoreCase("Chrome")) {
            URL url = new URL( "http","localhost",4444, "/wd/hub" );
            DesiredCapabilities caps=DesiredCapabilities.chrome();
            driver = new ScreenShotRemoteWebDriver(url, caps); 

        } else if (sBrw.equalsIgnoreCase("FF")) {
            URL url = new URL( "http", "localhost",4444, "/wd/hub")
            DesiredCapabilities caps=DesiredCapabilities.firefox(); 
        } else {
            URL url = new URL( "http", "localhost",4444, "/wd/hub" ); 
            DesiredCapabilities caps=DesiredCapabilities.internetExplorer();
            driver = new ScreenShotRemoteWebDriver(url, caps); 

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    };
    }
    try {
        Reporter.log("Test started at: " + ObjectHelp.getDate() +  "<p>");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    driver.manage().timeouts().implicitlyWait( ObjectHelp.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS );
    driver.manage().timeouts().pageLoadTimeout(ObjectHelp.PAGE_LOAD_TIMEOUT,TimeUnit.SECONDS);
    driver.manage().window().maximize();
    driver.navigate().to("http://www.google.com");          

}


//TBD
@AfterClass
public void closeBrowser() throws Exception {
    //driver.close();
    QuitDriver();
}

共有3个答案

濮阳唯
2023-03-14

我遇到了类似的问题——我对iOS/Android设备的并行测试互相踩了一脚。

我最终做的是识别所有线程特定的变量;并将它们声明为ThreadLocal,就像这样

ThreadLocal<MyDataModel> threadLocalModel = new ThreadLocal<>();

MyDataModel将容纳所有特定于线程的变量。

实施此更改后,脚趾踏步被大大减少。

此外,在您的 testNG xml 文件中,您可能希望指定并行执行测试的线程数(使用 thread-count=“nn”) - 就像这样......

<suite name="Parallel Mobile Tests" parallel="tests" thread-count="2"
    preserve-order="true" configfailurepolicy="continue">

希望这有帮助。

曹振
2023-03-14

在 XML 中添加以下内容以运行测试并行:

并行="测试"与您的套件名称,如下所示:

 <suite name="Suite" parallel="tests" >

它将在您指定的所有浏览器中并行运行测试。

赫连琦
2023-03-14

所以你可以做的不是在之前的类中创建驱动程序对象,而是在测试类中创建驱动程序对象,并在超类中实现一个之前的方法,该方法将为您的测试类创建一个驱动程序对象,并将其分配给您的测试类中的驱动程序对象,这个驱动程序对象将特定于您的测试类。然后如果你尝试并行运行,它就会工作。

 类似资料:
  • 我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。

  • 我正在试验如何与maven surefire和testng并行运行测试。然而,配置似乎不是很简单,我无法让它工作。下面是我的虚拟测试。 这是我的surefire配置: 测试基本上是按顺序运行的。以下是日志作为证据: 我的意图是并行运行所有测试(直到方法级别)。那么,我该如何实现呢?

  • 我正在尝试使用2个xml文件与Maven并行运行我的测试,但似乎不起作用。我已经尝试了Maven留档中的步骤/参数:http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 以下是我的pom.xml文件: 这是功能1.xml文件: 我应该做哪些参数/更改才能使其生效? 谢谢你

  • 类TestParallel.FirstTestClass线程ID:22名称:TestNG 类TestParallel.SecondTestClass线程ID:23名称:TestNG 类TestParallel.TestSetup线程ID:23名称:TestNG java.lang.NullPoInterException位于TestParallel.TestSetup.OnTestFailure(

  • 当我使用Selenium网格在appium(Android)中运行并行测试脚本时,我得到以下错误。 默认套件运行得测试总数:6,失败:0,跳过:3配置失败:1,跳过:0 堆栈跟踪消息:org.openqa.selenium.sessionNotCreatedException:无法创建新会话。(原始错误:请求了一个新会话,但一个正在进行)我的TestNG xml文件: config.json文件: