Java + TestNG + Appium 实现单机多个Android终端并发测试

前言

我们知道,单台 PC 上用 Appium 连接多个 Android 终端进行测试时,需要同时用不同的端口号启动不同的 Appium Server,例如启动两个服务器:

node main.js -p 4723 -bp 4724 -chromedriver-port 9515 -U emulator1
node main.js -p 4725 -bp 4726 -chromedriver-port 9516 -U emulator2

然后测试代码的 AppiumDriver 连接到对应的端口,然后就可以并发地执行测试。

这就意味着有很多环境数据需要配置,包括各种端口号,终端的UDID等,同时也需要为不同的终端分发测试用例,这些数据最好是与 Java 测试代码分离。另外服务器的启动和关闭最好也能通过代码自动执行。

之前我用的是 Junit4 单元测试框架,感觉功能不够强大,难以实现上述要求,后来了解了下 TestNG 框架,它自带的 xml 方式,参数化测试,并发执行等功能,刚好可以用来实现我设想的功能。

完整代码地址: https://github.com/zhongchenyu/AppiumTest ,下面就来介绍一下思路。

效果展示

首先看下最终实现的效果,只需配置好测试套的 xml 文件,将环境信息作为参数,指定好要执行的用例,执行 RunSuite 类,即可完成从启动服务器开始的所有测试过程。

1. 配置测试套 xml 文件,每个xml对应一个终端:

环境参数通过 parameter 标签配置,其中包含:
node:node.exe 的路径,如果配置了系统环境变量,直接填 node 就行。
appium.js:appium.js的路径,新版本的Appium应该是main.js的路径。和node参数配合,用来执行启动Appium 服务器。
portbootstrap_portchromedriver_port:Appium服务器的端口。
udid:终端名称,可以通过 adb devices 查到。
剩下的参数为 DesiredCapabilities 需要的参数。

第一个终端 testng1.xml

<suite name="WebViewSuit1" >
    <parameter name="suitName" value="WebViewSuit1"/>
    <parameter name="node" value="node"/>
    <parameter name="appium.js" value="C:\Users\chenyu\AppData\Local\Programs\appium-desktop\resources\app\node_modules\appium\build\lib\main.js"/>
    <parameter name="port"  value="4725"/>
    <parameter name="bootstrap_port" value="4726"/>
    <parameter name="chromedriver_port" value="9516"/>
    <parameter name="udid" value="127.0.0.1:21503"/>
    <parameter name="platformName" value="Android"/>
    <parameter name="platformVersion" value="4.4.4"/>
    <parameter name="deviceName" value="127.0.0.1:21503"/>
    <parameter name="appPackage" value="chenyu.memorydemo"/>
    <parameter name="appActivity" value=".MainActivity"/>
    <parameter name="noReset" value="false"/>
    <parameter name="app" value="chenyu.memorydemo-debug-v1.2.apk"/>

    <test name="WebView">
        <classes>
            <class name
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
下面是一个使用JavaTestNG框架编写的自动化接口测试的示例代码: ```java import org.testng.annotations.Test; import io.restassured.RestAssured; import io.restassured.response.Response; import io.restassured.specification.RequestSpecification; import static org.testng.Assert.assertEquals; public class ApiTest { @Test public void testGetRequest() { RestAssured.baseURI = "https://jsonplaceholder.typicode.com"; RequestSpecification request = RestAssured.given(); Response response = request.get("/users"); int statusCode = response.getStatusCode(); assertEquals(statusCode, 200); String responseBody = response.getBody().asString(); System.out.println(responseBody); } @Test public void testPostRequest() { RestAssured.baseURI = "https://jsonplaceholder.typicode.com"; RequestSpecification request = RestAssured.given(); request.header("Content-Type", "application/json"); String requestBody = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}"; request.body(requestBody); Response response = request.post("/posts"); int statusCode = response.getStatusCode(); assertEquals(statusCode, 201); String responseBody = response.getBody().asString(); System.out.println(responseBody); } @Test public void testPutRequest() { RestAssured.baseURI = "https://jsonplaceholder.typicode.com"; RequestSpecification request = RestAssured.given(); request.header("Content-Type", "application/json"); String requestBody = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}"; request.body(requestBody); Response response = request.put("/posts/1"); int statusCode = response.getStatusCode(); assertEquals(statusCode, 200); String responseBody = response.getBody().asString(); System.out.println(responseBody); } @Test public void testDeleteRequest() { RestAssured.baseURI = "https://jsonplaceholder.typicode.com"; RequestSpecification request = RestAssured.given(); Response response = request.delete("/posts/1"); int statusCode = response.getStatusCode(); assertEquals(statusCode, 200); String responseBody = response.getBody().asString(); System.out.println(responseBody); } } ``` 在上面的代码中,我们使用了RestAssured库来发送HTTP请求,并使用TestNG断言来验证响应。我们编写了四个测试用例,分别测试了GET、POST、PUT和DELETE请求。在每个测试用例中,我们都设置了请求的URL、头部、请求体,并发送请求。然后,我们验证响应的状态码和响应体,并将响应体打印到控制台中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值