1.技術介紹 框架:unittest 請求處理:requests excel數據處理:openpyxl 參數化:ddt 報告模板:HTMLTestRunnerNew.py(下載地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234) t ...
1.技術介紹
框架:unittest
請求處理:requests
excel數據處理:openpyxl
參數化:ddt
報告模板:HTMLTestRunnerNew.py(下載地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)
testdemo.xlsx:測試數據,註意:implement=y為執行數據,否則不執行
2.代碼正題結構
----->DoCase.py 測試用例類 ----->DoExcel.py Excel文件處理類,篩選有效數據返回 ----->DoHttp.py http請求處理類 ----->HttpRunner unittest載入用例執行生成報告 ----->report.html 執行後生成的報告 ----->HTMLTestRunnerNew.py 測試報告模板
3.Docase.py
#測試用例類
import unittest from test02.DoHttp import Request_Http#引入請求類 from ddt import ddt,data,unpack#引入ddt做參數化 from test02.DoExcel import GetExcelData data_list = GetExcelData("C:\\Users\\Administrator\\Desktop\\testdemo.xlsx","s1").get_data() #用例類 @ddt#裝飾器裝飾類 class HttpCase(unittest.TestCase):#繼承unittest測試用例類 @data(*data_list)#脫外套 def test_login_yes(self,item): res = Request_Http(item["method"], item["url"], item["data"]).request_http() try: self.assertEqual(item["expect"],res.json()["code"])#斷言:預期與實際是否相等 except Exception as e: print("斷言異常:{0}".format(e)) raise e#拋出異常
4.DoExcel.py
#Excel文件處理類 from openpyxl import load_workbook class GetExcelData(): def __init__(self,file,sheet): self.file=file self.sheet=sheet def get_data(self): wb = load_workbook(self.file)#打開excel sheet = wb[self.sheet]#定位工作簿 data_list = [] for n in range(2,sheet.max_row+1): data_dic = {} for m in range(2,sheet.max_column+1): data_dic["case_id"] = sheet.cell(n, 1).value data_dic["module"] = sheet.cell(n, 2).value data_dic["title"] = sheet.cell(n, 3).value data_dic["method"]=sheet.cell(n,4).value data_dic["url"]=sheet.cell(n,5).value data_dic["data"]=eval(sheet.cell(n, 6).value)#還原數據類型 data_dic["expect"]=sheet.cell(n, 7).value data_dic["implement"]=sheet.cell(n, 8).value#y執行 if data_dic["implement"]=="y":#如果implement為y添加到列表 data_list.append(data_dic) return data_list
5.DoHttp.py
#http請求處理類
import requests class Request_Http(): def __init__(self,method,url,data,expected=None,headers=None,cookie=None): self.method=method.lower()#請求方式轉小寫 self.url=url self.data=data self.excepted=expected self.headers=headers self.cookie=cookie def request_http(self): if self.method=="get": try: return requests.get(self.url, params=self.data, headers=self.headers, cookies=self.cookie) except Exception as e: print("異常請求:{0}".format(e)) raise e # 拋出異常 else: try: return requests.post(self.url,params=self.data,headers=self.headers,cookies=self.cookie) except Exception as e: print("異常請求:{0}".format(e)) raise e#拋出異常
6.HttpRunner.py
#unittest載入用例執行生成報告
import unittest from test02 import DoCase import HTMLTestRunnerNew suite = unittest.TestSuite()#存放測試用例 loader = unittest.TestLoader()#載入器 suite.addTest(loader.loadTestsFromModule(DoCase))#載入測試模塊 #上下文管理器 with open("report.html","wb") as file: runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2,title="標題",description="備註",tester="姓名") runner.run(suite)
7.report.html
8.報告模板下載
HTMLTestRunnerNew.py(下載地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)