装饰器
Mark装饰器
parametrize装饰器(传参数)
pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化。
@pytest.mark.parametrize('arg',[1])
#测试函数要将argnames做为形参传入
def test_one_params(arg):
print("传入的值为:{}".format(arg))
assert arg == 1
@pytest.mark.parametrize("a,b", [(1, 2), (2, 3), (3, 4)])
# 参数a,b均被赋予三个值,函数会运行三遍
def test_b(self, a, b): # 参数必须和parametrize里面的参数一致
print('\n------------------> test_b has ran, and a = {}, b = {}'.format(a, b))
#.format(),将{}占位符的位置替换成.format()中的数据
assert 1
@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [3, 4])
def test_d(self, x, y):
print("\n------------------> test_d has ran, and x={}, y={}".format(x, y))
#运行4次
order装饰器(决定操作顺序)
1、控制用例执行顺序的方法
2、在需要调整用例执行顺序的函数(或方法)前增加,如@pytest.mark.run(order=x),x表示数字
3、执行顺序,由小到大、由正到负、未标记的在正数后、负数前执行
顺序为:1,2,3,无标记,-3,-2,-1
rerunfailure装饰器
1、失败重跑机制
2、安装pytest-rerunfailure
在设置文件pytest.ini中添加命令
reruns = 重跑次数
addopts= --reruns =10
skip装饰器
1.pytest.skip()函数
用于函数内跳过当前测试用例
2.@pytest.mark.skip()
用于函数外跳过测试用例
3.@pytest.mark.skipif(condition='跳过测试用例的条件',reason='跳过测试用例的原因解释')
Fixure装饰器
除了setup/teardown之外,通过fixture将函数声明为前后置函数,在测试函数中将前后置函数作为入参使用。
# 在函数前面通过fixture装饰器,声明为前后置函数
@pytest.fixture()
def my_fixture():
print("my_fixture前置")
yield # yield之后为后置处理
print("my_fixture后置")
class TestClass:
def test_case_1(self, my_fixture):
print("test case 1")
assert 1 == 1
def test_case_2(self):
print("test case 2")
assert 2 == 2
使用@pytest.fixure装饰的函数,默认是函数的前后置,通过修改scope变量,可声明测试类的前后置。
# 在函数前面通过fixture装饰器,scope='class', 声明为测试类的前后置函数
@pytest.fixture(scope='class')
def my_fixture():
print("my_fixture前置")
yield # yield之后为后置处理
print("my_fixture后置")
# 在测试类中使用my_fixture前后置函数
@pytest.mark.usefixtures('my_fixture')
class TestClass:
def test_case_1(self):
print("test case 1")
assert 1 == 1
def test_case_2(self):
print("test case 2")
assert 2 == 2
fixture装饰器的原型如下:
@pytest.fixure(scope="", params="", autouse="", ids="", name="")
scope表示的是被fixture标记的方法的作用域,默认是function,可配置为class,module,package/session。
| function | 函数级(默认) | 每个测试函数执行前后各一次 |
|---|---|---|
| class | 类级 | 每个测试类中所有方法执行前后各一次 |
| module | 模块级 | 每个模块(.py 文件)执行前后各一次 |
| package | 包级(较少用) | 每个包(目录)下所有模块执行前后各一次 |
| session | 会话级 | 整个测试会话(所有用例)执行前后各一次 |
-
autouse=True, 自动使用,默认为False -
name:给表示的是被fixture标记的方法取一个别名 -
params:参数化支持(列表[]元组(),字典列表[{},{},{}],字典元组({},{},{}))
# 在函数前面通过fixture装饰器,声明为前后置函数
@pytest.fixture(params=['aa', 'bb'])
def my_fixture(request):
print(request.param)
return request.param
@pytest.mark.usefixtures('my_fixture')
class TestClass:
def test_case_1(self, my_fixture):
print("test case 1")
print(my_fixture)
assert 1 == 1
def test_case_2(self, my_fixture):
print("test case 2")
print(my_fixture)
assert 2 == 2
1502

被折叠的 条评论
为什么被折叠?



