pytest常用装饰器
一、parametrize--参数化
pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化。
1、第一个参数是字符串,多个参数中间用逗号隔开
2、第二个参数是list,多组数据是用元组类型,传三个或者更多参数也是这么传,list的每个元素都是一个元组,元组里的每个元素和参数顺序一一对应
3、传一个参数@pytest.mark.parametrize('参数名',list) 进行参数化
4、传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化
详见:https://cloud.tencent.com/developer/article/1527541
二、order--执行顺序
1、控制用例执行顺序的方法
2、在需要调整用例执行顺序的函数(或方法)前增加,如@pytest.mark.run(order=x),x表示数字
3、执行顺序,由小到大、由正到负、未标记的在正数后、负数前执行
顺序为:1,2,3,无标记,-3,-2,-1
class Testpytest(object):
@pytest.mark.run(order=-1)
def test_two(self):
print("test_two, 测试用例")
@pytest.mark.run(order=3)
def test_one(self):
print("test_one, 测试用例")
@pytest.mark.run(order=1)
def test_three(self):
print("test_three, 测试用例")
三、fixture--函数做参数
1、可将被fixture标记的函数当作参数使用
2、fixture可放到conftest.py文件下,conftest.py会自动识别哪个用例调用了这个函数
3、fixture可以实现setup和teardown功能
# 步骤1
@pytest.fixture()
def login():
print("输入账号,密码,进行登录")
def test_add_cart(login): # 步骤2
print("添加购物车--需要登录")
def test_add_address(login): # 步骤3
print("添加收货地址--需要登录")
def test_browser_goods():
print("浏览商品--不需要登录")
if __name__ == '__main__':
pytest.main()
四、rerunfailure--失败重跑
1、失败重跑机制
2、安装pytest-rerunfailure
在设置文件pytest.ini中添加命令
reruns = 重跑次数
addopts= --reruns =10
五、skip--跳过测试
1、pytest.skip(用于函数内,跳过测试用例)
def test_1():
if 1 < 2:
pytest.skip('1111111')
pass
2、@pytest.mark.skip(用于函数外,跳过测试用例)
@pytest.mark.skip(reason='feature not implemented')
def test_1():
pass
3、@pytest.mark.skipif(用于函数外,条件condition,跳过原因reason="xxx")
@pytest.mark.skipif(condition='1<2' , reason='feature not implemented')
def test_1():
pass