目标 1. 掌握如何实现参数化 1. 参数化 1.1 小需求 需求:定义一个实现加法操作的函数,并对该函数进行测试 示例代码 [AppleScript] 纯文本查看 复制代码 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 [AppleScript] 纯文本查看 复制代码 # 方式一
@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 示例代码 [AppleScript] 纯文本查看 复制代码 import unittest
from 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, 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) |