目前最火的测试框架,pytest封神级讲解_python3不支持pytest (1)

125 阅读9分钟

图片

执行有相同标记的用例,可以用于指定需执行的测试用例。

2.4.6 pytest -x执行失败则停止执行,后面的用例不会被执行

待执行用例:

在这里插入图片描述
带参数执行结果:

图片

2.4.7 pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

假设 n = 2 执行上面的用例:由于失败只有一次所以用例会继续执行完,直到两次失败才停止执行

在这里插入图片描述

2.4.8 pytest --count=n 执行用例 n 次,n=2 就是执行两次

如下执行 test_01 两次:

图片

2.4.9 pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

图片

2.4.10 pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

图片

2.5 优质功能介绍

2.5.1 跳过用例的执行

根据特定的条件,不执行标识的测试函数. 方法:

skipif(condition, reason=None) 参数:

condition:跳过的条件,必传参数reason:标注原因,必传参数

使用方法:

@pytest.mark.skipif(condition, reason=“xxx”) condition 条件为真时跳过

@pytest.mark.skip()

示例如下:

图片

2.5.2 标记为预期失败的用例

标记测试函数为失败函数

方法:

xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用参数:

condition:预期失败的条件,必传参数reason:失败的原因,必传参数

使用方法:

@pytest.mark.xfail(condition, reason=“xx”)condition 为真则标记失败

在某种条件不满足的时候, 预期它是失败的, 就将它标记为预期失败, 若

condition 条件不满足则正常执行

示例:

不带参数:

在这里插入图片描述

condition 条件满足的时候:

图片

condition 条件不满足的时候:

在这里插入图片描述

2.5.3 参数化

方法:

parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用参数:

argnames:参数名

argvalues:参数对应值,类型必须为 list 当参数为一个时格式:[value]

当 参 数 个 数 大 于 一 个 时 , 格 式 为 : [(param_value1,param_value2…),(param_value1,param_value2 )]

使用方法:

@pytest.mark.parametrize(argnames,argvalues) 参数名,参数值@pytest.mark.parametrize(“a”,[3,6])单参数@pytest.mark.parametrize(“a,b”,[(1,2),(0,3)])多参数

参数值为 N 个,测试方法就会运行 N 次

示例:

单参数:

在这里插入图片描述
多参数:

图片

2.5.4 执行标记的用例多次

首先安装 repeat:

pip install pytest-repeat

@pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例

示例:

在这里插入图片描述

2.5.5 调整用例的执行顺序

使用:

安 装 pip install pytest-ordering 在测试方法上加装饰器@pytest.mark.last–最后一个执行

@pytest.mark.run(order=1)—第几个执行

示例:

最后一个执行:

在这里插入图片描述

指定执行顺序:

图片

2.5.6 自定义测试用例预置条件--pytest 精髓fixture

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

调用时被优先执行 预处理或者重复操作scope:被标记方法的作用域

function" (default):作用于每个测试方法,每个 test 都运行一次

“class”:作用于整个类,每个 class 的所有 test 只运行一次

“module”:作用于整个模块,每个 module 的所有 test 只运行一次

"session:作用于整个 session(慎用),每个 session 只运行一次

params:(list 类型)提供参数数据,供调用标记方法的函数使用

autouse:是否自动运行,默认为 False 不运行,设置为 True 自动运行

若不为 True 则需要调用才会优先执行。

2.5.6.1 fixture 用法一

定义 fixture 与定义普通函数差不多,命名不要以 test 开头与用例区分开,fixture 有返回值, 没有返回值默认为 None。用例调用 fixture 返回值,直接就是把 fixture 的函数名称当做变量名称。

示例:

会优先于测试用例 test_01 执行

在这里插入图片描述

2.5.6.2 fixture 用法二

fixture 标记的函数可以应用于测试类外部,每次都会优先执行

图片

2.5.6.3 fixture 用法三

传参数作为标识

在这里插入图片描述

2.5.6.4 使用多个fixture

如果用例需要用到多个fixture 的返回数据,fixture 也可以返回一个元组,list或字典,然后从里面取出对应数据。

图片

也可以分成多个 fixture 在用例中传值多个 fixture 参数

2.5.6.5 fixture 作用范围

2.5.6.5.1 、function 每个方法执行之前执行一次

在这里插入图片描述
2.5.6.5.2 class 类执行开始时执行一次

图片

2.5.6.5.3 module 在当前.py 脚本里面所有用例开始前只执行一次

图片

2.5.6.5.4 session 级别是可以跨.py 模块调用的

也就是当我们有多个.py 文件的用例的时候, 如果多个用例只需调用一次fixture,那就可以设置为 scope=“session”。

2.5.6.5.5 conftest.py 文件

新建 conftest.py 文件,名称固定,与运行的用例在同一个 package 下面,不用导入 pytest 会自动查找,文件里面可以单独管理一些预置的操作场景,在执行用例的时候就会预置执行。示例:

在这里插入图片描述

第三步、 生成测试报告

想要生成测试报告,需要先安装 pytest-html 安装命令

pip install pytest-html

3.1 使用命令行生成报告

图片

–html=路径/文件名.html 不写路径就默认为当前路径

3.2 使用 PyCharm 生成报告

图片

生成的报告大概是这样的:

图片

3.3 高大上的测试报告

想要生成高大上的测试报告自行百度 Pytest+Allure,可以集成到 Jenkins,自动生成高大上的自动化测试报告,效果图大概是这样的:

图片

3.4 生成 xml 报告

–junit-xml=路径/文件名.xml

在这里插入图片描述

图片

效果大概是这样的:

图片

扩展

输出覆盖率报告
pytest 可以输出覆盖率的 html 报告使用命令如下:

pytest -vv --cov=./ --cov-report=html 有可能遇到报错:

pytest: error: unrecognized arguments: --cov-report=html

? inifile: None

? rootdir: /Users/joe/workspace/platform/mgap-mendel/mgap-mendel 原因:

缺少 pytest cov 的包

解决方法

pip install pytest-cov 大概是这样的:

图片

设置重复执行的执行范围

–repeat-scope

–repeat-scope 类似于 pytest fixture 的 scope 参数,–repeat-scope 也可以设置参数:session , module,class 或者 function

function 范围针对每个用例重复执行,再执行下一个用例

class 以 class 为用例集合单位,重复执行 class 里面的用例,再执行下一个module 以模块为单位,重复执行模块里面的用例,再执行下一个

session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等

示例:如下 scope=function --count=2 以用例为单位执行

执行每个用例两次,如果是 class 则以类为单位执行,是执行类里面的用例重复执行

图片

重复测试直到失败

将 pytest 的-x 选项与 pytest-repeat 结合使用,以强制测试运行器在第一次失败时停止。例如:

pytest --count=1000 -x test_tt.py

这样将执行 1000 次用例,直到失败就停止,执行时可以带多个参数,更多的东西需自己去探索。

配置文件

配置文件可以改变 pytest 框架的运行规则,比如可以改变 pytest 收集用例的规则,添加命令参数。