pytest常用装饰器

2021-12-17  本文已影响0人  jinjin1009

一、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
上一篇下一篇

猜你喜欢

热点阅读