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

TestNG parallel tests are not running on 2 real android devices.

下面描述的问题是我已经困扰了大约几周的问题。我正在尝试 运行 我的 appium 并行测试使用 2 真实 android 物理设备 上的 testng.xml 文件。所以,故事是这样的: 我的 Eclipse 项目中有 2 个包(每个包对应每个真实 android 设备),每个包包含几个仅属于该包的页面对象 classes(如主页、查找游轮、select 选项、付款等)和一个 class 这是一个实际的 (smoke) 测试。当我从 Appium UI 打开 appium 服务器并手动启动它时,每个移动设备 运行 的每个 smoke 测试都完美流畅。但是当我决定 运行 在其适当的移动设备上并行进行每个冒烟测试时,问题就来了。使用 TestNG.xml 文件对我不起作用。发生的事情是 testNG.xml 文件需要一个 smoke 测试脚本并且 运行 它只在一个 android 设备上(随机选择它们甚至认为 adb devices 表明android 设备都正确连接),而不是在同一个 android 设备上使用第二个 smoke 测试脚本和 运行s 它。我已经在远程 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 --> 

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

第一个 android 设备

@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);

第二个 android 设备

@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

下面有更多详细信息 link: Click