首先,对不起我的英语,它不是那么完美:)
因此,我面临以下问题:我正在尝试使用Selenium
Grid和TestNg在不同的浏览器中运行并行测试,并在@BeforeTest方法中传递参数。我的问题是,在初始化每个测试时,似乎它们将使用最后一个测试的参数。因此,在此示例中,当我运行测试时,它将打开两个Chrome,而不是一个Firefox和一个Chrome。
(browser.getDriver()方法返回一个RemoteWebDriver)
TestNG.xml:
<suite thread-count="2" verbose="10" name="testSuite" parallel="tests">
<test name="nameOfTheTestFirefox">
<parameter name="platform" value="windows"/>
<parameter name="browserVersion" value="32"/>
<parameter name="browserName" value="firefox"/>
<classes>
<class name="example.test.login.LoginOverlayTest"/>
</classes>
</test> <!-- nameOfTheTestFirefox -->
<test name="nameOfTheTestChrome">
<parameter name="platform" value="windows"/>
<parameter name="browserVersion" value="38"/>
<parameter name="browserName" value="chrome"/>
<classes>
<class name="example.test.login.LoginOverlayTest"/>
</classes>
</test> <!-- nameOfTheTestChrome -->
</suite> <!-- testSuite -->
AbstractTest类:
public class SeleniumTest {
private static List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private static ThreadLocal<WebDriver> driverThread;
public static BrowserSetup browser;
@Parameters({ "browserName", "browserVersion", "platform"})
@BeforeTest()
public static void beforeTest(String browserName, @Optional("none") String browserVersion, String platform) throws WrongBrowserException, WrongPlatformException {
final BrowserSetup browser = new BrowserSetup(browserName, browserVersion, platform);
driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
final WebDriver webDriver = browser.getDriver();
webDriverPool.add(webDriver);
return webDriver;
}
};
}
public static WebDriver getDriver() {
return driverThread.get();
}
@AfterTest
public static void afterTest() {
for (WebDriver driver : webDriverPool) {
driver.quit();
}
}
}
而我的示例@Tests:
@Test
public void test1() throws InterruptedException {
WebDriver driver = getDriver();
System.out.println("START: test1");
driver.get("http://google.com");
Thread.sleep(5000);
System.out.println("END: test1, title: " + driver.getTitle());
}
@Test
public void test2() throws InterruptedException {
WebDriver driver = getDriver();
System.out.println("START: test2");
driver.get("http://amazon.com");
Thread.sleep(5000);
System.out.println("END: test2, title: " + driver.getTitle());
}
@Test
public void test3() throws InterruptedException {
WebDriver driver = getDriver();
System.out.println("START: test3");
driver.get("http://stackoverflow.com");
Thread.sleep(5000);
System.out.println("END: test3, title: " + driver.getTitle());
}
所以我的问题是如何在单独的线程中与给定参数并行运行测试?
提前致谢!
彼得
不要将字段设为静态。
private static List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private static ThreadLocal<WebDriver> driverThread;
public static BrowserSetup browser;
首先,对不起我的英语,它不是那么完美:) 所以我面临以下问题:我试图使用Selenium Grid和TestNg在不同的浏览器中运行并行测试,并在@BeforeTest方法中传递参数。我的问题是,当每个测试初始化时,他们似乎会使用最后一个测试的参数。所以在这个例子中,当我运行测试时,它将打开两个Chrome,而不是一个火狐和一个Chrome。(browser.getDriver()方法返回远程We
我正在试验如何与maven surefire和testng并行运行测试。然而,配置似乎不是很简单,我无法让它工作。下面是我的虚拟测试。 这是我的surefire配置: 测试基本上是按顺序运行的。以下是日志作为证据: 我的意图是并行运行所有测试(直到方法级别)。那么,我该如何实现呢?
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
主要内容:1. 使用XML传递参数,2. 通过@DataProvider传递参数,3. @DataProvider + 方法,4. @DataProvider + ITestContextTestNG中的另一个有趣的功能是参数化测试。 在大多数情况下,您会遇到业务逻辑需要大量测试的场景。 参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试。 TestNG可以通过两种不同的方式将参数直接传递给测试方法: 使用 使用数据提供者 在本教程中,我们将向您展示如何通过XML 或将参数传递给方法。
实际上,我正在创建一个框架,但在创建它时,我只想要它用于串行执行,但现在我想要对方法进行并行测试。问题是,我已经将驱动程序实例声明为静态的,并且由于静态的,第二个线程无法更改它的值。 我在一个单独的类中创建驱动程序,并使用getter方法获取它。 现在的问题是,如果我让Webdrive变成非静态的,那么我就无法在其他类中使用驱动程序。 即使我尝试扩展类(在这里创建驱动程序实例),它也会传递一个空值
我正在尝试使用2个xml文件与Maven并行运行我的测试,但似乎不起作用。我已经尝试了Maven留档中的步骤/参数:http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 以下是我的pom.xml文件: 这是功能1.xml文件: 我应该做哪些参数/更改才能使其生效? 谢谢你