此文章来源于项目官方大众号:“AirtestProject”
版权声明:答应转载,但转载必须保存原链接;请勿用作商业或者不合法用处
1. 前语
一直以来,Airtest的教程都倾向于编写 .air
脚本,但本质上,它还是python脚本来的。今天咱们就来补上这个缺口,一起来看下一个相对完好的纯 .py
脚本是什么样子的。
2. 比方一:纯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)
1)纯py
脚本的设备衔接
关于纯py
脚本,咱们需求在脚本里边,清晰写明衔接设备的脚本 。而.air
脚本,如果有运用auto_setup(__file__)
,则会自动帮咱们衔接第一台Android设备。这也是刚从.air
脚本刚刚切换成纯py
脚本的同学,经常简略忽略的一点。
所以上述示例中,咱们在auto_setup
接口里边清晰衔接了Android设备,当然,Airtest衔接设备,还有很多种方式,感兴趣的同学能够参阅咱们官方教程文档中,Airtest衔接设备脚本的介绍章节: airtest.doc.io.netease.com/IDEdocs/air… 。
2)纯py
脚本的log保存
相似的还有纯py
脚本的log保存,也需求咱们在脚本最初时,清晰写明。是否保存log,取决于同学们终究想不想生成陈述。因为陈述的生成,是依赖于脚本运转log的。
如果咱们不保存log,则最终咱们也就没有办法依赖于log来生成测验陈述。
3)airtest的核心api
上述简略的装包测验使命中,涉及到一些Airtest核心API,比方:
- 唤醒屏幕:
wake()
- 装置运用:
install()
- 发动运用:
start_app()
- 截图:
snapshot()
- 卸载运用:
uninstall()
- ……
咱们能够从Airtest的核心API文档中,来熟悉这部分的内容: airtest.readthedocs.io/zh_CN/lates… 。
3. 比方二:纯py的Poco脚本
说完了纯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()
1)记载报错到日志中
示例中,采用了try-except-finally
的语法,即尝试做一些poco操作之后,不管成功失利,最终都会生成测验陈述。
需求注意的是,在except
中,咱们运用log
接口记载了报错到日志里边。这样做的优点是,万一try
里边有某个步骤失利了,不会因为报错被try
捕捉了,而不在陈述里边体现出来。
不运用log
接口记载报错:
运用log
接口记载报错:
2)纯py脚本生成陈述
Airtest支撑运用 simple_report
和 LogToHtml
来生成测验陈述。在纯py
脚本里边,咱们特别需求注意,脚本最初时,log内容保存在哪里,生成陈述的时分,就要指向去哪里找log内容,避免出现生成不了陈述、生成了错误的陈述等情况。
4. 小结
今天咱们讲解了2个简略的纯py
脚本的小比方,期望想从.air
脚本,改成纯py
脚本的同学,能够多多练习。
如有问题,也能够反应到咱们官方的issue页面中:airtest.netease.com/issue_creat… 。
AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
建立企业私有云服务:airlab.163.com/b2b
官方答疑 Q 群:117973773