背景介紹:
DDT全程爲Data Driver Test數據驅動測試,是由測試數據驅動測試用例的執行,加入ddt框架,能夠實現用例的重複執行以及代碼的重複使用,減小工做量。數據代碼分離爲主流設計思路,在常見的測試體系中能夠使用xml文件、excel文件、json文件來管理測試數據,經過代碼自動讀取,來驅動用例的執行,ddt測試框架基於這種設計思路上,實現了方便使用,簡單易懂的效果json
DDT由幾個關鍵部分組成:
1.裝飾類
2.普通裝飾器
3.參數拆分框架
在導入ddt框架後,能夠使用裝飾類ddt,來裝飾自定義的測試用例,被ddt裝飾的類能夠直接使用ddt測試框架
裝飾器ddt.data,使用data裝飾unittest中的測試方法,該方法能夠讀取到data中設定的測試數據,來驅動用例的執行ide
unpack的使用,當test_*()方法須要傳入多個參數時,須要經過列表或者元組來設定參數,則須要經過unpack方法來解析參數,例如:函數
info = [(1, 2), (3, 4)] @data(*info) @unpack # 下邊用例會執行兩次 def test_add(self, num1, num2): logger.info(num1 + num2)
下邊是個人unnitest結合ddt,進行數據驅動的代碼實現,其中
1.myexcel模塊是我調用openpyxl模塊封裝實現的excel基礎操做類,博客連接:http://www.javashuo.com/article/p-fnwwbnwx-nu.html
2.myddt是我基於ddt源碼進行修改適配後的文件,後續分享
3.myloggin是我基於loggin模塊進行封裝實現的日誌信息輸出類,後續分享測試
import unittest # from ddt import ddt, data from myddt import ddt, data,unpack from myunnitest import Register from mylogging.mylogger import logger from myexcel.handle_excel import Handle import os @ddt class RegisterTest(unittest.TestCase): #1.讀取測試數據 cur_path = os.path.dirname(__file__) case_path = os.path.join(os.path.dirname(cur_path), "resource\\login_case.xlsx") logger.info(case_path) handle = Handle(case_path, "Sheet1") cases = handle.get_all_caseinfo() print(cases) @classmethod def setUpClass(cls): pass @classmethod def tearDownClass(cls): pass def setUp(self): pass def tearDown(self): pass """解包""" @data(*cases) def test_reister_success(self, case): re = Register.register(case["username"], case["passwd1"], case["passwd2"]) logger.info(re) # 接口返回json,excel裏讀取出來的數據是字符串格式,因此須要 eval函數將兩個數據轉化一致 self.assertEqual(re, eval(case["expected"]), "error 參數有誤") info = [(1, 2), (3, 4)] @data(*info) @unpack # 下邊用例會執行兩次 def test_add(self, num1, num2): logger.info(num1 + num2) if __name__ == '__main__': unittest.main()