pytest框架学习-标签@pytest.mark.
标签
自定义标签(区分大小写)
可以标记测试用例,对测试用例进行分组,有利于对测试用例进行筛选。
比如:给用例打标为API,代表接口自动化的用例,打标方法为@pytest.mark.API,打标后,需要在pytest.ini文件中进行注册。执行时使用-m命令选项来指定需要执行的用例标记。
如果没有在pytest.ini文件中进行注册,会报waring警告信息,如下:
在pytest.ini文件中进行注册后,如下:
注意:
上述没有注册的标签也能使用,只是会有警告。我们可以加上“addopts = --strict-markers”,要求pytest不接受未注册的标签,使用会直接报错,如下:
用例忽略
直接忽略skip
跳过用例时,最好将原因备注清楚,如下:
可以在测试执行的过程中判断是否跳过,注意此时没有reason,如下:
条件忽略skipif
在满足某些条件时,才选择跳过用例,如下:
若判断条件复杂,可以更优雅地封装,如下:
用例预期失败
当某个bug,修复优先级比较低,暂时不用修复。此时,该自动化用例运行时,会报错,那么就可以用@pytest.mark.xfail来标记用例执行结果为xfailed。当BUG已被修复,用例可以跑通时,执行结果为xpassed。
这样可以提醒我们bug被修复了,bug修复后再取消xfail标记。
用例时间限制
为了限制用例执行时间,可以设置一个超时时间,如果用例在规定时间还未执行完毕,则会被强制终止。注意:后续的用例不再执行
需要安装包pip install pytest-timeout
用例排序
Pytest中用例执行顺序默认是按照文件名ASCLL码排序的,文件内的用例默认顺序是按照从上往下顺序执行。要更改用例的执行顺序,可以安装包 pip install pytest-ordering
用例依赖
在编写用例时,有时候用例之间会有依赖,而解决用例之间的依赖关系,可以用到pytest-dependency第三方插件,如果依赖的用例失败,则后续的用例会被标识为跳过。
所以需要注意的是被依赖的用例一定要先运行,否则后续的用例会直接跳过。
安装:pip install pytest-dependency
如下:
用例默认执行顺序是test1-->test2-->test3,test2依赖test1,test3依赖test2。
test1通过才会执行test2,test2通过才会执行test3
如果test1失败,则后续依赖的用例跳过
如果依赖的用例还未执行,也会跳过
参数化标签
当测试数据和期望结果不一样,但操作步骤是一样的测试用例可以用上参数化。
@pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None)
参数说明:
argnames: 一个或多个参数名,用逗号分隔的字符串,如"arg1,arg2,arg3",参数名与用例入参数一致。
argvalues:参数值,必须是列表类型;如果有多个参数,则用元组存放值,一个元组存放一组参数值,元组放在列表中。
indirect:如果设置成True,则把传进来的参数当函数执行,而不是一个参数。
ids:用例的ID,传一个字符串列表,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性,ids的长度需要与测试数据列表的长度一致。
一个参数多个值
多个参数多个值
添加参数标记
Ids 增加用例可读性
没有ids参数时,测试数据结果的显示为参数值;
有ids时显示结果为ids的值,如下:
组合参数
笛卡尔积,自动化全组合生成测试数据,如下:
Indirect的使用
默认是False
False: 就是parametrize里面argnames 参数当作一个普通的变量,不会去找变量对应函数的名的方法
True: 就是parametrize里面argnames 参数当作函数执行,它会去找对应的函数,去执行
如下:
第一种,test_a就是一个单纯的变量,它接收的就是 "1", "2", "3",将这写数据传给了 test_login1用例。
第二种,test_a就不是一个变量,把它当作一个函数,将 "1", "2", "3" 数据给了test_a函数,函数的返回结果再传给了 test_login2用例。