unittest参数化(paramunittest)
1. 前言
unittest参数化是指对一个unittest中的测试方法采用多组数据引入进行测试;
常用的参数化方法有ddt、paramunittes
2. 传入的参数类型
传入的参数类型可以是元组,列表,字典,对象,函数
3.实现方法
需要导入unittest,paramunittest,通过@paramunittest.parametrized装饰器传给调用者
3.1. 实现方法1:通过继承paramunittest.ParametrizedTestCase类执行案例
传入元组数据
import unittest
import paramunittest
#传入的是元组数据
@paramunittest.parametrized(
(3,3),
(7,4)
)
class TestDemo(paramunittest.ParametrizedTestCase):#通过继承paramunittest.ParametrizedTestCase类执行测试案例
def setParameters(self,numa,numb): #通过setParameters方法接收装饰器传递过来的参数
self.numa = numa
self.numb = numb
def test_case(self):
print('%s和%s两个数进行比较'%(self.numa,self.numb))
self.assertGreater(self.numa,self.numb)
if __name__ == '__main__':
unittest.main()
传入列表数据
import unittest
import paramunittest
#参数类型是列表
@paramunittest.parametrized(
[3,3],
[7,4]
)
class TestDemo(paramunittest.ParametrizedTestCase):
def setParameters(self,numa,numb):
self.numa = numa
self.numb = numb
def test_case(self):
print('%s和%s两个数进行比较'%(self.numa,self.numb))
self.assertGreater(self.numa,self.numb)
if __name__ == '__main__':
unittest.main()
传入字典数据
import unittest
import paramunittest
#参数类型字典
@paramunittest.parametrized(
{'numa' : 4,'numb' : 3},
{'numa' : 9,'numb' : 8}
)
class TestDemo(paramunittest.ParametrizedTestCase):
'''前面定义的是字典,那参数就跟前面字典的key保持一致'''
def setParameters(self,numa,numb):
self.numa = numa
self.numb = numb
def test_case(self):
print('%s和%s两个数进行比较'%(self.numa,self.numb))
self.assertGreater(self.numa,self.numb)
if __name__ == '__main__':
unittest.main()
传入对象,注意,装饰器传递参数的时候需要在对象前加个*
import unittest
import paramunittest
#参数类型是个对象
test_data = [{'numa' : 4,'numb' : 3},{'numa' : 9,'numb' : 8}]
@paramunittest.parametrized(
*test_data #传递对象需要加个*
)
class TestDemo(paramunittest.ParametrizedTestCase):
def setParameters(self,numa,numb):
self.numa = numa
self.numb = numb
def test_case(self):
print('%s和%s两个数进行比较'%(self.numa,self.numb))
self.assertGreater(self.numa,self.numb)
if __name__ == '__main__':
unittest.main()
传入函数,注意,装饰器传递参数的时候需要在方法前加个*
import unittest
import paramunittest
#通过函数传入测试参数
def testdata():
return [{'numa' : 4,'numb' : 3},{'numa' : 9,'numb' : 8}]
@paramunittest.parametrized(
*testdata()
)
class TestDemo(paramunittest.ParametrizedTestCase):
'''前面定义的是字典,那参数就跟前面字典的key保持一致'''
def setParameters(self,numa,numb):
self.numa = numa
self.numb = numb
def test_case(self):
print('%s和%s两个数进行比较'%(self.numa,self.numb))
self.assertGreater(self.numa,self.numb)
if __name__ == '__main__':
unittest.main()
3.2. 实现方法2:通过继承unittest.TestCase类执行案例
import unittest
import paramunittest
#通过函数传入测试参数
def testdata():
return [{'numa' : 4,'numb' : 3},{'numa' : 9,'numb' : 8}]
@paramunittest.parametrized(
*testdata()
)
class TestDemo(unittest.TestCase):
def setParameters(self,numa,numb):
self.numa = numa
self.numb = numb
def test_case(self):
print('%s和%s两个数进行比较'%(self.numa,self.numb))
self.assertGreater(self.numa,self.numb)
if __name__ == '__main__':
unittest.main()