Unittest(9):unittest的第三方库paramunittest参数化基础及应用
一、unittest参数化介绍
参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候
paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
实现unittest参数化的方式有多种,如ddt、paramunittest等
二、paramunittest模块安装
pip install paramunittest
三、示例
1、元组数据实现参数化
import unittest import paramunittest # pip install paramunittest # 参数化元组类型数据 @paramunittest.parametrized( (20,30,50), (30,40,70), (60,80,140) ) class TestDemo(paramunittest.ParametrizedTestCase): def setParameters(self, numa,numb,result): # 把参数化传递到测试类中 self.a = numa self.b = numb self.c = result def test_add_case(self): print("%d+%d=%d" % (self.a,self.b,self.c) ) self.assertEqual(self.a+self.b, self.c) if __name__ == '__main__': unittest.main(verbosity=2)
执行以上代码,测试结果如下:
2、列表数据实现参数化
import unittest import paramunittest # pip install paramunittest # 参数化列表类型数据 @paramunittest.parametrized( [20,30,50], [30,40,70], [60,80,140] ) class TestDemo(paramunittest.ParametrizedTestCase): def setParameters(self, numa,numb,result): # 把参数化传递到测试类中 self.a = numa self.b = numb self.c = result def test_add_case(self): print("%d+%d=%d" % (self.a,self.b,self.c) ) self.assertEqual(self.a+self.b, self.c) if __name__ == '__main__': unittest.main(verbosity=2)
执行以上代码,测试结果如下:
3、字典数据实现参数化
import unittest import paramunittest # pip install paramunittest # 参数化字典类型数据(字典中的key要和setParameters方法中的形参一致) @paramunittest.parametrized( {"numa":20,"numb":30,"result":50}, {"numa":30,"numb":40,"result":70}, {"numa":60,"numb":80,"result":140} ) class TestDemo(paramunittest.ParametrizedTestCase): def setParameters(self, numa,numb,result): # 把参数化传递到测试类中 self.a = numa self.b = numb self.c = result def test_add_case(self): print("%d+%d=%d" % (self.a,self.b,self.c) ) self.assertEqual(self.a+self.b, self.c) if __name__ == '__main__': unittest.main(verbosity=2)
执行以上代码,测试结果如下:
4、参数通过函数或者数据对象传入实现参数化
import unittest import paramunittest # pip install paramunittest # # 参数化:数据对象 # testdata = [ # {"numa":20,"numb":30,"result":50}, # {"numa":30,"numb":40,"result":70}, # {"numa":60,"numb":80,"result":140} # ] # # 参数化类型数据 # @paramunittest.parametrized( # *testdata # ) # 参数化:函数 def get_data(): return [{"numa":20,"numb":30,"result":50}, {"numa":30,"numb":40,"result":70}, {"numa":60,"numb":80,"result":140}] # 参数化类型数据 @paramunittest.parametrized( *get_data() ) class TestDemo(paramunittest.ParametrizedTestCase): def setParameters(self, numa,numb,result): # 把参数化传递到测试类中 self.a = numa self.b = numb self.c = result def test_add_case(self): print("%d+%d=%d" % (self.a,self.b,self.c) ) self.assertEqual(self.a+self.b, self.c) if __name__ == '__main__': unittest.main(verbosity=2)
执行以上代码,测试结果如下: