首页 文章

TestNG并行测试没有在2个真正的Android设备上运行 .

提问于
浏览
3

下面描述的问题是我试图在 2 real android physical devices 上使用testng.xml文件运行我的appium并行测试的问题 . 这是故事:我的Eclipse项目中有2个包(每个真正的android设备的每个包) ,每个包都包含几个只属于该包的页面对象类(如主页,查找巡航,选择选项,付款等)和一个实际(冒烟)测试类 . 当我从Appium UI打开appium服务器并手动启动它时,每个移动设备的每次冒烟测试运行都非常顺畅 . 但问题来自于我决定在其适当的移动设备上并行运行每次烟雾测试 . 使用TestNG.xml文件没有发生的事情是testNG.xml文件需要一个冒烟测试脚本并且仅在一个Android设备上运行它(随机选择它们甚至认为adb设备显示两个android设备连接正确),而不是采取第二个烟雾测试脚本并在同一个Android设备上运行它 . 我在远程Selenium Grid上注册了2个appium服务器实例 - didn't help ;我在本地Selenium Grid上注册了2个appium服务器实例 - didn't help ;我已经从脚本中以编程方式打开了2个appium服务器实例 - didn't help . 如果有人已经在真正的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 -->

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

First android device

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

Second android device

@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仅在一个设备上运行两个冒烟测试,而不是同时在两个设备上并行执行 . 如果出现问题,请给我一个提示 .

1 回答

  • 1

    您还应该通过添加一个服务器参数来运行具有不同引导程序的Appium服务器:

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

    服务器标志click

    更多细节请访问以下链接:Click

相关问题