简体   繁体   English

Appium,Cucumber和Junit如何在多个设备上并行运行测试

[英]Appium, Cucumber and Junit how to run tests in parallel on multiple devices

Trying to execute my appium tests in parallel on multiple devices. 尝试在多个设备上并行执行我的appium测试。

I currently can execute my test cases on one android device. 我目前可以在一台Android设备上执行测试用例。 After a chopping and changing I cannot get my tests to run in parallel. 经过修改和修改后,我无法使测试并行运行。

Heres my current set up. 这是我当前的设置。 Hoping to execute tests in parallel without the need for saucelabs or selenium grid. 希望可以并行执行测试,而不需要酱实验室或硒网格。

Example of my Junit runner 我的Junit跑步者示例

@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"json:target/cucumber.json", "pretty"}, features = {
    "src/test/resources/features/
},
    glue = "com.test.stepdefs")
public class RunCukesTest {

  private static AppiumDriverLocalService service;
  public static File file;

  @BeforeClass
  public static void startAppium() throws IOException {

    System.out.println("YOUR OS NAME : " + osName);

    String nodePath = null;
    String appiumPath = null;

    ServerArgument argument;

    if (osName.contains("mac")) {
//            mac paths
      nodePath = "/usr/local/bin/node";
      appiumPath = "/usr/local/lib/node_modules/appium/build/lib/main.js";

      service = AppiumDriverLocalService.buildService(new AppiumServiceBuilder()
                                                          .usingDriverExecutable(new File(nodePath))
                                                          .usingPort(4723)
                                                          .withArgument(GeneralServerFlag.LOG_LEVEL,
                                                                        "error")                                                         
                                                          .withAppiumJS(new File(appiumPath)));
    } else if (osName.contains("windows")) {

      service = AppiumDriverLocalService.buildDefaultService();

    } else if (osName.contains("linux")) {
//    linuxs path
      nodePath = System.getenv("PRODUCTION") + "/.linuxbrew/bin/node";
      appiumPath =
          System.getenv("PRODUCTION") + "/.linuxbrew/lib/node_modules/appium/build/lib/main.js";
      service = AppiumDriverLocalService.buildService(new AppiumServiceBuilder()
                                                          .usingDriverExecutable(new File(nodePath))
                                                          .usingPort(4723)
                                                          .withAppiumJS(new File(appiumPath)));
    }

    service.addOutPutStream(stream);
    service.start();
  }

  @AfterClass
  public static void stopAppium() {
    service.stop();
  }

and an example of my 还有我的一个例子

@Configuration
public class AppUtils {
    @Value("${explicit.wait}")
    public int explicitWaitTime;
    @Value("${implicit.wait}")
    public int implicitWaitTime;
    @Value("${default.wait}")
    public int defaultWaitTime;
    public String applicationName;
    public DesiredCapabilities capabilities;
    @Value("${appium.server.port}")
    private String appiumPort;
    @Value("${automation.instrumentation}")
    private String instrumentation;
    @Value("${browser.name}")
    private String browserName;
    @Value("${platform.name}")
    private String platformName;
    @Value("${device.name}")
    private String deviceName;
    @Value("${platform.version}")
    private String platformVersion;
    @Value("${new.command.timeout}")
    private String newCommandTimeout;
    @Value("${app.package}")
    private String appPackage;
    @Value("${device.ready.timeout}")
    private String deviceReadyTimeout;
    private URL serverUrl;
    private AppiumDriver<? extends MobileElement> driver;

    @Bean(destroyMethod = "quit")
    @Scope("cucumber-glue")
    public AndroidDriver getDriver() throws MalformedURLException {
        capabilities = new DesiredCapabilities();
        capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
        capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, platformVersion);
        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, platformName);
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, deviceName);
        capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, instrumentation);
        capabilities.setCapability("appPackage", "com.android.chrome"); //To be moved to properties
        capabilities.setCapability("appActivity", "com.google.android.apps.chrome.Main"); //To be moved to properties
        serverUrl = new URL("http://localhost:" + appiumPort + "/wd/hub");
//        LoggingPreferences logPrefs = new LoggingPreferences();
//        logPrefs.addPreferences()
//        capabilities.setCapability(CapabilityType.LOGGING_PREFS, logs);
        driver = new AndroidDriver(serverUrl, capabilities);

        driver.manage().timeouts().implicitlyWait(implicitWaitTime, TimeUnit.SECONDS);
        //driver.setLogLevel(Level.OFF);
        return (AndroidDriver) driver;
    }
}

Cannot find any good documentation on this and would appreciated any help. 找不到与此相关的任何文档,希望对您有所帮助。

您应该启动另一个监听不同端口的appium服务器实例,然后使用此新服务器端口功能启动测试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM