今天,接上上一篇的的內容,繼續講解單元測試,我們在用python代碼通過函數的方法來寫測試用例,確實可以,但是這些方法中,很多代碼量是重復的,有沒有簡捷化的處理呢?有,ddt就是一個很好用的工具,那么什么是ddt呢?
ddt:英文全稱為 data driver tsest 中文意思:數據驅動用例 我們在實際的工作中來運用,就是根據數據來生成測試用例,至於這個ddt怎么用,且聽我慢慢道來,一學就會,很容易上手。
先看我昨天自己寫的一個測試用例類,一個類里面寫了10個方法,每個方法都代表着一個用例,但是,很多都是重復的,怎么辦?
可以利用ddt來處理,不需要重復寫這么多代碼,只需要把數據放在外面,在方法里面調用就行
1、首先安裝ddt
2、代碼中導入ddt
import unittest import ddt from day_14.task_day13.register import register_check case_data = [ {"expected": {"code": 1, "msg": "注冊成功"}, "data": {'username': 'python999', 'password1': '123456789', 'password2': '123456789'}}, {"expected": {"code": 0, "msg": "該賬戶已存在"}, "data": {'username': 'python31', 'password1': '123456', 'password2': '123456'}}, {"expected": {"code": 0, "msg": "兩次密碼不一致"}, "data": {'username': 'python111', 'password1': '12377', 'password2': '123456789'}} ] @ddt.ddt class TestRegister(unittest.TestCase): """注冊的測試用例類""" @ddt.data(*case_data) def test_register(self, item): # 第一步:准備用例數據 expected = item["expected"] data = item["data"] # 第二步:傳入參數 res = register_check(**data) # 拆包,字典拆包是兩個*號,列表和元組拆包是一個*號 # 第三步:比對預期結果和實際結果(斷言) self.assertEqual(expected, res) if __name__ == '__man__': unittest.main()
對以上代碼,進行截圖解析
關於那個case_data,它其實就是一個列表,用來裝數據的列表,
運行后的結果截圖:
那么有的同學會問,既然你前面提到了,那么如果要執行100條或者1000條用例,怎么辦,也是case_data=[ ],里面寫100個或者1000個?
可以用循環:
# @ddt.data(1, 2, 3, 4) # 傳了4個參數,就生成4條用例
# li = list(range(1, 100)) # 生成99條用例 # @ddt.data(*li)
所以,ddt用起來很方便,就那么關鍵幾步,所以,一學就會