java - TestNG 并行测试未在 2 个真实的 android 设备上运行。

标签 java android selenium appium

下面描述的问题是我已经苦苦挣扎了大约几周的问题。我正在尝试在 2 个真实的 android 物理设备 上使用 testng.xml 文件运行我的 appium 并行测试。所以,故事是这样的: 我的 Eclipse 项目中有 2 个包(每个包对应每个真实的 android 设备),每个包包含几个仅属于该包的页面对象类(如主页、查找邮轮、选择选项、付款等)和一个这是一个实际的 (smoke) 测试类。当我从 Appium UI 打开 appium 服务器并手动启动它时,每台移动设备的每个smoke 测试都完美流畅地运行。但是当我决定在相应的移动设备上并行运行每个冒烟测试时,问题就来了。使用 TestNG.xml 文件对我不起作用。发生的事情是 testNG.xml 文件采用一个 smoke 测试脚本并仅在一个 android 设备上运行它(随机选择它们甚至认为 adb devices 显示两个 android 设备连接正确),而不是第二个 吸烟 测试脚本并在同一台 Android 设备上运行它。我已经在远程 Selenium Grid 上注册了 2 个 appium 服务器实例 - 没有帮助;我已经在本地 Selenium Grid 上注册了 2 个 appium 服务器实例 - 没有帮助;我已经从脚本中以编程方式打开了 2 个 appium 服务器实例 - 没有帮助。如果有人已经在真实的 android 设备上执行过并行 appium/selenium 测试,请告知。下面是我的testNG.xml文件的技术说明

我已经尝试过 testNG.xml 文件的变体:

     <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
        <suite name="Suite" parallel = "classes" thread-count = "2" verbose = "1">
            <test name = "SomeTest">
            <classes>
               <class name="package1.SamsungGalaxyTab4Smoke_Test"/>
                   <class name="package2.SamsungGalaxyS5SmokeTest"/>
              </classes>
          </test> <!-- Test -->
        </suite> <!-- Suite -->   
    *******************************************************************************

     <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
        <suite name="Suite" parallel = "methods" thread-count = "2" verbose = "1">
            <test name = "SomeTest">
            <classes>
               <class name="package1.SamsungGalaxyTab4Smoke_Test"/>
                   <class name="package2.SamsungGalaxyS5SmokeTest"/>
              </classes>
          </test> <!-- Test -->
        </suite> <!-- Suite -->
********************************************************************************

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Suite" parallel = "tests" thread-count = "2" verbose = "1">
        <test name = "Test1">
        <classes>
           <class name="package1.SamsungGalaxyTab4SmokeTest"/>
          </classes>
    </test>
    <test>
    <classes>
              <class name="package2.SamsungGalaxyS5SmokeTest"/>
      </test> <!-- Test -->
    </suite> <!-- Suite --> 

下面是烟雾测试所需的功能和启动服务器脚本:

第一台安卓设备

@BeforeMethod
    public void setup() throws Exception, IOException, MalformedURLException {

        ServerArguments serverArguments = new ServerArguments();
        serverArguments.setArgument("--address", "10.100.225.196");
        serverArguments.setArgument("--local-timezone", true);
        serverArguments.setArgument("--port", "5008");
        serverArguments.setArgument("--session-override", true);
        AppiumServer appiumserver = new AppiumServer(serverArguments);
        if (appiumserver.isServerRunning()){
            appiumserver.stopServer();
        }
        appiumserver.startServer();
        if (appiumserver.isServerRunning()){
        System.out.println("Appium server for Galaxy S5 has been started successfully" );
        }else {
            System.out.println("Appium server for Galaxy S5 has not been started successfully" );
        }
        Thread.sleep(10000);
        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium"); 
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Android device");
        cap.setCapability("--udid", "69d3br21");
        cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1.1");
        cap.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
        cap.setCapability(MobileCapabilityType.TAKES_SCREENSHOT, true);
        cap.setCapability(AndroidMobileCapabilityType.DEVICE_READY_TIMEOUT, 60);
        driver2 = new RemoteWebDriver(new URL("http://10.100.225.196:5008/wd/hub"), cap);

第二个安卓设备

@BeforeMethod
    public void setup() throws Exception, IOException, MalformedURLException {

        ServerArguments serverArguments = new ServerArguments();
        serverArguments.setArgument("--address", "10.100.225.196");
        serverArguments.setArgument("--local-timezone", true);
        serverArguments.setArgument("--port", "4723");
        serverArguments.setArgument("--session-override", true);
        AppiumServer appiumserver = new AppiumServer(serverArguments);
        if (appiumserver.isServerRunning()){
            appiumserver.stopServer();
        }
        appiumserver.startServer();
        if (appiumserver.isServerRunning()){
            System.out.println("Appium server for Galaxy Tab4 has been started successfully" );
            }else {
                System.out.println("Appium server for Galaxy Tab4 has not been started successfully" );
            }
        Thread.sleep(10000);
        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "GalaxyTab4");
        cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        cap.setCapability("--udid", "d66f5f10");
        cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1.1");
        cap.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
        cap.setCapability(MobileCapabilityType.TAKES_SCREENSHOT, true);
        cap.setCapability(AndroidMobileCapabilityType.DEVICE_READY_TIMEOUT, 60);
        driver = new RemoteWebDriver(new URL("http://10.100.225.196:4723/wd/hub"), cap);

如前所述,问题在于 testNG.xml 仅在一台设备上运行 smoke 测试,而不是同时在两台设备上并行运行。如果有什么不对的地方请给我提示。

最佳答案

您还应该通过添加一个服务器参数来使用不同的 Bootstrap 运行 Appium 服务器:

serverArguments.setArgument("--bp", "78653");

服务器标志 click

更多详情请点击以下链接: Click

关于java - TestNG 并行测试未在 2 个真实的 android 设备上运行。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36316688/

相关文章:

java - 无法使用 Selenium 打开 Google Chrome Portable

macos - 使用 Visual Studio 进行夜间自动化

java - 如何用Java中的匿名类替换监听器?

java - 如何仅获取 ELEMENT_NODE 类型的子节点

javascript - 谁能帮我分离世博会应用程序

java - 如何有效地更新 EnumeratedDistribution 实例中的概率?

android - 如何通过复制保护来复制我的申请?

c# - 在 Chrome 中捕获 XHR/Ajax 请求

java.lang.Math—— “within 1 ULP” 是独占还是包含?

java - Thymeleaf:错误解决模板