我有一个用于在移动设备上进行测试的黄瓜/苹果框架。现在,黄瓜和鸦片支持并行运行,我已将其设置为将功能分发到每个连接的设备(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>
任何帮助将不胜感激。如果您需要了解任何信息,请告诉我,或者如果有任何我需要的代码,我可以在此处发布
答案 0 :(得分:0)
是的,可以。为此,您需要按以下多个平台的比例获得N No的WebDriver实现-
此外,您还需要编写线程安全代码,以确保多个线程可以同时安全执行。另外,您应避免使用静态变量和方法。
答案 1 :(得分:0)
我对自己的问题做出了回应,但是我正在使用以下设置,根据我连接的设备数量使用单个运行程序类。我使用此plugin获取设备数量,然后使用每个设备的运行器。不是开发人员,因此请捏一点盐。它有效,但不确定是否正确:-)
@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类。这样做的副作用是,似乎有些黄瓜插件在使用此方法时无法使用(例如,线索只报告一个类,但尚未探究原因),但到目前为止,其他插件似乎都无法使用
有时我想运行分布式测试而不是分散测试,因此希望可以轻松地进行此切换。也许是黄瓜插件。