赞
踩
目录
Pytest是python一个第三方测试框架,有非富的第三方插件可以扩展
特点:
pip安装,安装命令
pip install pytest
查看是否安装成功
pytest --version
作用:
给测试用例或类打上标签,便于管理和运行测试用例
使用:
在测试用例/测试类前面加上:@pytest.mark.标签名
打标记范围:测试用例、测试类、模块文件
注册标签
使用之前,先注册标签,个人理解就是先定义标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册
注册有以下两种方法:
- pytest.ini
-
- [pytest]
-
- addopts = -v -p no:warnings -p no:faulthandler
- filterwaring =
- ignore:.*U.*mode is deprecared:DeprecationWarning
-
- testpaths = ./test ./
-
- markers =
- smoking :
- high :
- medium :
- lower :
conftest.py需要多少个标签写多少
- def pytest_configure(config):
- config.addinvalue_line("markers","P0"),
- config.addinvalue_line("markers","P1"),
- config.addinvalue_line("markers","reg")
使用mark标记
在类或方法前加上@pytest.mark.标签名
测试代码:
- class Test_mark:
-
- @pytest.mark.P0
- def test_mark1(self,a=1):
- print(a)
-
- @pytest.mark.P1
- def test_mark2(self,b=2):
- print(b)
测试结果:
在类前或用例前用pytest.mark.parametrize ,可进行参数化
传参方式比较灵活,有很多种,下面是列出的几种方式,其他的可自行研究
@pytest.mark.parametrize("参数名",列表)
源码:
- :param argnames:
-
- A comma-separated string denoting one or more argument names, or
- a list/tuple of argument strings.
-
-
- :param argvalues:
-
- The list of argvalues determines how often a test is invoked with
- different argument values.
-
-
- If only one argname was specified argvalues is a list of values.
- If N argnames were specified, argvalues must be a list of
- N-tuples, where each tuple-element specifies a value for its
- respective argname.
翻译:
参数名:字符串的形式存在一个或多个参数,用逗号分隔 ,或者用参数字符串的列表或元组
参数:如果是一个,则用list;
如果多个,参数必须以列表中元组的形式,每一个元组对应一组参数值
单个参数:
只传单个参数的值即可
- @pytest.mark.parametrize("a",["test1","test2"])
- def test_a(self,a):
- print(a)
运行结果:
以元组的形式传入多个参数的值,一个元组代表一组参数的值
例如:第一组a=1,b=2
第二组a=3,b=4
- @pytest.mark.parametrize("a,b",[(1,2),(3,4)])
-
- def test_two_param(self,a,b):
-
- print(a+b)
运行结果:
参数名以列表的传入
- @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
- def test_list(self,a,b,c):
- assert a+b == c
- print(a+b)
运行结果:
单个多次传入多个参数,排列组合传入
- a = (1,2,3)
- b = (4,5)
-
- @pytest.mark.parametrize("test_a",a)
- @pytest.mark.parametrize("test_b",b)
- def test_2_param(self,test_a,test_b):
- print(test_a*test_b)
运行结果:
json格式传入参数
调用时,在名称后面加.items()读取内容
- data1 = {
- "test1":"test1",
- "test2":"test2"
- }
-
- @pytest.mark.parametrize("test",data1.items())
- def test_json(self,test):
- print(test)
运行结果:
自动化测试过程中,可能会遇到环境问题、已知bug、未完成接口等情况需要跳过用例,这时就需要用到pytest.mark.skip()或pytest.mark.skipif()
@pytest.mark.skip(reason) 只要有此标记就跳过,无条件
@pytest.mark.skipif(condition,reason="跳过原因") 满足输入的条件,就跳过
适用范围:
- @pytest.mark.skip(reason="跳过该用例")
- @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
- def test_list(self,a,b,c):
- assert a+b == c
- print(a+b)
满足条件跳过,即condition返回值为true
- @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
- @pytest.mark.skipif(1==1,reason = "跳过该用例")
- def test_list(self,a,b,c):
- assert a+b == c
- print(a+b)
将skip赋值给变量,可多处调用
- myskip = pytest.mark.skip(reason="跳过a,b相关用例")
- class Test_param:
-
- @myskip
- def test_param(self,a=1,b=2):
- assert a+b == 4
- print(a+b)
已经知道该用例结果是失败的,又不想跳过,可以用xfail
xfail不会影响测试用例的执行,如果执行成功则报xpass,如果失败就会报xfail
- #运行结果为xpass
- @pytest.mark.xfail()
- def test_normal(self,c=10):
- print(c)
-
- #运行结果为xfail
- @pytest.mark.xfail()
- @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
- def test_list(self,a,b,c):
- assert a+b != c
- print(a+b)
用例中标记失败,用pytest.xfail标记的测试用例,执行到这一句时,直接置为xfail,没有xpass
- data1 = {
- "test1":"test1",
- "test2":"test2"
- }
-
- @pytest.mark.parametrize("test",data1.items())
- def test_json(self,test):
- pytest.xfail(reason='该功能未完成')
- print(test)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。