1、参数化
1.1 小需求
需求:定义一个实现加法操作的函数,并对该函数进行测试
import unittest
def add(x, y):
return x+y
class TestAdd(unittest.TestCase):
def test_add_01(self):
result = add(1, 1)
self.assertEqual(result, 2)
def test_add_02(self):
result = add(1, 2)
self.assertEqual(result, 3)
def test_add_03(self):
result = add(1, 3)
self.assertEqual(result, 4)
def test_add(self):
test_data = [(1,1,2),(1,2,3),(1,3,4)]
for x,y,expect in test_data:
print("x={} y={} expect={}".format(x, y, expect))
result = add(x, y)
self.assertEqual(result, expect)
1、一条测试数据定义一个测试函数,代码冗余度太高
2、一个测试函数种测试多条数据,最终只会有一个测试结果
1.2 参数化
通过参数的方式来传递数据,从而实现数据和脚本分离。并且可以实现用例的重复执行。
unittest测试框架,本身不支持参数化,但是可以通过安装unittest扩展插件parameterized来实现。
pip install parameterized
导包:from parameterized import parameterized
使用@parameterized.expand装饰器可以为测试函数的参数进行参数化
解决冗余代码问题
说明:根据需求动态获取参数并引用的过程
场景:解决相同业务场景,不同测试数据问题
import unittest
from parameterized import parameterized
"""
目标:parameterized 插件应用
步骤:
1. 导包 from parameterized import parameterized
2. 修饰测试函数 @parmeterized.expand(列表类型数据)
3. 在测试函数中使用变量接收,传递过来的值。
语法:
1. 单个参数:值为列表
2. 多个参数:值为列表嵌套元组 如:[(1,2,3),(2,3,4)]
"""
class Test01(unittest.TestCase):
def get_data(self):
return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]
@parameterized.expand(get_data())
def test_add_more(self, a, b, result):
print("{}+{}={}:".format(a, b, result))