pytest接口测试(五)parametrize参数化

pytest接口测试(五)parametrize参数化

parametrize装饰器

pytest.mark.parametrize装饰器可以实现用例参数化,里面写两个参数

  • 第1个参数是字符串,多个参数中间用逗号隔开
  • 第2个参数是list,多组数组用元组类型

1、以下是一个实现一定输入和期望输出测试功能的典型例子

import pytest

@pytest.mark.parametrize('test_input, expected', [('3+5', 8), ('4-1',3), ('4*5', 27)])
def test_demo(test_input, expected):
    assert eval(test_input) == expected   # 因为'3+5'是一个字符串,需要用eval方法将其转为原本格式,即整数相加
'''
输出结果:
============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.8.0, pluggy-0.13.1
rootdir: F:\python work\youyou_class\study_pytest\class_11collected 3 items

test_parametrize.py ..F
test_parametrize.py:7 (test_demo[4*5-27])
20 != 27

Expected :27
Actual   :20
 <Click to see difference>

test_input = '4*5', expected = 27

    @pytest.mark.parametrize('test_input, expected', [('3+5', 8), ('4-1',3), ('4*5', 27)])
    def test_demo(test_input, expected):
>       assert eval(test_input) == expected   # 因为'3+5'是一个字符串,需要用eval方法将其转为原本格式,即整数相加
E       AssertionError: assert 20 == 27
E        +  where 20 = eval('4*5')
'''

2、多个输入参数和期望结果

import pytest
from study_pytest.class_10.login import login

@pytest.mark.parametrize('test_input, expected', [
    ({'name':'test','password':'123456'},{"msg":"login success!","code":0}),
    ({'name':'xxxyyy','password':'123456'},{"msg":"账号或密码不正确","code":3003})
])
def test_login(test_input, expected):
    name = test_input['name']
    pwd = test_input['password']
    re = login(name, pwd)
    assert re[0]['msg'] == expected['msg']
    assert re[0]['code'] == expected['code']

3、参数组合

参数组合,适用于多组输入得到一个测试结果的情况。

@pytest.mark.parametrize('x', [0, -1, -6])
@pytest.mark.parametrize('y', [-6, -2, -1])

def test_demo(x, y):
    expected = 0
    assert x + y < expected
'''
============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.8.0, pluggy-0.13.1
rootdir: F:\python work\youyou_class\study_pytest\class_11collected 9 items

test_parametrize.py .........                                            [100%]

========================== 9 passed in 0.14 seconds ===========================
'''

4、用例阻塞(已提交bug但未解决)

@pytest.mark.skip(‘阻塞bug’)
标记后,此条用例自动跳过不会被执行

5、mark标记

@pytest.mark.appapi
标记后,在命令行输入:pytest xxxx.py -m appapi
只会执行appapi标记的测试用例

发布了28 篇原创文章 · 获赞 0 · 访问量 386

猜你喜欢

转载自blog.csdn.net/qq_42098424/article/details/103956486