目录
一、参数化环境准备
1、方式一:在终端(cmd)安装parameterized
2、方式二:在Pycharm中安装parameterized
二、参数化
1、什么事参数化?
2、参数化引入案例
(1)需求
(2)代码实现
(3)发现问题
3、参数化的作用
4、参数化的使用方式
5、案例:参数化+断言实现测试多组数据
三、练习
unittest测试框架,本身不支持参数化,但是可以通过安装unittest扩展插件parameterized来实现参数化
Python中插件(包/模块)的安装,使用pip工具,PIP是一个python包管理工具,提供了对python包的查找、下载、安装、卸载等功能
安装命令:pip install parameterized
通过pip list查看python中的所有包,包含parameterized即说明安装成功;或通过File->Setting->Project:pythonproject->Python Interpreter查看parameterized是否安装成功;或直接在文件中导parameterized查看是否安装成功(有时需重启Pycharm才能导包)
将测试数据定义到json文件使用
写在用例脚本中
定义一个实现加法操作的函数,并对该函数进行测试
要求对多组测试数据进行测试
一条测试数据就需要定义一个测试函数,代码冗余度太高
如果一个测试函数中测试多条数据,最终只会有一个测试结果
通过参数的方式来传递测试数据,从而实现测试数据和用例脚本分离,并实现用例的重复执行
其实就是在书写用例方法时,用变量代替测试数据,在执行时再将测试数据传递给变量
导包 ---> from parameterized import parameterizd
使用@parameterized.expand装饰器为测试方法中的参数进行参数化
# add.py中定义的add函数
def add(x,y):
return x+y
'''
1、导包
2、将测试方法中的测试数据用变量表示
3、组织测试数据,格式[(),(),()],一个元组就是一组测试数据
4、参数化,在测试方法上用装饰器@parameterized。expand(测试数据)
5、运行(直接在测试类或测试方法上运行,使用suite运行,使用unittest.main运行)
'''
import unittest
from unittest_csh.add import add
from parameterized import parameterized
data = [(1, 0, 1), (2, 0, 2), (3, 0, 4)]
class TestAdd(unittest.TestCase):
@parameterized.expand(data)
def test_add01(self, x, y, expected):
print('x={} y={} expected={}'.format(x, y, expected))
result = add(x, y)
self.assertEqual(result, expected)
if __name__ == '__main__':
unittest.main()
需求:
将测试数据定义为json文件,读取json文件,完成参数化
实现思路:
从json文件中读取数据,通过参数化的方式传到用例方法中,实现一个用例测试多组数 据,通过suite执行用例
# 定义在add.py文件中的函数
def add(x,y):
return x+y
[
{
"x": 1,
"y": 0,
"expected": 1
},
{
"x": 2,
"y": 0,
"expected": 2
},
{
"x": 3,
"y": 0,
"expected": 4
}
]
import unittest
from unittest_csh.add import add
from parameterized import parameterized
import json
# 读取json文件中的测试数据
def data_link():
with open('add_data.json',encoding='utf-8') as f:
data_list = json.load(f)
#print(type(data_list)) #
#print(data_list) #[{'x': 1, 'y': 0, 'expected': 1},{}]
new_list = []
for data in data_list: #data 字典
x = data.get('x')
y = data.get('y')
expect = data.get('expect')
new_list.append((x,y,expect))
return new_list # new_list = [(1,0,1),(),()]
class TestAdd01(unittest.TestCase):
@parameterized.expand(data_link())
def test_add001(self,x,y,expect):
result = add(x,y)
print('x={} y={} expected={}'.format(x,y,expect))
self.assertEqual(expect,result)
import unittest
from unittest_csh.addtest_adddata import TestAdd01
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestAdd01))
runner = unittest.TextTestRunner()
runner.run(suite)