python-ddt模塊使用

一.數據驅動測試框架DDT的使用


背景介紹:
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()
相關文章
相關標籤/搜索