提问者:小点点

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


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

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

我认为具有多个maven命令的批处理文件可能会做到这一点,但有没有办法我可以用一个命令来完成这一切?

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

我有一个cucumber赛跑班。我还没有看过Jenkins。我首先希望看看我是否能从我的苹果电脑上做到这一切,因为我已经在每个功能的基础上工作了。

这是我相关的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个答案

匿名用户

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

  1. 对于iOS平台-

此外,您需要编写保证多个线程同时安全执行的线程安全代码。此外,您应该避免静态变量

匿名用户

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

@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类。这样做的副作用是,在使用此方法时,似乎有些cucumber插件不起作用(例如,club ecumber只报告一个类,但还没有深入研究原因),但除此之外,它似乎到目前为止还有效。

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