黄瓜中的跨浏览器测试
Cross browser testing in cucumber
我想 运行 在三种不同的浏览器中并行处理一个功能文件。
如何创建三个不同的 webdriver 实例?
并请添加如何对两个不同的功能文件执行相同的操作?
P.S。我正在用 java.
研究黄瓜
我会选择执行三次构建。我会为每次执行设置一个环境变量来决定使用哪个浏览器。
为了运行他们并行,我会写一个shell脚本来设置环境变量并启动三个执行。
当您提到 "three different browsers in parallel" 时,您的意思是像 Chrome、Firefox 和 Explorer 运行并行 还是 仅 Chrome 的三个不同实例 .
如果是第二种情况参考这篇文章-https://opencredo.com/running-cucumber-jvm-tests-in-parallel/。这背后的基本逻辑是根据所需的并行实例数分叉到单独的 JVM 中。这是使用 Maven surefire 插件完成的。
如果是第一个情况,那么您将需要修改某些方面。该插件将 'fork number' 传递给 JVM,您可以使用它来实例化该 JVM 的特定浏览器驱动程序。
我正在使用 Java 8, junit 4.12, picocontainer for Dependency Injection, Maven 3
(由于 'fork number' 传递 null,因此不适用于较低版本),selenium 2.53
(如果驱动程序需要,您需要找出 Selenium 3 的代码更改创建)和浏览器 Chrome and Firefox
(您需要为 IE 添加代码)。
代码
- 文章 github 对
ShareDriver.java
的更改 -
用这个覆盖静态块并添加其他方法。
static {
instantiateDriver();
Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
}
private static void instantiateDriver() {
//numFork will be passed in the maven command line or eclipse
//--- clean install -DnumFork=${surefire.forkNumber}
int browserType = Integer.parseInt(System.getProperty("numFork"));
System.out.println("BROWSER TYPE "+browserType);
if(browserType == 1)
instantiateChromeDriver();
else if (browserType == 2)
instantiateFirefoxDriver();
else if (browserType == 3) {
instantiateIEDriver();
}
}
private static void instantiateIEDriver() {
//Implement this
}
private static void instantiateFirefoxDriver() {
REAL_DRIVER = new FirefoxDriver();
REAL_DRIVER.manage().window().maximize();
}
private static void instantiateChromeDriver() {
System.setProperty("webdriver.chrome.driver", "location of chromedriver.exe");
ChromeOptions chop = new ChromeOptions();
chop.addArguments("test-type");
chop.addArguments("start-maximized");
chop.addArguments("--disable-extensions");
REAL_DRIVER = new ChromeDriver(chop);
}
对 feature files
的更改 - 删除标签。更改其中一个功能文件以包含一些其他步骤。在步骤定义中编写新步骤 class.
对 runner classes
的更改 - 从 cucumberoptions 中删除标签选项,您可能需要添加胶水选项以指向您的步骤定义 class。所以实际上 运行ner classes 是相同的。如果需要,您可以删除 运行ner classes 之一。其他测试将在每个浏览器中重复两次。
pom.xml
- 确保定义的分叉数量 (<surefire.fork.count>5</surefire.fork.count>
) 多于您使用的浏览器数量。 否则逻辑会失败。
运行 in Maven -- 您可以使用命令 [=19= 从 eclipse 插件 运行 ] 在目标选项中。或者从命令行使用 mvn clean install -DnumFork=${surefire.forkNumber}
.
这应该运行所有浏览器实例中所有功能文件中的所有场景。您可以将标签和功能等黄瓜选项细化为运行 具体场景或功能文件。
我想 运行 在三种不同的浏览器中并行处理一个功能文件。 如何创建三个不同的 webdriver 实例? 并请添加如何对两个不同的功能文件执行相同的操作?
P.S。我正在用 java.
研究黄瓜我会选择执行三次构建。我会为每次执行设置一个环境变量来决定使用哪个浏览器。
为了运行他们并行,我会写一个shell脚本来设置环境变量并启动三个执行。
当您提到 "three different browsers in parallel" 时,您的意思是像 Chrome、Firefox 和 Explorer 运行并行 还是 仅 Chrome 的三个不同实例 .
如果是第二种情况参考这篇文章-https://opencredo.com/running-cucumber-jvm-tests-in-parallel/。这背后的基本逻辑是根据所需的并行实例数分叉到单独的 JVM 中。这是使用 Maven surefire 插件完成的。
如果是第一个情况,那么您将需要修改某些方面。该插件将 'fork number' 传递给 JVM,您可以使用它来实例化该 JVM 的特定浏览器驱动程序。
我正在使用 Java 8, junit 4.12, picocontainer for Dependency Injection, Maven 3
(由于 'fork number' 传递 null,因此不适用于较低版本),selenium 2.53
(如果驱动程序需要,您需要找出 Selenium 3 的代码更改创建)和浏览器 Chrome and Firefox
(您需要为 IE 添加代码)。
代码
- 文章 github 对
ShareDriver.java
的更改 - 用这个覆盖静态块并添加其他方法。
static { instantiateDriver(); Runtime.getRuntime().addShutdownHook(CLOSE_THREAD); } private static void instantiateDriver() { //numFork will be passed in the maven command line or eclipse //--- clean install -DnumFork=${surefire.forkNumber} int browserType = Integer.parseInt(System.getProperty("numFork")); System.out.println("BROWSER TYPE "+browserType); if(browserType == 1) instantiateChromeDriver(); else if (browserType == 2) instantiateFirefoxDriver(); else if (browserType == 3) { instantiateIEDriver(); } } private static void instantiateIEDriver() { //Implement this } private static void instantiateFirefoxDriver() { REAL_DRIVER = new FirefoxDriver(); REAL_DRIVER.manage().window().maximize(); } private static void instantiateChromeDriver() { System.setProperty("webdriver.chrome.driver", "location of chromedriver.exe"); ChromeOptions chop = new ChromeOptions(); chop.addArguments("test-type"); chop.addArguments("start-maximized"); chop.addArguments("--disable-extensions"); REAL_DRIVER = new ChromeDriver(chop); }
对
feature files
的更改 - 删除标签。更改其中一个功能文件以包含一些其他步骤。在步骤定义中编写新步骤 class.对
runner classes
的更改 - 从 cucumberoptions 中删除标签选项,您可能需要添加胶水选项以指向您的步骤定义 class。所以实际上 运行ner classes 是相同的。如果需要,您可以删除 运行ner classes 之一。其他测试将在每个浏览器中重复两次。pom.xml
- 确保定义的分叉数量 (<surefire.fork.count>5</surefire.fork.count>
) 多于您使用的浏览器数量。 否则逻辑会失败。
运行 in Maven -- 您可以使用命令 [=19= 从 eclipse 插件 运行 ] 在目标选项中。或者从命令行使用 mvn clean install -DnumFork=${surefire.forkNumber}
.
这应该运行所有浏览器实例中所有功能文件中的所有场景。您可以将标签和功能等黄瓜选项细化为运行 具体场景或功能文件。