Airtest 如何测试手机 APP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Airtest 如何测试手机 APP相关的知识,希望对你有一定的参考价值。
参考技术AAirtest 是网易出品的一款基于图像识别的自动化测试工具,主要应用在手机 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模块报没有权限
软件测试学习资料之Airtest自动化测试——AirtestIDE编写和执行用例