1.技术介绍
框架:unittest
请求处理:requests
excel数据处理:openpyxl
参数化:ddt
配置解析器:configparser
报告模板:HTMLTestRunnerNew.py(下载地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)
testdemo.xlsx:测试数据,注意:implement=y为执行数据,否则不执行
2.代码结构
- ----->case.config 配置文件
- ----->DoCase.py 测试用例类
- ----->DoConfig 配置文件处理
- ----->DoExcel.py Excel文件处理类,筛选有效数据返回
- ----->DoHttp.py http请求处理类
- ----->HttpRunner unittest加载用例执行生成报告
- ----->report.html 执行后生成的报告
- ----->HTMLTestRunnerNew.py 测试报告模板
复制代码 3.目录介绍
4.excel数据
5.case.config
6.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#抛出异常
复制代码 7.DoConfig.py
- import configparser
- class GetConfig():
- def get_config_data(self,file,section,option):
- cf = configparser.ConfigParser()
- cf.read(file, encoding="utf8") # 读取config,有中文注意编码
- # 返回value
- return cf[section][option]
复制代码 8.DoExcel.py
- from openpyxl import load_workbook
- from test02.DoConfig import GetConfig
- class GetExcelData():
- def __init__(self,file,sheet):
- self.file=file
- self.sheet=sheet
- def get_data(self):
- caseid = eval(GetConfig().get_config_data("case.config","CASE","caseid"))#处理配置文件获取要执行的caseid
- 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
- if data_dic["case_id"] in caseid:#判断case_id是否包含在配置文件中
- 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)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |