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

Can I run the same cucumber suite on multiple devices using one maven command?

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

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

我在想一个包含多个 Maven 命令的批处理文件可能会做到这一点,但是有没有一种方法可以用一个命令完成所有的工作?

我使用 maven-failsafe,因为我不希望 运行 停止失败的测试,我的 pom 设置如下,如果连接了 2 个设备,它将跨设备拆分功能

我有一个黄瓜 运行ner class。我没看过詹金斯。我首先希望看看我是否可以从我的 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>

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

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

  1. 对于iOS平台-> IOSDriver
  2. 对于 Android 平台 -> Android驱动程序
  3. 对于 Web 平台 -> WebDriver

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

对我自己的问题的迟到回应,但我正在使用以下设置根据我连接的设备数量使用个人 运行ner class。我使用此 plugin 获取设备数量,然后对每个设备使用 运行ner。不是开发人员,所以请加一点盐。它有效,但不确定是否有效:-)

@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 class 是一个 Cucumber class。这样做的副作用是,在使用此方法时,某些黄瓜插件似乎无法使用(例如,cluecumber 仅报告一个 class,但尚未深入研究原因),但除此之外似乎到目前为止工作。

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