pytest参数化

之前一直用的unittest,最近看pytest也挺火的,就试着玩玩

今天来说下pytest参数化的使用方法

举个 a+b很简单的例子来说我们在测试过程中,同一个用例,可能有多组入参,如果每个入参写一个用例就会显得有些繁琐

 1、如何简化上边的用例,可以利用参数化的方法

@pytest.mark.parametrize

2、一定要注意:@pytest.mark.parametrize必须写在用例的上方

3、参数格式说明

parametrize后边紧跟元组格式参数,元组里边的参数可以是任意形式,比如上图入参是在一个列表中放N个列表,其实列表中放元组也是可以的

 如下所有参数放在一个元组中,也是可以执行成功的

脚本如下:

import pytest


def add(a, b):
print(a, a+b)
return a+b


# test_add(2, 3, 6)
# test_add(2, 3, 5)
# test_add(1, 4, 55)
# @pytest.mark.parametrize('a, b, exp', [
# [2, 3, 6],
# [2, 3, 5],
# [1, 4, 55]
#
# ])
@pytest.mark.parametrize('a, b, exp', (
(2, 3, 6),
(2, 3, 5),
(1, 4, 55))

)
def test_add(a, b, exp):
assert add(a, b) == exp


if __name__ == '__main__':
pytest.main(["-s", "-v", "test_add.py"])



参数用字典也是可以传的,脚本如下:

import pytest

def add(a,b):
return a+b

# 第一种种列表+元祖形式 此处因为元祖不能更改 较少使用
date=[
(1,2,3),
(2,3,5)
]
@pytest.mark.parametrize('a,b,c',date)
def test_p(a,b,c):
assert add(a,b)==c

# 第二种列表+字典形式 常用

datejson=[{"a":1,"b":2,"c":3},
{"a":2,"b":2,"c":4},
{"a":3,"b":4,"c":7}]

@pytest.mark.parametrize('ar',datejson)
def test_X(ar):
a=ar["a"]
b=ar["b"]
c=ar["c"]
assert add(a,b)==c


# 补充 测试类时
@pytest.mark.parametrize('ar',datejson)
class Testadd:
def test_add(self,ar):
a = ar["a"]
b = ar["b"]
c = ar["c"]
assert add(a, b) == c


if __name__=='__main__':
pytest.main(['-v','./test_py.py'])

原文地址:https://www.cnblogs.com/merry-0131/p/14986904.html