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用例。

posted @ 2022-12-28 23:31  努力工作,早日退休  阅读(10536)  评论(0编辑  收藏  举报