pytest框架:marek用法

发布时间 2023-12-18 09:32:53作者: 娜乌西卡在路上

pytest中提供的makr标签:

    主要用于在测试用例/测试类中给用例打上标记,实现测试分组的功能,对测试用例进行筛选。

注意:只能使用已注册的标记名,如果没有在pytest.ini文件中进行注册,会报waring警告信息。

   如果没有注册的标签也想要使用,只是会有警告。我们可以加上“addopts = --strict-markers”,要求pytest不接受未注册的标签,使用会直接报错,

1、标签

标签设置步骤:

  1、注册标签名,通过pytest.ini配置文件注册;

  2、在测试用例的前面加上:@pytest.mark.已注册的标签名;

  3、运行时,根据用例标签过滤(-m 标签名)如下:

pytest.main(['-s', '-v', '-m staff_test']) #只执行staff_test分组下的用例
执行结果:一条通过用例,一条未选择
====================== 1 passed, 1 deselected in 21.80s =======================
2、用例忽略
直接忽略skip,跳过用例时,添加原因备注如下:
@pytest.mark.skip(reason='变更')
可以在用例中直接判断是否跳过,次数跳过没有原因
if sys.platform == "win32":
  pytest.skip("win32跳过用例")
条件忽略skipif:在满足某些条件时,才选择跳过用例,如下:
@pytest.mark.skipif(sys.platform == "win32", reason='win32跳过用例')
如果判断条件复杂,可以封装,如下:
def is_win32():
  return True if sys.platform == "win32" else False

only_win32 == pytest.mark.skipif(is_win32(), reason = 'win32跳过用例')
3、测试用例预期失败
当某个bug,修复优先级比较低或暂时不用修复。(此方法暂未验证)
该自动化用例运行时,会报错,那么可用@pytest.mark.xfail 来标记用例执行执行结果为xfailed。
当bug修改,用例可以跑通时,执行结果为xpassed。bug修复后可再取消xfail标记
4、用例时间限制
为了限制用例执行时间,可以设置一个超时时间,如果用例在规定的时候未执行完毕,则会被强制终止。(后续的用例不再执行)
需要安装包pip install pytest-timeout
5、用例排序
用例执行顺序默认是按照文件名ASCLL码排序的,文件内的用例默认顺序是从上往下顺序执行。
如果要改变执行的顺序,可以安装包 pip install pytest-ordering 用例前面使用如下:
@pytest.mark.run(order=1)
6、用例的依赖
有时执行用例会有依赖关系,解决此问题,需要用道第三方插件pytest-dependency,如果依赖的用例失败,则后续的用例会被标识为跳过。
所以需要注意的是被依赖的用例一定要先运行,否则后续的用例会直接跳过。
安装:pip install pytest-dependency
用例前使用如下:
test2依赖test1
@pytest.mark.dependency(name="test1")
test1
@pytest.mark.dependency(name="test2", depends=["test1"])
test2
7、参数化标签
当测试数据和期望结果一样,但是操作步骤是一样的测试用例可以用参数化。
@pytest.mark.parametrize(argnames,argvalues,indirect=False,ids=None)
参数说明:

argnames: 一个或多个参数名,用逗号分隔的字符串,如"arg1,arg2,arg3",参数名与用例入参数一致。

argvalues:参数值,必须是列表类型;如果有多个参数,则用元组存放值,一个元组存放一组参数值,元组放在列表中。

indirect:如果设置成True,则把传进来的参数当函数执行,而不是一个参数。

ids:用例的ID,传一个字符串列表,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性,ids的长度需要与测试数据列表的长度一致。

参考:https://www.cnblogs.com/luoshuai7394/p/17011519.html
https://blog.csdn.net/YJT1002/article/details/133774989
https://blog.csdn.net/mashang123123123/article/details/134494131