因为参数化的插件 不是 unittest 自带的,所以想要使用 需要进行安装
Python 中 包(插件,模块) 的安装,使用 pip 工具
pip install parameterized
pip install -i https://pypi.douban.com/simple/ parameterized
方法:
- 导包 from para… import para…
- 修改测试方法,将测试方法中的测试数据使用 变量表示
- 组织测试数据,格式 [(), (), ()], 一个元组就是一组测试数据
- 参数化,在测试方法上方使用装饰器 @parameterized.expand(测试数据)
- 运行(直接 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
运行结果: