IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> pytest学习笔记 -> 正文阅读

[开发测试]pytest学习笔记

目录

1、虚拟环境准备

2、安装pytest

3、pytest使用约束

4、执行方式

5、pytest常用运行参数介绍

6、解决大批量执行测试case问题多进程

7、失败重跑机制(以下两种均可)

8、前置动作、后置动作功能(预处理功能)

9、pytest配置文件之pytest.ini

10、测试报告

11、pytest之精髓fixture(个人观点)

12、skipif跳过执行

13、xfail标记为预期失败

14、parametrize

15、统计代码覆盖率 pytest-cov


前言:

????????对于做自动化测试的同学,基本都知道python的单元测试框架unitest,因其为python的内置库,曝光度较高,使用较广泛,进而广为人知,?只要有点开发基础的同学,都可以比较容易上手学习并进行二次开发,那就有人就问了,为什么还要学习pytest呢??其实可以用一个简单的比喻来形容,为什么现在手机经常换呢?答案是显而易见,技术的更新,使得功能更强大、使用更便捷。接下来重点讲解一下自己在学习pytest过程中的一些学习心得。

附pytest官方文档:https://docs.pytest.org/en/latest/contents.html

1、虚拟环境准备

????????????? 前提:windows10,python3.7(已安装并加入环境变量)

????????????? 进入命令行窗口执行如下指令:

????????????? python -m venv? F:/my_venv(安装目录)

2、安装pytest

????????????? 2.1 pycharm内安装

???????????????????? ?1、filesettingProjectProject Interpreter进入如下图页面,点击 +

? ? ? ? ? ? ? ? ? ? ? 2、在弹出的页面搜索pytest,并选择你想要的版本,点击 Install Package 按钮即可

?

????????????????2.2 命令行安装

???????????????????? 1) 打开命令行窗口,进入步骤 1安装的虚拟环境目录下的Scripts目录中

???????????????????? 2) 执行activate

????????????????????3) pip3 install pytest==(版本号), 版本号可不填写 直接执行pip3 install pytest

???????????????????? 4)关闭虚拟环境, 执行deactivate

3、pytest使用约束

????????????? 3.1 文件命名约束

???????????????????? 测试文件名必须以test_开头、或者以_test.py结尾

????????????? 3.2 测试类

???????????????????? 以Test开头,并且无init方法,需要测试的类方法,以test_开头命名

????????????? 3.3 测试函数

???????????????????? 以test_开头命名

??????

4、执行方式

????????????? 4.1 函数方式

???????????????????? pytest.main("test_zhc.py")

????????????? 4.2 命令行方式

???????????????????? pytest test_zhc.py 执行单个测试文件

???????????????????? pytest F:/TEST?? 执行测试文件夹(批量测试文件)

??????

5、pytest常用运行参数介绍

????????????? pytest???? help 查看帮助文档

??????????????????????????? -v??? 打印详细运行日志

??????????????????????????? -s??? 打印代码里面print 输出语句

??????????????????????????? -k??? 跳过过运行某个或者某些用例,

?????????????????????????????????? 荔枝 pytest -k '类名'

????????????????????????????????????????? ?pytest -k '方法名'

????????????????????????????????????????? ?pytest -k "类名 and not 方法名" //运行类里所有的方法,不包含某个方法

??????????????????????????? -x 遇到用例失败立即停止运行

????????????????????????? maxfail=[num]? 用例失败个数达到阀值停止运行, 荔枝:pytest maxfail=5 //用例失败数达到5个即停止运行

??????????????????????????? -m [标记名] 运行做标记的用例, 配合@pytest.mark.[标记名] 使用 荔枝:pytest -m slow

?????????????

6、解决大批量执行测试case问题多进程

????????????? 安装pytest-xdist

????????????? pytest test_zhc.py -n 6(进程数)

??????

7、失败重跑机制(以下两种均可)

