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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM