黑马程序员技术交流社区

标题: 【郑州校区】参数化 [打印本页]

作者: 我是楠楠    时间: 2019-9-19 11:57
标题: 【郑州校区】参数化
【郑州校区】参数化
目标
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
使用@parameterized.expand装饰器可以为测试函数的参数进行参数化
[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)





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2