Pytest(完结篇)Pytest+Airtest+Allure实战!!!

文章目录

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

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

一、引言

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

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

前两篇链接:Pytest框架详解(一)、Pytest框架详解(二)

二、准备工作

  • 环境搭建概述

由于是测试移动端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版本号即安装成功。

在这里插入图片描述

关于adb的内容,在adb详解中有更为详细的描述。

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

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

在这里插入图片描述

  • Airtest安装

具体的步骤官方文档写的很清楚了,链接:官方文档

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

#安装Airtest
pip install airtest

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

在这里插入图片描述

如果安装完毕还不能使用,报错 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可显示版本号即为安装成功

在这里插入图片描述

三、实战框架

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

Pytest(完结篇)Pytest+Airtest+Allure实战!!!_第1张图片

  • 这个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:一种设计模式—页面-对象-模型>>>解耦

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

Pytest(完结篇)Pytest+Airtest+Allure实战!!!_第2张图片

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

五、项目文档相关

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

项目概览:

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基础)、可扩展性强、。

以上,如果有疑问地方,欢迎私信,留言。

你可能感兴趣的:(App自动化,软件测试,框架,python,软件框架,小程序,经验分享)