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