Airtest新手升级:一个相对完整的纯.py脚本是怎样子的

简介: Airtest新手升级:一个相对完整的纯.py脚本是怎样子的

此文章来源于项目官方公众号:“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接口记录报错:

image.png

使用log接口记录报错:

image.png

image.png

2)纯py脚本生成报告

Airtest支持使用 simple_reportLogToHtml 来生成测试报告。在纯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


相关文章
|
IDE Shell 开发工具
python环境搭建之二 --- 运行python脚本的三种方式
python环境搭建之二 --- 运行python脚本的三种方式
161 0
|
iOS开发
完整版在xcode打测试专用ipa包流程​
完整版在xcode打测试专用ipa包流程​
|
7月前
|
存储 缓存 算法
【Conan 入门教程】从零开始编写第一个自定义部署器
【Conan 入门教程】从零开始编写第一个自定义部署器
163 1
|
7月前
|
Python
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
263 0
|
7月前
|
Web App开发 Python Windows
Python Selenium 驱动下载与配置使用(详细流程)
Python Selenium 驱动下载与配置使用(详细流程)
626 0
|
Python Windows
用Python制作一个自动点击器,三种模块都可以
用Python制作一个自动点击器,三种模块都可以
165 0
|
机器学习/深度学习 编解码 前端开发
Web 应用程序,python判断文件是否存在,不存在则创建,如何将飞桨中的代码在pycharm中运行
Web 应用程序,python判断文件是否存在,不存在则创建,如何将飞桨中的代码在pycharm中运行
534 1
|
算法 区块链 数据安全/隐私保护
【Python零基础入门篇 · 41】:内置模块的使用二:pyinstaller模块(打包py文件以及更换图标)、hashlib模块(加密)
【Python零基础入门篇 · 41】:内置模块的使用二:pyinstaller模块(打包py文件以及更换图标)、hashlib模块(加密)
209 0
【Python零基础入门篇 · 41】:内置模块的使用二:pyinstaller模块(打包py文件以及更换图标)、hashlib模块(加密)
|
Python
Python基础——PyCharm版本——第八章、文件I/O(核心1)附件——Python os.chmod() 权限参照表
Python基础——PyCharm版本——第八章、文件I/O(核心1)附件——Python os.chmod() 权限参照表
134 0
Python基础——PyCharm版本——第八章、文件I/O(核心1)附件——Python os.chmod() 权限参照表
|
算法 区块链 数据安全/隐私保护
【Python零基础入门篇 · 26】:内置模块的使用:sys模块、time模块、pyinstall模块(打包py文件以及更换图标)、hashlib模块(加密)
【Python零基础入门篇 · 26】:内置模块的使用:sys模块、time模块、pyinstall模块(打包py文件以及更换图标)、hashlib模块(加密)
645 0
【Python零基础入门篇 · 26】:内置模块的使用:sys模块、time模块、pyinstall模块(打包py文件以及更换图标)、hashlib模块(加密)

热门文章

最新文章