目前,我有一个Selenium网格设置,有1个本地集线器和2个本地节点。集线器能够分发并行运行的测试,并将其分发到节点。我在并行运行测试。
public abstract class BaseTest
{
String testFolder;
String testName;
protected String envName;
protected Configuration config;
protected String host;
protected RemoteWebDriver driver;
protected String proxy;
protected SomeData someData;
protected SomeController someController;
public BaseTest() {
}
public BaseTest( String testFolder, String testName)
{
this.testFolder = testFolder;
this.testName = testName;
this.envName = System.getProperty("config");
this.proxy = System.getProperty("proxy");
config = this.envName;
}
@BeforeMethod
public void startTest(Method testMethod) {
LOG.info("Starting test: " + testMethod.getName());
try {
this.someData = new SomeData();
this.driver = WebDriverSetup.getDriver();
this.someController = new someController(this.driver, this.someData);
driver.navigate().to("https://" + this.host);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException");
}
}
@AfterMethod
public void closeWindow() {
driver.close();
driver.quit();
}
}
public class WebDriverSetup {
public static RemoteWebDriver getDriver() throws MalformedURLException{
String SELENIUM_HUB_URL = "http://localhost:4444/wd/hub";
ThreadLocal<RemoteWebDriver> remoteWebDriver = null;
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
String proxy = System.getProperty("proxy");
if (proxy != null && !proxy.isEmpty()) {
System.out.println("Using proxy: " + proxy);
capabilities.setCapability(CapabilityType.PROXY, proxy);
}
try {
remoteWebDriver = new ThreadLocal<RemoteWebDriver>();
remoteWebDriver.set(new RemoteWebDriver(new URL(SELENIUM_HUB_URL),
capabilities));
} catch (MalformedURLException e) {
System.out.println("Tackle Issue with RemoteDriverSetup");
}
remoteWebDriver.get().manage().window()
.setSize(new Dimension(2880, 1524));
remoteWebDriver.get().manage().timeouts()
.pageLoadTimeout(10, TimeUnit.SECONDS);
remoteWebDriver.get().manage().timeouts()
.implicitlyWait(10, TimeUnit.SECONDS);
return remoteWebDriver.get();
}
}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Multiple Tests Suite" verbose="1" parallel="methods">
<test name="Test1">
<classes>
<class name="com.itesteverything.qa.Tests"></class>
</classes>
</test>
</suite>
public class Tests extends BaseTest {
@Parameters({"testName", "env" })
public Tests( @Optional String testName, @Optional String env ) {
super( null, testName, null, env );
}
@BeforeMethod
public void setup() throws Exception {
//setSomeData
}
public void test1() throws Exception {
use driver from super
use someData from super
use someController is using the driver from super
}
public void test2() throws Exception {
use driver from super
use someData from super
use someController is using the driver from super
}
在运行这些测试时,我得到以下错误
构建信息:版本:'2.44.0',修订:'76D78CF323CE037C5F92DB6C1BBA601C2AC43AD8',时间:'2014-10-23 13:11:40'驱动程序信息:Driver.version:RemoteWebDriver org.openqa.selenium.remote.SessionNotFoundException:会话ID为空。调用quit()后使用WebDriver?构建信息:版本:'2.44.0',修订:'76D78CF323CE037C1BBA601C2AC43AD8',时间:'2014-10-23 13:11:40'驱动程序信息:Driver.version:RemoteWebDriver at org.openqa.selenium.remote.httpcommandexecutor.execute(httpcommandexecutor.java:158)at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572)at RemoteWebDriver.FindelementById(RemoteWebDriver.java:393),org.openqa.selenium.remote.RemoteWebDriver.findelement(by.java:214),org.openqa.selenium.remote.RemoteWebDriver.findelement(RemoteWebDriver.java:344),org.openqa.selenium.support.pageFactory.defaultElementLocator.findelement(accessorimpl.java:57)位于sun.reflect.delegatingMethodAccessorimpl.Invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.method.invokeMethod(method.java:606)在org.testng.internal.methodInvocationHelper.invokeMethod(methodInvocationHelper.java:80)在org.testng.internal.invoker.invokeMethod(invoker.java:673),在org.testng.internal.invoker.invokeMethod(invoker.java:842),在在org.testng.internal.testmethodworker.run(testmethodworker.java:109)在java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145)在java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615)在java.lang.thread.run(threadpoolexecutor.java:745)测试失败:test2失败原因:会话ID为null
有人知道吗?
提前感谢!
不要在基类中设置driver,根本没有driver属性。同一实例正被不同的threadlocal驱动程序重写。
任何时候要运行测试,都可以在测试方法本身和after/before方法中引用WebDriversetup.getDriver()。
在TestNG XML中,我将类文件指定为Cucumber文件,这个java文件包含我的特性的路径。 当我运行时,我没有得到任何响应,并且可以看到空白的测试NG报告。 注意:我在Junit cucumber中尝试了相同的脚本,在grid中使用chrome,并且运行良好。 我的最后一个问题,我是网格新手,我想知道我们可以看到所有的浏览器在多个节点上运行,或者我们不能看到除了结果以外的任何东西,当通过
注: 在testng xml中,如果我将parallel=更改为类或方法,那么它可以很好地运行测试,但它不是并行地一个接一个地运行测试。 如果我保持parallel=“tests”,那么它会并行运行,但它会在同一个VM中打开同一个浏览器三次,这是不正确的。 我的设置: 我设置了11个虚拟机,每个盒子上的每个浏览器都初始化了Selenium网格节点。我已经创建了testng xml,以便在每个框上运
问题内容: 我当前的项目使用NUnit进行单元测试并驱动用Selenium编写的UAT。开发人员通常在VS.Net 2003中使用ReSharper的测试运行器来运行测试,而我们的构建框则通过NAnt启动测试。 我们想并行运行UAT测试,以便我们可以利用Selenium Grid / RC,以便它们能够更快地运行。 是否有人对如何实现这一目标有任何想法?和/或在多个浏览器环境下测试Selenium
当我试图在Selenium Grid 2旁边使用TestNG并行运行测试时,我似乎遇到了一个问题。 尽管打开的浏览器数量与我正在运行的测试数量相匹配,但所有测试的所有指令都被发送到同一个浏览器窗口。例如,每个测试都会打开一个页面并尝试登录。四个浏览器窗口将打开,但一个浏览器窗口将导航到登录页面四次,然后键入用户名四次,而其余的浏览器窗口保持不活动。 以下是我如何启动网格: xml套件是这样设置的:
我有一个特殊的情况。我有一个用java(selenium webdriver)编写的web应用程序测试,这些测试是用testng并行组织和执行的。过程如下所示: 每个testng测试(不是测试方法)都是并行运行的 我现在尝试在Selenium网格上运行这个套件。我面临的问题是,在完成测试后,webdriver实例会保持在Selenium网格中活动,并阻止下一个测试的执行,直到超时开始并终止测试。我
需要一些帮助来获得并行运行testng测试用例的正确方法。
我使用下面的TestNG配置来启用Selenium测试的并行执行。 Java代码: 硒测试预计将并行运行。我希望有2个浏览器打开并运行测试脚本。 但我只看到一个浏览器,所有3个测试都一个接一个地运行,而不是并行运行。我尝试过使用“并行”属性的测试、方法、类和实例选项。 有什么帮助吗?
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。