1. 程式人生 > >python----資料驅動ddt的使用

python----資料驅動ddt的使用

一、安裝ddt
pip install ddt

二、資料驅動和程式碼驅動
資料驅動:根據你提供的資料來進行測試,比如介面自動化測試框架ATP
程式碼驅動:必須得寫程式碼才能測試,比如unittest

三、使用資料驅動框架的好處
--程式碼複用率高,同一測試邏輯編寫一次,可以被多條測試資料複用,提高了測試程式碼的複用率,同時可以提高測試指令碼的編寫效率
--異常排查效率高,測試框架依據測試資料,每條資料生成一條測試用例,用例執行過程相互隔離,在其中一條失敗的情況下,不會影響其他的測試用例
--程式碼的可維護性高,清晰的測試框架,利於其他測試工程師閱讀,提高了程式碼的可維護性

四、DDT的使用
DDT包含類的裝飾器ddt和兩個方法裝飾器data(直接輸入測試資料),file_data(可以從json或yaml檔案中獲取測試資料)
只有以yaml 和yml結尾的檔案是以yaml的形式上傳測試資料,其他情況預設為json
通常情況下,data中的資料按照一個引數傳遞給測試資料,如果data中包含多個數據,是以元祖、列表、字典等資料型別,需要自行在指令碼中對資料進行分解或者使用unpack分解資料
@data(a,b)


那麼a和b各執行一次測試用例

@data([a,b],[c,d])
如果沒有用unpack解析,則[a,b]會被當成一個引數傳入用例中執行
如果有用unpack解析,則[a,b]中a和b會被分解開,按照兩個引數傳入用例中執行

@file_data(filename)
對於json檔案,每一個json元素按照一條測試用例執行,可以依據python分解元祖、列表或字典的方式分解傳入

import ddt
import unittest

@ddt.ddt
class MyCase(unittest.TestCase):
    @ddt.data(1,2)  #執行2次
    def testa(self,value):
        
print(value) @ddt.data([1,2]) #執行1次 def testb(self,value): print(value) @ddt.data([1,2],[3,4]) #不加unpack 會報錯 def testc(self,a,b): self.assertNotEqual(a,b) @ddt.data([1,2],[3,4]) #執行2次 @ddt.unpack def testd(self,a,b): self.assertNotEqual(a,b) if
__name__ == '__main__': unittest.main()