unittest測試框架之DDT數據驅動


unittest測試框架之DDT數據驅動

ddt的使用

DDT數據驅動

  • DDT:Data Driver Test(數據驅動測試)
  • 數據驅動思想:數據和用例進行分離,通過外部數據去生成測試用例

安裝

pip install ddt

修改ddt源碼(是為了在生成的測試報告中顯示每條用例所對應的標題title)

  1. ddt文件中的ddt()方法
  2. 把原來的test_data_docstring = _get_test_data_docstring(func, v)注釋掉
  3. 如果數據是用對象來保存的,就添加test_data_docstring = v.title
  4. 如果數據使用字典來保存的,就添加test_data_docstring = v["title"]
  5. 修改后生成的測試報告就能把title列顯示到測試報告中
  6. 注意:title要是Excel表中的列名
def ddt(cls):
    for name, func in list(cls.__dict__.items()):
        if hasattr(func, DATA_ATTR):
            for i, v in enumerate(getattr(func, DATA_ATTR)):
                test_name = mk_test_name(name, getattr(v, "__name__", v), i)
                # test_data_docstring = _get_test_data_docstring(func, v) # 原來的
                # test_data_docstring = v.title  # 數據使用對象來保存,改成這樣
                test_data_docstring = v["title"]  # 數據使用字典來保存,改成這樣
                if hasattr(func, UNPACK_ATTR):...
                else:
                    add_test(cls, test_name, test_data_docstring, func, v)
            delattr(cls, name)
        elif hasattr(func, FILE_ATTR):...
    return cls

在測試類中使用ddt數據驅動獲取數據(這時一個測試用例類只需要一個測試方法就可以)

先准備一個簡單的登陸功能函數

def login(name=None, pwd=None):
    if name and pwd:
        if name == "desire" and pwd == "123456":
            return {"code": 0, "msg": "登陸成功"}
        else:
            return {"code": 1, "msg": "賬號密碼錯誤"}
    else:
        return {"code": 1001, "msg": "不能有空值"}

准備excel測試用例表格

導入ddt模塊

from ddt import ddt, data

創建測試用例類,加上ddt裝飾器@ddt

讀取excel表格ReadExcel

@ddt
class LoginTestCase(unittest.TestCase):
    # DATA_DIR:測試用例存放的路徑,用os模塊進行拼接excel用例表格的路徑
    excel_path = os.path.join(DATA_DIR, 'cases.xlsx')
    login = ReadExcel(excel_path, "login")
    # 讀取數據(字典形式)
    login_datas = login.read_data_dict()
    # 讀取數據(類的形式)
    # login_datas = login.read_data_obj()

創建測試用例方法,加上ddt裝飾器@data

@data()里面傳的參數要進行拆包,把每次的數據傳到方法里case參數
    @data(*login_datas)
    def test_login(self, case):
        pass
第一步:准備用例數據
①:字典形式取值(使用時需要修改ddt源文件為字典形式)
        # 1.參數
        login_data = eval(case["data"])
        # 2.預期結果
        expected = eval(case["expected"])
        # 3.用例序號
        case_id = case["case_id"]
②:類形式取值(使用時需要修改ddt源文件為類形式)
        # 1.參數
        login_data = eval(case.data)
        # 2.預期結果
        expected = eval(case.expected)
        # 3.用例序號
        case_id = case.case_id
第二步:執行功能函數,獲取實際結果
        result = login(*login_data)
第三步:通過斷言比對預期結果和實際結果
        try:
            self.assertEqual(expected, result)
        except AssertionError as a:
            # 把用例未通過結果寫入excel中(調用[ReadExcel](https://www.cnblogs.com/desireyang/p/12059916.html)類中的寫入方法)
            self.login.write_data(row=case_id + 1, column=5, value="用例未通過")
            raise a
        else:
            self.login.write_data(row=case_id + 1, column=5, value="用例通過")
直接可以運行測試用例類,會把自動化測試結果寫入到excel中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM