【发布时间】:2017-04-17 07:12:11
【问题描述】:
我想在三个不同的浏览器中并行运行一个特性文件。 如何创建三个不同的 webdriver 实例? 并请添加如何对两个不同的功能文件执行相同的操作?
附:我正在用 java 研究黄瓜。
【问题讨论】:
-
你用的是testng还是junit?
-
我正在使用junit。
标签: java cross-browser cucumber
我想在三个不同的浏览器中并行运行一个特性文件。 如何创建三个不同的 webdriver 实例? 并请添加如何对两个不同的功能文件执行相同的操作?
附:我正在用 java 研究黄瓜。
【问题讨论】:
标签: java cross-browser cucumber
当您提到“三个不同的浏览器并行”时,您是指 Chrome、Firefox 和资源管理器并行运行还是三个不同的 Chrome 实例。
如果是第二种案例,请参考这篇文章 - https://opencredo.com/running-cucumber-jvm-tests-in-parallel/。这背后的基本逻辑是将所需的并行实例数量分叉到单独的 JVM 中。这是使用 Maven surefire 插件完成的。
如果是 first 情况,那么您将需要修改某些方面。该插件将“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 添加代码)。
代码
ShareDriver.java -
用 this 覆盖静态块并添加其他方法。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 - 删除标签。更改功能文件之一以包含其他一些步骤。在步骤定义类中对新步骤进行编码。
更改为 runner classes - 从 cucumberoptions 中删除标签选项,您可能需要添加胶水选项以指向您的步骤定义类。所以实际上两个跑步者类是相同的。如果需要,您可以删除其中一个跑步者课程。其他测试将在每个浏览器中重复两次。
pom.xml - 确保定义的分叉数量 (<surefire.fork.count>5</surefire.fork.count>) 大于您正在使用的浏览器数量。否则逻辑将失败。
在 Maven 中运行 -- 您可以在目标选项中使用命令 clean install -DnumFork=${surefire.forkNumber} 从 Eclipse 插件运行。或者从命令行使用mvn clean install -DnumFork=${surefire.forkNumber}。
这应该在所有浏览器实例中运行所有功能文件中的所有场景。您可以优化标签和功能等黄瓜选项以运行特定场景或功能文件。
【讨论】:
我会选择执行构建三次。我会为每次执行设置一个环境变量来决定使用哪个浏览器。
要并行运行它们,我会编写一个设置环境变量并启动三个执行的 shell 脚本。
【讨论】: