1. 什麼是數據驅動? 使用數據驅動有什麼好處?python
用例執行是靠數據來驅動的,每條測試用例除了測試數據不同意外,全部的用例代碼都是同樣的,爲了使用例批量執行,咱們會使用數據驅動的思想來批量執行測試用例;測試
好處:spa
批量的執行測試用例,提升執行的測試效率;數據與腳本分離,測試數據須要修改時,代碼不須要修改,只須要修改Excel文件的數據便可;code
2. 數據驅動做用:orm
根據用例的數量來自動生成實例方法, 批量執行用例blog
from ddt import ddt, data @ddt # ddt和data是黃金搭檔, 要一塊兒使用才行 class TestMulti(unittest.TestCase): # 在文件中獲取測試用例,*cases()進行拆包,自動建立用例名稱:test_negative_multiply + 01 # *cases 拆包後,會有四個字典,至關於data的位置參數,先去第一個位置參數給one_case # 1. 每迭代一次,會建立不一樣的實例方法;自動加01,用於遍歷執行全部測試用例 # 1. 建立實例方法, 用於執行一條測試用例,必定要以test_開頭 @data(*cases) def test_negative_multiply(self, one_case): 。。。。。。。。 。。。。。。。 其餘代碼
ddt總結:ip
4. 複製 ddt 源碼另存爲,不建議在源碼上修改 ci
修改ddt 源碼107行,測試報告中的用例名不明確test_negative_multiply_01
做用:字符串
若是數據是字典,則獲取字典當中的title對應的值,加到HTML測試報告名稱中get
# 修改大概源碼107行的這個方法 def mk_test_name(name, value, index=0): """ name:用例名/實例方法名 value:用例數據字典 """ # Add zeros before index to keep order index = "{0:0{1}}".format(index + 1, index_len) # 註釋下面兩行 # if not is_trivial(value): # return "{0}_{1}".format(name, index) # 添加對字典數據的處理 # 判斷若是不是字典類型,條件就不知足;value不是字典類型則爲假,就不會按原來拼接 if not is_trivial(value) and not isinstance(value, dict): return "{0}_{1}".format(name, index) # 若是數據是字典,則獲取字典當中的title對應的值,加到測試用例名稱中 if isinstance(value, dict): try: # 取出title值 value = value["title"] except KeyError: return "{0}_{1}".format(name, index) try: value = str(value) # 把title轉換爲字符串類型 except UnicodeEncodeError: # fallback for python2 value = value.encode('ascii', 'backslashreplace') # value是title名稱 test_name = "{0}_{1}_{2}".format(name, index, value) # 用例名稱拼接 return re.sub(r'\W|^(?=\d)', '_', test_name)
*******請你們尊重原創,如要轉載,請註明出處:轉載自:https://www.cnblogs.com/shouhu/ 謝謝!!*******