【python参数化】读取json文件(数组中嵌套对象格式),组合成可参数化的数据

因为参数化的插件 不是 unittest 自带的,所以想要使用 需要进行安装
Python 中 包(插件,模块) 的安装,使用 pip 工具
pip install parameterized
pip install -i https://pypi.douban.com/simple/ parameterized

方法:

  1. 导包 from para… import para…
  2. 修改测试方法,将测试方法中的测试数据使用 变量表示
  3. 组织测试数据,格式 [(), (), ()], 一个元组就是一组测试数据
  4. 参数化,在测试方法上方使用装饰器 @parameterized.expand(测试数据)
  5. 运行(直接 TestCase 或者 使用 suite 运行)

踩坑错误写法,要放在unittest里进行参数化:
在这里插入图片描述

以下正确代码

代码结构:
在这里插入图片描述
整体思路:读取json文件,整理成相应的参数化格式,即测试数据;在测试方法上方使用装饰器 @parameterized.expand(测试数据),方法参数和测试数据的个数要一致,不一致则报错,然后执行即可

lab2_parameter.py:

from parameterized import parameterized
import json
from TestCase.tools import add
import unittest

def read_json():
    with open("add_data_json.json") as f:

        data_list = json.load(f)  #[{},{},{}] -> [(),(),()]
        print(data_list)
        new_list = []
        for data in data_list:
            '''
            第一种方式:拿到列表中的对象data —— 对象data的values()—— 整个转换为元组
             —— 添加到列表中  [{},{},{}] -> [(),(),()]
             '''
            new_list.append(tuple(data.values()))
            '''
            第二种方式 拿到列表中的每个对象 data,data通过键获取值,按元组的形式添加到列表中
                # 字典中的值,是否都需要
                a = data.get('a')
                b = data.get('b')
                expect = data.get('expect')
                new_list.append((a, b, expect))
            '''

        return new_list


class TestAdd(unittest.TestCase):

    @parameterized.expand(read_json())
    def test_add(self, a, b, expect):
        print(f'a:{a}, b:{b}, expect:{expect}')
        self.assertEqual(expect, add(a, b))

if __name__ == '__main__':
    unittest.main()



add_data_json.json:

[
    {
    "a": 1,
    "b": 2,
    "expect": 3
    },
    {
    "a": 11,
    "b": 22,
    "expect": 33
    },
    {
    "a": 12,
    "b": 23,
    "expect": 35
    },
    {
    "a": 14,
    "b": 25,
    "expect": 39
    }
]

tools.py:

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

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值