此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
一直以来,Airtest 的教程都倾向于编写 .air
脚本,但本质上,它还是 python 脚本来的。今天我们就来补上这个缺口,一起来看下一个相对完整的纯 .py
脚本是什么样子的。
py
的 Airtest 脚本有时候,我们只是想借助 Airtest 连接设备的功能,然后实现一些小任务,比如简单的装包任务等,而不是截一堆图片做自动化测试。
这种情况下,我们只需要简单编写一个纯 py 脚本即可:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.cli.parser import cli_setup
def get_app_screen_shot(apk_file, package_name):
"""
Connect an android device, automatically complete the app installation, open, screenshot, close, uninstall.
Finally you will get a screenshot from app in logdir.
Args:
apk_file: apk file route in your windows computer.
package_name: package_name of your app.
Returns: None
"""
# 连接设备以及初始化工作 log文件夹默认生成在当面目录下
auto_setup(__file__, logdir=True, devices=["Android:///",],)
# 唤醒手机屏幕
wake()
# 通过windows上apk包体下载app到手机上
install(apk_file)
# 启动下载好的app
start_app(package_name)
# 等待5s app完全启动
sleep(5)
# 截图 并保存到logdir路径下
snapshot("screen_shot.png")
# 关闭app
stop_app(package_name)
# 卸载app
uninstall(package_name)
if __name__ == '__main__':
# 设置apk文件路径以及对应包体名称
APK_FILE = r"C:\Users\AirtestProject\Desktop\NeteaseCloudMusic_Music_official_8.6.50.211229222733_32.apk"
PACKAGE_NAME = "com.netease.cloudmusic"
try:
get_app_screen_shot(APK_FILE, PACKAGE_NAME)
except Exception as err:
# 记录报错到logdir下的log.txt文件中,并截图保存发生错误时的手机屏幕
log(err, desc="Finale Error", snapshot=True)
py
脚本的设备连接对于纯py
脚本,我们需要在脚本里面,明确写明连接设备的脚本 。而.air
脚本,如果有使用auto_setup(__file__)
,则会自动帮我们连接第一台 Android 设备。这也是刚从.air
脚本刚刚切换成纯py
脚本的同学,经常容易忽略的一点。
所以上述示例中,我们在auto_setup
接口里面明确连接了 Android 设备,当然,Airtest 连接设备,还有很多种方式,感兴趣的同学可以参考我们官方教程文档中,Airtest 连接设备脚本的介绍章节: https://airtest.doc.io.netease.com/IDEdocs/airtest_framework/2_connect_device/ 。
py
脚本的 log 保存类似的还有纯py
脚本的 log 保存,也需要我们在脚本开头时,明确写明。是否保存 log,取决于同学们最终想不想生成报告。因为报告的生成,是依赖于脚本运行 log 的。
如果我们不保存 log,则最后我们也就没有办法依赖于 log 来生成测试报告。
上述简单的装包测试任务中,涉及到一些 Airtest 核心 API,比如:
wake()
install()
start_app()
snapshot()
uninstall()
我们可以从 Airtest 的核心 API 文档中,来熟悉这部分的内容: https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html 。
说完了纯py
的 Airtest 脚本,当然少不了我们纯py
的 Poco 脚本啦。下述示例中,包含了连接设备、初始化 Android poco、简单的 poco 操作、记录报错到 log 里,最后生成测试报告。
# -*- encoding: utf-8 -*-
from airtest.core.api import *
from airtest.report.report import simple_report
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
def demo():
# 连接设备以及初始化工作 log文件夹默认生成在当面目录下
auto_setup(__file__, logdir=True, devices=["Android:///",],)
# 初始化poco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 执行一些操作 确保手机app已登录并跳转到app初始化界面
try:
# 以下操作执行:我的-》我喜欢的音乐-》点击播放
poco(text="我的").click()
poco(text="我喜欢的音乐").click()
# 灵活结合ide提供的poco ui树获取播放按钮name属性值
poco(name="com.netease.cloudmusic:id/minPlayBtn").click()
except Exception as err:
# 记录报错到logdir下的log.txt文件中,并截图保存发生错误时的手机屏幕
log(err, desc="Finale Error", snapshot=True)
# 无论运行是否成功 输出报告
finally:
# 默认生成html报告到脚本所在的同级目录下
simple_report(__file__, logpath=True)
if __name__ == '__main__':
demo()
示例中,采用了try-except-finally
的语法,即尝试做一些 poco 操作之后,不论成功失败,最后都会生成测试报告。
需要注意的是,在except
中,我们使用log
接口记录了报错到日志里面。这样做的好处是,万一try
里面有某个步骤失败了,不会因为报错被try
捕捉了,而不在报告里面体现出来。
不使用log
接口记录报错:
使用log
接口记录报错:
Airtest 支持使用 simple_report
和 LogToHtml
来生成测试报告。在纯py
脚本里面,我们特别需要注意,脚本开头时,log 内容保存在哪里,生成报告的时候,就要指向去哪里找 log 内容,避免出现生成不了报告、生成了错误的报告等情况。
今天我们讲解了 2 个简单的纯py
脚本的小例子,希望想从.air
脚本,改成纯py
脚本的同学,可以多多练习。
如有问题,也可以反馈到我们官方的 issue 页面中:https://airtest.netease.com/issue_create 。
Airtest 官网:https://airtest.netease.com/
Airtest 教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b
官方答疑 Q 群:117973773
呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~