Appium结合TestNG并行执行测试

发表于:2020-9-07 09:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:shakebabe    来源:网络

  Appium 测试框架可以让我们使用不同的编程语言(Java、PythonRuby、JavaScript)测试不同移动端平台的应用(Android、iOS),目前也是最火的移动端测试框架。这篇文章会带着大家学习到如何在不同设备中并行执行测试。
  并行执行测试能够带来的好处:
  ·提升测试效率,我们可以将测试用例分发给不同的设备执行,从而可以减少整体测试所花费的时间
  ·同时我们可以将相同的测试用例给不同的设备去执行,特别适合需要做兼容性测试的场景
  Appium 本身并没有提供并行执行这样的功能,我们可以借助 Java 中最流行的 TestNG 单元测试框架所提供的功能实现。
  TestNG 简介
  TestNG(Next Generation)下一代单元测试框架技术,在这之前 Junit 在 Java 世界中是主流的选择,由于 TestNG 的强大和易用性,现在已逐步取代 Junit 成为最流行的单元测试框架技术。
  TestNG 优点
  TestNG 与 Junit 是比较类似的,但是与其相比提供了更为强大的特性并且更加易用,包括不仅限于
  ·更加丰富的注解
  ·超时、异常测试
  ·参数化测试
  ·并行测试
  TestNG 并行测试配置
  TestNG 可以支持通过 XML 配置并发测试:
  <?xml version="1.0" encoding="UTF-8"?>
  <suite name="Suite" parallel="tests" thread-count="2">
      <test name="test01">
          <classes>
              <class name="com.lemon.TestDemo"/>
          </classes>
      </test>
      <test name="test02">
          <classes>
              <class name="com.lemon.TestDemo"/>
          </classes>
      </test>
  </suite>
  两个关键配置:
  ·parallel=”{methods/classes/tests}”
  指定 methods/classes/tests 标签在同一线程中
  ·thread-count=”{你想要并发执行的线程数量}”
  执行 TestNG.xml 文件,可以看到两个测试类会在同一时间并行执行测试。
  TestNG 结合 Appium 并发执行测试
  Step1:开启多个 Appium Server,指定不同的监听端口
  Step2:adb 连接上多台设备
  这里以夜神的多开功能演示,默认第一台夜神模拟器端口 62001,第二台端口 62025,第三台 62026...
  多台真机只需打开 USB 调试模式,勾选弹框即可。
  Step3:编写测试脚本:
  public class AppiumParallelTest {
      public AndroidDriver driver;
      @Parameters({"udid", "appium_port", "uiautomator2_port"})
      @BeforeTest
      public void setUp(String udid, String appiumPort, String uiautomator2Port) throws Exception {
          DesiredCapabilities capabilities = new DesiredCapabilities();
          // Appium通过udid参数作为唯一标识找到测试的设备
          capabilities.setCapability("udid", udid);
          capabilities.setCapability("deviceName", udid);
          capabilities.setCapability("platformName", "Android");
          capabilities.setCapability("appPackage", "com.lemon.lemonban");
          capabilities.setCapability("appActivity", "com.lemon.lemonban.activity.WelcomeActivity");
          // 较新版本Appium Server默认使用的自动化引擎是UIAutomator2,每个线程对应的UIAutomator2端口都需要不同
          capabilities.setCapability("systemPort", uiautomator2Port);
          driver = new AndroidDriver(new URL("http://127.0.0.1:" + appiumPort + "/wd/hub"), capabilities);
          driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      }
      @Test
      public void testLogin() {
          driver.findElement(MobileBy.id("com.lemon.lemonban:id/navigation_tiku")).click();
          driver.findElement(MobileBy.id("com.lemon.lemonban:id/button_go_login")).click();
          driver.findElement(MobileBy.id("com.lemon.lemonban:id/et_mobile")).sendKeys("13323234545");
          driver.findElement(MobileBy.id("com.lemon.lemonban:id/et_password")).sendKeys("123456");
          driver.findElement(MobileBy.id("com.lemon.lemonban:id/btn_login")).click();
      }
      @AfterTest
      public void tearDown() {
          driver.quit();
      }
  }
  Step4:TestNG.xml 文件配置
  <?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">
      <!--第一台设备的配置-->
      <test name="device1" >
          <parameter name="udid" value="127.0.0.1:62001"/>
          <parameter name="appium_port" value="4723"/>
          <parameter name="uiautomator2_port" value="8200"/>
          <classes>
              <class name="cases.AppiumParallelTest"/>
          </classes>
      </test>
      <!--第二台设备的配置-->
      <test name="device2" >
          <parameter name="udid" value="127.0.0.1:62025"/>
          <parameter name="appium_port" value="4725"/>
          <parameter name="uiautomator2_port" value="8202"/>
          <classes>
              <class name="cases.AppiumParallelTest"/>
          </classes>
      </test>
  </suite>

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号