Appium 结合 TestNG 并行执行测试

Appium 测试框架可以让我们使用不同的编程语言(Java、Python、Ruby、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>

运行效果:

动图封面

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【100%免费无套路】 

å¨è¿éæå¥å¾çæè¿°

 全套资料获取方式:点击下方小卡片自行领取即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值