Pytest参数化 ---parametrize

 参数化的本质就是:对列表中的对象循环,然后再赋值给具体的对象

import pytest


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


@pytest.mark.parametrize('a,b,result', [
    (1, 2, 3),
    (2, 3, 5),
    ('Hi,', 'xia', 'Hi,xia'),
    (1.0, 1.0, 2.0),
    (1, 1.0, 2.0),
    (0, 0, 0)])
def test_add_many(a, b, result):
    assert add(a, b) == result

把测试数据拿出来单独存储

import  pytest
 
def add(a,b):
   return a+b
 
def listParam():
   list1=[
      (1, 2, 3),
      (2, 3, 5),
      ('Hi,', 'xia', 'Hi,xia'),
      (1.0, 1.0, 2.0),
      (1, 1.0, 2.0),
      (0, 0, 0)
   ]
   return list1
 
@pytest.mark.parametrize('a,b,result',listParam())
def test_add_many(a,b,result):
   assert add(a,b)==result

结合具体的数据类型演示参数化的应用

import pytest


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

def dataList():
    datas = [
        [1, 1, 2],
        ['a', 'b', 'ab'],
        [0, 0, 0],
        [2, 2, 4],
        ['x', 'y', 'xy'],
    ]
    return datas

'''list'''
@pytest.mark.parametrize('a,b,result', dataList())
def test_add_list(a, b, result):
    assert add(a=a, b=b) == result


'''tuple'''


def dataTuple():
    datas = [
        (1, 1, 2),
        ('a', 'b', 'ab'),
        (0, 0, 0),
        (2, 2, 4),
        ('x', 'y', 'xy'),
    ]
    return datas


@pytest.mark.parametrize('a,b,result', dataTuple())
def test_add_tuple(a, b, result):
    assert add(a=a, b=b) == result


'''dict'''


def dataDict():
    datas = [
        {'a': 1, 'b': 1, 'result': 2},
        {'a': 'a', 'b': 'b', 'result': 'ab'},
        {'a': 0, 'b': 0, 'result': 0},
        {'a': 2, 'b': 2, 'result': 4},
        {'a': 'x', 'b': 'y', 'result': 'xy'},
    ]
    return datas


@pytest.mark.parametrize('data', dataDict())
def test_add_dict(data):
    assert add(a=data['a'], b=data['b']) == data['result']

通过pytest的参数化对json文件操作并转成pytest测试代码:

 r.json()是dict类型的

import pytest
import requests
import json


def getJson():
    return json.load(open('postman.json', encoding='utf-8'))['item']


@pytest.mark.parametrize('data', getJson())
def test_postman_json(data):
    r = requests.request(url=data['request']['url'],
                         method=data['request']['method'],
                         json=json.loads(data['request']['body']['raw']))
    '''用json.loads()把原本是str类型的参数转成dict类型,请求的参数转成通用的json格式'''
    '''用json.dumps把原本是dict类型的参数转成str类型,因为响应参数是str类型的'''
    '''r.json()是dict类型的'''
    '''断言比较,数据类型必须相同'''
    assert json.dumps(r.json()) in json.dumps(data['response'][0])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟学识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值