今天,給大家講的是通過一張表格,進而處理,來測試一個簡單的功能函數的代碼邏輯是否有問題。今天講的東西有很多是可以套用的,幾乎就是模板
首先我先給出要測的功能函數--登錄的代碼
def login_check(username=None, password=None): """ 登錄校驗的函數 :param username: 賬號 :param password: 密碼 :return: dict type """ if username != None and password != None: if username == 'python31' and password == 'lemonban': return {"code": 0, "msg": "登錄成功"} else: return {"code": 1, "msg": "賬號或密碼不正確"} else: return {"code": 1, "msg": "所有的參數不能為空"}
這是開發人員寫的,我們作為測試人員,要去對它進行白盒測試,檢測代碼的邏輯問題,有沒有出錯?但是,我們現在可以用簡單的方法,表格來處理,在表格上寫測試用例和傳入數據,給出表格如下圖:
以上兩者,是我們的前提准備條件,有了這兩者,我們才開始寫代碼, 那么,如何來進行呢?
一、把excel封裝好的模板直接拿過來用
import openpyxl class Excel: def __init__(self, filename, sheet_name): self.filename = filename self.sheet_name = sheet_name def open(self): # 第一步:將excel文件加載到一個工作簿對象中 self.wb = openpyxl.load_workbook(self.filename) # 第二步:選擇文件中的表單 self.sh = self.wb[self.sheet_name] def read_data(self): """讀數據""" self.open() res = list(self.sh.rows) # 獲取第一行的單元格,用列表推導式來簡寫代碼 title = [c.value for c in res[0]] cases_data = [] # 遍歷除第一行之外所有的行 for row in res[1:]: data = [c.value for c in row] case = dict(zip(title, data)) cases_data.append(case) return cases_data def write_data(self, row, column, value): """寫數據""" self.open() self.sh.cell(row=row, column=column, value=value) self.wb.save(self.filename)
二、編寫測試用例類
1、定義測試類,再定義一個測試方法
2、去excel中讀取用例數據
3、通過ddt實現數據驅動
4、實現用例內部的邏輯
import unittest from day_15.demo_處理表格示例 import myddt from day_15.demo_處理表格示例.hand_excel import Excel from day_15.demo_處理表格示例.login import login_check @myddt.ddt class TestLogin(unittest.TestCase): excel = Excel(r"C:\Users\Administrator\PycharmProjects\example\day_15\demo_處理表格示例\cases.xlsx", "login") cases_data = excel.read_data() @myddt.data(*cases_data) def test_login(self, item): # 准備數據 data = eval(item["data"]) expected = eval(item["expected"]) # 調用被測的功能函數 res = login_check(**data) # 獲取用例所在表單的行號 case_row = item["case_id"] + 1 try: # 斷言 self.assertEqual(expected, res) except AssertionError as e: self.excel.write_data(row=case_row, column=5, value="失敗") print("{}:用例執行失敗,失敗的信息如下:".format(item['title'])) print(e) raise e else: self.excel.write_data(row=case_row, column=5, value="通過") print("{}:用例測試執行通過!!!".format(item['title'])) if __name__ == '__main__': unittest.main()
記得要引入ddt,修改ddt里面的源碼
三、跑程序run
import unittest from unittestreport import TestRunner suite = unittest.defaultTestLoader.discover(r"C:\Users\Administrator\PycharmProjects\example\day_15\demo_處理表格示例\testcase") runner = TestRunner(suite, filename="report.html", report_dir=".", title='測試報告', tester='excellent', desc="excellent執行測試生成的報告", templates=1 # 這里可以生成兩個風格不同的報告,待會給大家看一下 ) runner.run()
最后把運行的結果給大家看一下:
所以,其實就是這么幾個步驟
1.准備要測的函數和表格用例
2.編寫測試用例類,導入excel封裝和ddt
3.run跑程序