Pytest 是 python2 自带的自动化测试框架,python3 的版本的话 pytest 框架独立出来,需要 pip 进行安装
一、Pytest 的下载安装
1、Python3 使用 pip install -U pytest 安装
2、查看 pytest 版本信息 pytest --version
3、pytest 用例的执行规则:
①测试文件以 test_xx.py 命名需要以 test_开头(或_test 结尾)
②测试类以 Test_开头,并且不能带有 init 方法
③测试函数或方法以 test_xx 开头总体上分为三个阶段:
1、编写测试用例
2、执行测试用例
3、输出测试报告
第一步:编写测试用例
pytest 执行时默认是执行指定路径下以test_开头或者以_test 结尾的文件里的测试类或者方法,默认是执行以 Test_开头的类和 test_开头的方法
1、首先创建 py 文件命名以 test_开始或者以_test 结尾
2、若是新建类,测试类需要以 Test_开头
3、测试用例(方法)需要以 test_开头
1.1 测试用例的优化
1.1.1 assert 断言(判断执行结果是否满足预期):
Pytest 最常用的断言一般有以下五种:
assert xx:判断 xx 为真assert not xx:判断 xx 不为真assert a in b:判断 b 包含 a assert a == b:判断 a 等于 b assert a !=b:判断 a 不等于 b
添加断言在对应的方法里面,做判断测试用例结果是否满足预期,示例如下:
执行结果如下:断言失败的结果会显示出来
1.1.2 断言优化
如果想要在失败的时候看到更详细的信息,可以在断言上添加说明,示例如下:
执行结果如下图,可以看到失败时断言的说明信息
第二步、测试用例的执行
2.1 使用命令行执行
cmd 窗口,然后执行 pytest 文件路径/测试文件名例如 pytest ./test_tt.py
如果当前路径已经是放测试用例文件的文件夹下,想要测试文件,则直接可以 输入pytest 测试文件名 即可:
如果只输入 pytest,则会默认执行当前文件夹下所有以 test_开头(或_test 结尾)的文件。
2.2 IDE(PyChram)执行
写法如截图所示,pytest.main()(参数以列表的形式给出,如截图)
执行当前文件所在路径下的文件,指定文件名则执行指定的文件,若没指定,执行所有 test_
开头或者_test 结尾的文件。
2.3 执行指定文件指定方法
2.3.1 命令行编写方式
pytest路径/文件名::类名::方法名例如
2.3.2 pycharm 编写方式
如果是用 pycharm 写法如图,与上面的命令行等价:
2.4 带参数执行
常用的 pytest 带参数执行:列举几种,其余扩展可以自行百度
2.4.1 pytest -q简化控制台的输出
不带参数执行结果:
带参数执行结果:
2.4.2 Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称
添加参数前执行结果:
添加参数后执行结果:
2.4.3 pytest -k 执行用例中包含‘关键字’的用例
待执行用例如截图所示:
执行代码和结果如图:(关键字需要用双引号)
2.4.4 pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出
待执行的用例:
添加参数前执行结果:
添加参数后执行结果:
2.4.5 pytest -m执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下:
需执行测试用例:
执行代码和结果如下:
执行有相同标记的用例,可以用于指定需执行的测试用例。
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 只运行一次