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'))

 

posted @ 2018-03-12 19:59  nancy05  阅读(663)  评论(0编辑  收藏  举报