文章目录

  • Pytest(完结篇)Pytest+Airtest+Allure测试框架实战!!!
  • 一、引言
  • 二、准备工作
  • 三、实战框架
  • 四、重点代码讲解
  • 五、项目文档相关
  • 六、总结


Pytest(完结篇)Pytest+Airtest+Allure测试框架实战!!!

一、引言

在前两篇Pytest文章中,我们讲解了安装入门,基本用法,进阶功能等用法。

本篇使用Pytest+Airtest+Allure进行框架搭建,目标是测试移动端app,小程序,公众号H5。尽量贴近于我们日常的工作。

二、准备工作

  • 环境搭建概述

由于是测试移动端app,小程序,公众号H5,所以需要连接移动端手机,那么adb是必不可少需要安装的。

PytestAirtestAllure均为Python的第三方包,可以直接采用pip进行安装;Python尽量使用python3且版本号<=3.9,注意环境变量的填写。

安装完python后,开始安装这三个包,如果安装速度慢,在pip install指令后加上-i https://pypi.tuna.tsinghua.edu.cn/simple,会快一些。

  • adb的安装

adb的安装 ,主要就是下载Android SDK,再添加环境变量。

命令行cmd中输入adb version显示adb版本号即安装成功。

airtest启动 python airtest pytest_软件框架


  • pytest安装
#安装pytest
pip install -U pytest

命令行cmd输入pytest --version可显示安装的版本号即安装成功。

airtest启动 python airtest pytest_小程序_02

  • Airtest安装

Python支持Python2.7或<=3.9,更推荐使用 Python3

#安装Airtest
pip install airtest

命令行cmd输入airtest version可显示安装的版本号即安装成功。

airtest启动 python airtest pytest_airtest启动 python_03

如果安装完毕还不能使用,报错 ImportError: numpy.core.multiarray failed to import ,可以手工将 numpy 版本号降级至1.19.3就能使用了。

#numpy降级
pip install -U numpy==1.19.3

Airtest的Poco元素控件定位框架需要单独安装

#Poco元素控件定位框架安装
pip install pocoui
  • Allure2安装

Allure的安装需要先安装JDK,配置好环境变量,cmd运行java,javac这些命令都没有问题。

  1. 去GitHub上下载allure解压后配置环境变量。

安装pytest套件:

  1. pip install allure-pytest

使用allure --version可显示版本号即为安装成功

airtest启动 python airtest pytest_经验分享_04

三、实战框架

本篇,以实战出发,先给大家看一下整个框架的结构

airtest启动 python airtest pytest_经验分享_05

  • 这个demo的资源已上传,可以自行下载。---

接下来详细解释各个模块的作用

  • 文件夹:
  • images:存放图片文件
  • log:Airtest框架所提供的日志文件(由于我们采用了allure,所以这个实际上是没用的)
  • readme.assets:readme文件内的图片
  • report:存放生成的HTML报告(需要基于每次脚本运行后的报告数据)
  • reports:存放报告数据,格式为:年_月_日_时_分_秒
  • test_cases:重要py文件-用例集及模块用例
  • utils:工具集
  • 文件类:
  • config.py:配置属性类变量
  • launch.py:用于初始化连接手机和启动APP
  • readme.md:框架文档
  • requestments.txt:第三方包—pip install -r requestments.txt
  • run.py:启动整体项目并输出报告
  • pytest.ini:pytest的配置文件,主要用于过滤不想执行的目录

四、重点代码讲解

  • 主运行文件run.py
if __name__ == '__main__':
    # 启动连接设备模块
    launch()
    # 生成报告路径
    report_path = report_dir()
    # 运行pytest主运行程序
    pytest.main(['-s', '-q', '-k not slow', '--alluredir', report_path])
    os.system('allure generate %s -o ./report --clean' % report_path)
    os.system('allure serve %s' % report_path)

其中launch()负责自动化连接相应设备;report_dir()生成年\_月\_日\_时\_分_秒格式的报告数据路径。
pytest.main中的参数就不解释了,具体可看前两篇文章解释。

  • 主连接文件launch.py
def launch():
    adb_connect_emulator()
    # sleep(2)
    device_id = get_device_id()
    if not cli_setup():
        auto_setup(__file__, logdir=True, devices=[
            "android://127.0.0.1:5037/{}?cap_method=MINICAP_STREAM&&ori_method=MINICAPORI&&touch_method=MINITOUCH".format(
                device_id),
        ], project_root="F:/airtest_script/air_py_project_demo")
    ST.FIND_TIMEOUT = 10
    ST.FIND_TIMEOUT_TMP = 10
    ST.SAVE_IMAGE = False

adb_connect_emulator()作用是自动连接相关移动端设备。

get_device_id()作用是获取已连接设备的ID。

if not cli_setup()语法来自于airtest官方文档,可自行查看

  • utils文件夹内的tools.py
# 生成报告数据目录路径
def report_dir():
    report_path = './reports/data/' + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime(time.time()))
    return report_path

有python基础的应该不难理解

# 生成测试数据,借用了第三方包Faker
# from faker import Faker
def faker_data(num):
    faker = Faker('zh_CN')
    list_data = []
    for i in range(num):
        list_data.append((faker.name(), faker.ssn(), faker.phone_number()))
    return list_data
  • DDT数据驱动
# demo
data = [
    ('Tom',123456),
    ('Lucy',654321)
]
	@pytest.mark.parametrize("username,password",data)
	def test_ddt(self,username,password):
		print("用户名:%s,密码:%s"%(username,password))
  • POM设计思想

Page Object Model:一种设计模式—页面-对象-模型>>>解耦

简单的说,就是将页面中的操作(定位,点击等等)和具体的测试方法分离开。

airtest启动 python airtest pytest_经验分享_06

我发现很多人喜欢吹嘘这个概念,实际上,当你真正去用的时候,大多数时候只是额外的增加了工作量,然并卵。

五、项目文档相关

如果需要写相关文档,可借用以下内容

项目概览:

1、期望达成的目的:能达到各公众号,小程序的ui功能自动化。

2、Airtest框架底层为Python语言实现,故项目采用AirTest+Pytest+Allure协同工作。

3、各框架所负责的功能:

  • Airtest:对公众号、小程序的元素控件进行抓取,可使用Poco定位或Airtest图像识别进行
  • Pytest:对整体用例集、用例进行管理;可单条,批量执行,分类执行等等。
  • Allure:输出报告,显示各用例执行结果,执行时间等。

4、阶段划分:

  1. 针对主体功能使用AirtestIDE进行实验,测量稳定性,可行性。
  2. 确定可行后,转为纯Python脚本进行测试。
  3. 在Airtest框架基础上,搭配Pytest框架,Allure进行用例集,单用例的管理,测试报告的输出。
  4. 切实可行后,可考虑将每一个公众号,小程序主体功能自动化,评估运用DDT,PO思想重构项目,以及Jenkins持续集成。

六、总结

整个框架就是基于Pytest的自动化管理用例,Airtest的2大定位框架,Allure的报告框架进行搭建。

稳定性高(网易拿Airtest每天测几百台手机)、实用性得看具体场景、易用性高(只需要有一点点python基础)、可扩展性强、。