我可以使用一个 maven 命令在多个设备上运行相同的黄瓜套件吗?



我有一个用于在移动设备上测试的黄瓜/appium框架。现在 Cucumber 和 appium 支持并行运行,我将其设置为将功能分发到每个连接的设备(junit 仅拆分功能,而不是场景)。我使用 DriverFactory 类实现此目的。这个类效果很好,但在这种情况下并行运行只有在每次都是相同的驱动程序(例如 ChromeDriver)时才真正有用。在 junit @BeforeClass 方法期间,我的设备被添加到池中,我的 DriverFactory 会逐个使用它们,直到为空。

我的问题是,虽然很快,但我有时想在每个连接的设备上运行整个套件(仅仅因为测试在一台设备上通过,并不意味着它会在其他设备上通过)。

我在想一个包含多个 maven 命令的批处理文件可能会做到这一点,但是有没有办法用一个命令来完成这一切?

我使用 maven-failsafe,因为我不希望运行因测试失败而停止,我的 pom 设置如下,如果连接了 2 台设备,则会在设备之间拆分功能

我有一个黄瓜跑步班。我没有看过詹金斯。我首先希望看看我是否可以从我的 mac 完成所有这些工作,因为我已经让它在每个功能的基础上工作。

这是我相关的 maven-failsafe 代码。我可以更新我连接的任何数量的设备的threadCount(考虑动态执行此操作)。我尝试使用套件而不是方法,但它仅在一台设备上运行整个套件

<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<includes>
<include>**/RunCucumberTest.java</include>
</includes>
<parallel>methods</parallel>
<threadCount>2</threadCount>
<perCoreThreadCount>false</perCoreThreadCount>
</configuration>
</execution>
</executions>

任何帮助将不胜感激。如果您有任何需要知道的,请告诉我,或者如果我的任何代码会有所帮助,我可以在这里发布

是的,你可以。为此,您需要有 N 个 Web 驱动程序实现,与下面的多个平台成比例 -

  1. 适用于iOS平台 -> IOSDriver
  2. 适用于 Android Platfrom ->AndroidDriver
  3. 对于 Web 平台 ->WebDriver

此外,还需要编写线程安全代码,以保证多个线程同时安全执行。此外,您应避免使用静态变量和方法。

对我自己的问题的延迟回答,但我使用以下设置根据我连接的设备数量使用单个运行器类。我使用此插件来获取设备数量,然后使用每个设备的运行器。不是开发人员,所以要加一点盐。它有效,但不确定是否有效:-)

@RunWith(AllTests.class)
public class ClassRunnerTest {
public static TestSuite suite() {
int numberOfDevices;
try {
DeviceInfo deviceInfo = new DeviceInfoImpl(DeviceType.ALL);
List<Device> devices = deviceInfo.getDevices();
numberOfDevices = devices.size();
} catch (IOException e) {
throw new Exception();
} catch (DeviceNotFoundException e) {
throw new Exception();
}
TestSuite suite = new ActiveTestSuite();
for (int i = 0; i < numberOfDevices; i++) {
suite.addTest(new JUnit4TestAdapter(RunCucumberTest.class));
}
return suite;
}
}

RunCucumberTest 类是一个 Cucumber 类。这样做的副作用是,在使用此方法时似乎某些黄瓜插件不起作用(例如,cluecumber 只报告一个类,但没有深入研究原因),但除此之外,它似乎到目前为止有效。

有时我想运行分布式测试而不是碎片化,因此请考虑轻松进行切换。也许是黄瓜插件。

最新更新