Appium 测试框架可以让我们使用不同的编程语言(Java、Python、Ruby、JavaScript)测试不同移动端平台的应用(Android、iOS),目前也是最火的移动端测试框架。这篇文章会带着大家学习到如何在不同设备中并行执行测试。
并行执行测试能够带来的好处:
·提升测试效率,我们可以将测试用例分发给不同的设备执行,从而可以减少整体测试所花费的时间
·同时我们可以将相同的测试用例给不同的设备去执行,特别适合需要做兼容性测试的场景
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),我们将立即处理