1. 什么是數據驅動? 使用數據驅動有什么好處?
用例執行是靠數據來驅動的,每條測試用例除了測試數據不一樣意外,所有的用例代碼都是一樣的,為了使用例批量執行,我們會使用數據驅動的思想來批量執行測試用例;
好處:
批量的執行測試用例,提高執行的測試效率;數據與腳本分離,測試數據需要修改時,代碼不需要修改,只需要修改Excel文件的數據即可;
2. 數據驅動作用:
根據用例的數量來自動生成實例方法, 批量執行用例
from ddt import ddt, data from Python_0722_handle_config.handle_excel import HandleExcel # Excel文件處理類 do_excel = HandleExcel("cases.xlsx", "multiply") cases = do_excel.get_cases() # cases 為嵌套字典的列表 @ddt # ddt和data是黃金搭檔, 要一起使用才行,ddt來裝飾類 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總結:
- 執行了多少條用例, 用例執行的條數與data裝飾器的(位置)參數的個數一致,每執行一條用例, 會自動將一個參數傳給one_case, 當最后一個參數傳給one_case, 且用例執行結束之后, 程序就會執行完畢
- ddt和data是黃金搭檔, 要一起使用才行
4. 復制 ddt 源碼另存為,不建議在源碼上修改
修改 ddt 源碼107行,測試報告中的用例名不明確test_negative_multiply_01
作用:
如果數據是字典,則獲取字典當中的title對應的值,加到HTML測試報告名稱中
# 修改大概源碼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/ 謝謝!!*******
