准備工作: pip install ddt
知識點:
一,數據驅動和代碼驅動:
數據驅動的意思是 根據你提供的數據來測試的 比如 ATP框架 需要excel里面的測試用例
代碼驅動是必須得寫代碼 它才能測試 比如說unittest
二,使用數據驅動框架的意義:
- 代碼復用率高。同一測試邏輯編寫一次,可以被多條測試數據復用,提高了測試代碼的復用率,同時可以提高測試腳本的編寫效率。
- 異常排查效率高。測試框架依據測試數據,每條數據生成一條測試用例,用例執行過程相互隔離,在其中一條失敗的情況下,不會影響其他的測試用例。
-代碼的可維護性高。清晰的測試框架,利於其他測試工程師閱讀,提高了代碼的可維護性。
tips : 參數少的用yml挺好 參數多的,用json xx.json 格式 這種上下有依賴關系的 就寫py文件
文件名.json的話是json文件里面要寫json串
yml每個接口都是獨立運行的
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]被分解開,按照用例中的兩個參數傳遞
@file_data(filename)
對於json的文件,每一個json元素按照一個用例運行,可以依照python分解元組,列表或者字典的方式分解傳入
實例:
import ddt
import unittest
# print(dir(ddt))
@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()