python3 应用 nose_parameterized 实现unittest 参数化
一、读取变量的值,实现unittest 参数化
import nose_parameterized,unittest def calc(a:int,b:int): return a+b case_data =[ [10,20,30], [12,21,33], [15,21,36] ] class MyClass(unittest.TestCase): @nose_parameterized.parameterized.expand(case_data) def test_compare(self,a,b,expect): actual = calc(int(a),int(b)) self.assertEqual(actual,expect) if __name__ == '__main__': unittest.main()
定义了一个二维数组case_data,用来存值,使用时直接在test方法上方加
@nose_parameterized.parameterized.expand(case_data)
最后可以得到以下测试结果,说明测试成功。
同样,也可以将case_date定义为下面的形式,也可以实现unittest参数化。
case_data =[
(10,20,30),
(12,21,33),
(15,21,36)
]
二、读取文件的方式,实现unittest 参数化
@nose_parameterized.parameterized.expand(case_date) 这句中的case_data,
只要写个函数,从文件格式读取的每一行放到一个list里,生成一个二维数组,,将这个二维数组赋给case_data就可以了。
如下所示,调用类DataToParam中的text方法,从 case_data.txt 生成一个二维数组。
@nose_parameterized.parameterized.expand(DataToParam.text('case_data.txt'))
下面是读取txt文件的函数封装在类DataToParam 里, 要读取excel的话,可以在DataToParam里再加一个读取excel的函数,然后把判断文件单独拎出来,放一个函数里,这样可以公用。
class DataToParam(object):
@staticmethod
def text(filename,seq=','):
if os.path.isfile(filename):
with open(filename,encoding='utf-8') as f:
res = []
for line in f:
res.append(line.strip().split(seq))
return res
else:
raise Exception('参数化文件不存在!') #主动抛出异常
print(DataToParam.text('case_data.txt'))