????????????? 使用场景:一些系统性因素导致结果未匹配期望值,引起测试case的失败,比如网络波动、断电等,给与重试机制以避免偶发性结果

????????????? 7.1 插件pytest-repeat

???????????????????? 命令行使用方法:pytest reruns=num1 count=num2

???????????????????? 参数说明:reruns 指失败后重跑次数,被测case直到成功或者达到num1次数重跑停止,

?????????????????????????????????? ? count? 指重复执行次数(与失败与否无关)

???????????????????? 荔枝: pytest reruns=5 count=2 test_zhc.py

???????????????????? 说明:test_zhc.py 该测试脚本中的测试函数 或者方法 会重复执行count=2次,

??????????????????????????? ? 另外每次执行时,当某个函数或方法执行错误时,都会重试reruns=5次,即最坏的情况会重试2*(5+1),加1是指程序默认执行的一次

???????????????????? 发散运用:结合前面学到的 -x 遇到用例失败立即停止运行,我们可以解决实际测试中遇到的偶发失败情景

???????????????????? 荔枝:pytest -s count=100000 -x test_zhc.py??? 重复执行1W次直至失败结束

???????????????????? 标记使用:

??????????????????????????? @pytest.mark.repeat(3)

??????????????????????????? 标记某个测试方法,使其重复运行

????????????????7.2 插件pytest-rerunfailures

???????????????????? 命令行使用方法:pytest reruns 5 reruns-delay 10 -s

???????????????????? 装饰器使用方法:@pytest.mark.flaky(reruns=5, reruns_delay=10)

???????????????????? 参数介绍:?

????????????????????????????reruns 失败后重跑次数

????????????????????????????reruns-delay 失败后等待重跑秒数

8、前置动作、后置动作功能(预处理功能)

????????????? 8.1? ?setup_function()、teardown_function()

???????????????????? 函数级别,即执行一次测试函数,setup_function()函数都会执行,并先于测试函数执行,

???????????????????? 同理teardown_function()也会执行一次,并后于测试函数执行

????????????? 8.2? setup_class()、teardown_class()

???????????????????? 类级别,即执行一次测试类,setup_class()函数都会执行,并先于测试类执行,

???????????????????? 同理teardown_class()也会执行一次,并后于测试类执行

????????????? 8.3? ?setup_method()、teardown_method ()

???????????????????? 类方法级别,即执行一次测试类方法,setup_method()函数都会执行,并先于测试类方法执行,

???????????????????? 同理teardown_method()也会执行一次,并后于测试类方法执行

????????????? 8.4? setup_module()、teardown_module ()

???????????????????? 模块级别,即执行一次模块,setup_module()函数都会执行,并先于模块执行,

???????????????????? 同理teardown_module()也会执行一次,并后于测试模块执行

??? ? ? ? ? ? ? ? ?

9、pytest配置文件之pytest.ini

?????? ?? 当测试文件比较多时,可以建立测试文件夹,并把需要的配置文件放于测试文件夹根目录,命名为pytest.ini(存放位置和文件命名可以自定义)

????????????? 命令行模式 pytest -c 配置文件?

????????????? 荔枝:pytest -c f:/Test/zhc.ini

????????????? 配置文件如下图所示:

10、测试报告

????????????? 10.1 pytest-html

???????????????????? 需要额外安装 pip3 install pytest-html

???????????????????? 使用方法:pytest -s test_zhc.py html="f:/report.html"

????????????? 10.2 allure-pytest

???????????????????? 可与jenkins集成,报告内容更丰富多样

???????????????????? 需要额外安装 pip3 install allure-pytest

???????????????????? 使用方法:

??????????????????????????? 生成测试数据:pytest -s test_zhc.py alluredir? ./result/

??????????????????????????? 根据数据生成报告:allure generate ./result/ -o ./report/

??????

11、pytest之精髓fixture(个人观点)

