Airtest 如何测试手机 APP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Airtest 如何测试手机 APP相关的知识,希望对你有一定的参考价值。

参考技术A

Airtest 是网易出品的一款基于图像识别的自动化测试工具,主要应用在手机 APP 和游戏的测试。一旦使用了这个工具进行 APP 的自动化,你就会发现自动化测试原来是如此简单!!

要进行 APP 的自动化测试,首先要将手机连上 airtest。连接手机有几种方法都可以实现:

注意:部分手机还需要打开“允许模拟位置”、“允许未知来源安装应用”,所以如果不成功可以把这两个选项也勾选!

当手机与电脑处在同一个 wifi 下,即可尝试无线连接手机了,其实也就是通过 adb 无线连接手机。但是这种方式受限于网络连接的稳定性,可能会出现连接不够稳定的情况。具体连接操作步骤如下:

1、touch :点击操作 包含的参数:

v:点击的图片或者坐标
times:点击次数,默认 1 次
duration:按住时间,默认 0.01s
right_click: windows 有效 ,手机端无效

2、text :输入文本

包含的参数:
text:输入的文本
enter:完成输入后自动执行 enter 操作,默认为 True
search:完成输入后强行执行 search 操作,默认为 false

3、wait:等待元素出现,如果找到该这个 图片就返回图片中心点的坐标,如果不出现就抛出错误:TargetNotFoundError

包含的参数:
v:点击的图片或者坐标
timeout:等到超时时间,默认 20s
interval:每次寻找的时间间隔,默认 0.5s
intervalfunc:图片没有找到就执行后面的函数,默认为 None

4、sleep :暂停等待

包含的参数:
secs:延迟时间,默认 1.0s

5、assert_exist : 判断图片是否存在,如果存在就返回图片的中心坐标,不存在就 raise AssertionError

包含的参数:
v:图片
msg:描述测试点,它将被记录在报告中
return: 存在就返回图片的中心坐标,不存在就 raise AssertionError

6、assert_not_exist :判断图片是否不存在,如果存在就 raise AssertionError

包含的参数:
v:图片
msg:描述测试点,测试 报告中显示

7、assert_equal : 判断第一个值和第二个值是否相等

包含的参数:
first:第一个对比条目
second:第二个对比条目
msg:描述测试点,在测试报告中显示

8、assert_not_equal : 判断第一个值和第二个值是否不相等

包含的参数:
first:第一个对比条目
second:第二个对比条目
msg:描述测试点,在测试报告中显示

我们现在用以上这写 API 来实现一个具体的需求用例:

需求: 登录柠檬班 app,并判断是否登录成功;

注意:为了确保万无一失,最好在输入文本之前,先点击输入框,确认输入的焦点。

所以先调用 touch API,再调用 text API。点击 text API 就会弹出如下图所示的文本输入框,输入你的手机号码即可。同样的步骤,输入密码;最后,点击“登录”按钮。

用 assert_exists API 来断言是否登录的用户名和头像是正确的,脚本如下:

可以打开测试报告,查看运行结果和断言的图片如下图所示:

在Airtest中如何使用无线模式控制手机

使用Airtest超快速开发App爬虫文章的最后,我们留了一个尾巴:如何启动Airtest的无线模式,不用USB线就能控制手机?

本文将会讲到具体的做法。做法分为两种:第一种是在Airtest的IDE中控制手机。第二种是在Python代码里面控制远程手机。

启动开启手机上的adb端口

无论使用哪种方式,要远程控制手机,就需要首先把手机上的adb端口打开。这一步必需先用USB线把手机连上电脑。

在终端里面执行命令:

adb tcpip 48887

其中的端口号48887你可以自行设定为其他的端口号,但不能和已有的端口冲突。

命令执行完成以后,你就可以拔下USB线了。接下来就是远程控制手机。

在AirtestIDE中无线遥控手机

打开Airtest,点击下图红框框住的 remote connection:

技术分享图片

在弹出来的输入框中,输入:

adb connect 手机IP:端口

其中手机的IP你可以在无线路由器中找到,也可以在手机的系统设置中找到。端口就是上一条命令设定的端口。

例如:

adb connect 192.168.0.102:48887

如下图所示。

技术分享图片

点击connect,此时手机就会在上方的 Device列表中出现。双击它就可以无线连接手机并看到手机屏幕了。

在Python中控制手机

首先说明,Airtest的官方文档有问题,如果你跟着文档来写代码,一定会失败。

官方文档中,在https://airtest.readthedocs.io/zh_CN/latest/README_MORE.html#connect-android-device有一段介绍如何连接远程安卓手机的例子:

本地设备
# connect a remote device using custom params
connect_device("android://adbhost:adbport/1234566?cap_method=javacap&touch_method=adb")

这个代码看起来,你可能会把Python代码写为:

from airtest.core.api import *
device_1 = connect_device(‘android://192.168.0.100:48887/手机串号?cap_method=javacap&touch_method=adb‘)

如果你这样写,你一定无法连上手机

正确的代码为:

from airtest.core.api import *

device_1 = connect_device(‘android:///192.168.0.100:48887?cap_method=javacap&touch_method=adb‘)

只有按我这里的写法才能正确控制手机。如下面的gif所示。

技术分享图片

动图中涉及到的完整代码为:

from airtest.core.api import *
import time
from poco.drivers.android.uiautomation import AndroidUiautomationPoco

device_1 = connect_device(‘android:///192.168.0.100:48887?cap_method=javacap&touch_method=adb‘)

poco = AndroidUiautomationPoco(device_1, use_airtest_input=True, screenshot_each_action=False)


poco(text="知乎").click()
poco(name="com.zhihu.android:id/input").click()
poco(name="com.zhihu.android:id/input").set_text(‘古剑奇谭三‘)

time.sleep(2)


poco(name=‘com.zhihu.android:id/magi_title‘, textMatches=‘^古剑奇谭三.*$‘).click()
poco.swipe([0.5, 0.8], [0.5, 0.2])

以上是关于Airtest 如何测试手机 APP的主要内容,如果未能解决你的问题,请参考以下文章

airtest自动化测试MAC本地python运行airtest模块报没有权限

如何在iOS手机上进行自动化测试

如何在iOS手机上进行自动化测试

软件测试学习资料之Airtest自动化测试——AirtestIDE编写和执行用例

软件测试学习资料之Airtest自动化测试——AirtestIDE编写和执行用例

在Airtest中如何使用无线模式控制手机