我正在使用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();
}
我遇到了类似的问题——我对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">
希望这有帮助。
在 XML 中添加以下内容以运行测试并行:
并行="测试"与您的套件名称,如下所示:
<suite name="Suite" parallel="tests" >
它将在您指定的所有浏览器中并行运行测试。
所以你可以做的不是在之前的类中创建驱动程序对象,而是在测试类中创建驱动程序对象,并在超类中实现一个之前的方法,该方法将为您的测试类创建一个驱动程序对象,并将其分配给您的测试类中的驱动程序对象,这个驱动程序对象将特定于您的测试类。然后如果你尝试并行运行,它就会工作。
我试图用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文件: