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

时间:2019-05-28 13:59:49

标签: maven mobile automation appium cucumber-jvm

我有一个用于在移动设备上进行测试的黄瓜/苹果框架。现在,黄瓜和鸦片支持并行运行,我已将其设置为将功能分发到每个连接的设备(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>

任何帮助将不胜感激。如果您需要了解任何信息,请告诉我,或者如果有任何我需要的代码,我可以在此处发布

2 个答案:

答案 0 :(得分:0)

是的,可以。为此,您需要按以下多个平台的比例获得N No的WebDriver实现-

  1. 对于 iOS 平台-> IOSDriver
  2. 对于 Android 平台-> AndroidDriver
  3. 对于 Web 平台-> 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类。这样做的副作用是,似乎有些黄瓜插件在使用此方法时无法使用(例如,线索只报告一个类,但尚未探究原因),但到目前为止,其他插件似乎都无法使用

有时我想运行分布式测试而不是分散测试,因此希望可以轻松地进行此切换。也许是黄瓜插件。