????????????? 介绍:fixture作为测试前的初始化操作,前置条件,参数传递等,比如数据库连接,测试数据准备

????????????? 11.1 fixture的使用方式

???????????????????? 定义fixture

??????????????????????????? @pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)

??????????????????????????? 被装饰函数

??????????????????????????? 荔枝:

?????????????????????????????????? scope:被装饰方法的作用阈,参数可选如下

????????????????????????????????????????? function(默认值), 作用于测试方法,即每个测试方法都会运行一次fixture

????????????????????????????????????????? class, 作用于测试类,即每个测试类都会运行一次fixture

????????????????????????????????????????? module,作用于模块,即模块里所有的用例执行前会运行一次fixture

????????????????????????????????????????? session,作用于会话,多个py文件调用一次fixture

???????????????????? 使用fixture

????????????????????????? 1、函数或类里面方法直接传fixture的函数参数名称

??????????????????????????2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

? ? ? ? ??11.2、scope='function'

? ? ? ? ? 输出结果?

?

? ? ? ? ? ? 11.3、scope='class' 输出结果

? ? ? ? ? ? ?

?

????????????????11.4 scope='module'输出结果?

? ? ? ? ? ? ? ? ? ?

?

????????????????11.5 scope='session'

?

????????11.6、params之参数传递

???????????????????? 介绍:params参数类型为list,即列表中的每一个数据会当做用例数据输入,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可用于批量输入数据的测试

???????????????????? 使用方法:@pytest.fixture(params=[1, 3]), @pytest.fixture(params=[(1, 3), (4, 5)])

???????????????????? 荔枝:

? ? ? ? ? ? ? ? ? ? ?

12、skipif跳过执行

????????????? 介绍: 跳过被标识的测试函数。 使用场景:被测功能未开发完毕、测试平台环境不容许

????????????? 使用方法:skipif(condition, reason)

???????????????????? 参数condition:跳过的原因,参数类型为str、bool,当为字符串时,reason可以不填写,当为bool时必须填写reason

???????????????????? 参数reason:跳过原因,类参数类型为str

????????????? 荔枝:

13、xfail标记为预期失败

????????????? 介绍: 指定被标识的测试函数失败, 被标记的case,后续代码不会被执行。 使用场景:功能依赖,例如前置功能失败,影响后续功能

????????????? 使用方法:xfail(condition=None, reason=None, raises=None, run=True, strict=False)

???????????????????? 参数condition:预期失败除法条件,参数类型为str、bool,当为字符串时,reason可以不填写,当为bool时必须填写reason:

???????????????????? 参数reason:失败原因,参数类型为str

???????????????????? 参数raises:具体阐释失败原因,raises可以指定具体的异常类,例如

???????????????????? 参数run:默认为True, 当为False时,被标记的case不会被执行

???????????????????? 参数strict:默认为False, 当为True时,保证测试为XPASS时,测试记录为FAILED

????????????? 荔枝:

14、parametrize

????????????? 介绍:测试用例参数化,有点类似于fixture中的params参数。 使用场景:同一case,执行大批量测试数据

???????????? 使用方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

???????????????????? 常用参数:

??????????????????????????? argnames:参数名,参数类型为str, 单个参数"a", 多个参数 "a, b, c"

??????????????????????????? argvalues:参数值,参数类型为list, 单个参数[1], 多个参数[(1, 2, 3), (2, 3, 4)] ?列表长度决定测试方法运行的次数

????????????? 荔枝:

15、统计代码覆盖率 pytest-cov

????????????? 使用方法:pytest cov=参数1 cov-report=html? cov-config=参数2

???????????????????? 参数1:被测文件路径

???????????????????? 参数2: 配置文件, 默认为 .coveragerc, 使用举例:跳过某些测试文件,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不统计覆盖率

? ? ? ? ? ? ? ? ? ? 荔枝:

?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 20:02:21  更:2021-07-04 20:02:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 18:28:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码