目标
1.??掌握如何实现参数化
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, 0)self.assertEqual(result, 1) def test_add_03(self): result = add(0, 0)self.assertEqual(result, 0) def test_add(self):test_data = [(1, 1, 2), (1, 0, 1), (0, 0, 0)]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装饰器可以为测试函数的参数进行参数化
# 方式一@parameterized.expand([(1, 1, 2), (1, 0, 1), (0, 0, 0)]) def test_add(self, x, y, expect):pass # 方式二data = [(1, 1, 2), (1, 0, 1), (0, 0, 0)]@parameterized.expand(data)def test_add(self, x, y, expect): pass # 方式三def build_data():return [(1, 1, 2), (1, 0, 1), (0, 0, 0)] @parameterized.expand(build_data) def test_add(self, x, y, expect):pass
示例代码
import unittestfrom parameterized import parameterized # 求 和def add(x, y): return x + y # 构建测试数据def build_data():return [(1, 1, 2), (1, 0, 1), (0, 0, 0)] class TestAdd(unittest.TestCase): @parameterized.expand([(1, 1, 2), (1, 0, 1), (0, 0, 0)]) def test_add_1(self, x, y, vps云服务器 expect):print(“x={} y={} expect={}”.format(x, y, expect)) result = add(x, y)self.assertEqual(result, expect) data = [(1, 1, 2), (1, 0, 1), (0, 0, 0)]@parameterized.expand(data)def test_add_2(self, x, y, expect):print(“x={} y={} expect={}”.format(x, y, expect)) result = add(x, y)self.assertEqual(result, expect) @parameterized.expand(build_data) def test_add_3(self, x, y, expect):print(“x={} y={} expect={}”.format(x, y, expect)) result = add(x, y)self.assertEqual(result, expect)
?
74011745