Python unittest+ddt+openpyxl+configparser

种地  金牌会员 | 2022-12-21 01:26:34 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 846|帖子 846|积分 2538



1.技术介绍

框架:unittest
请求处理:requests
excel数据处理:openpyxl
参数化:ddt
配置解析器:configparser
报告模板:HTMLTestRunnerNew.py(下载地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)
testdemo.xlsx:测试数据,注意:implement=y为执行数据,否则不执行
2.代码结构
  1. ----->case.config  配置文件
  2. ----->DoCase.py  测试用例类
  3. ----->DoConfig  配置文件处理
  4. ----->DoExcel.py  Excel文件处理类,筛选有效数据返回
  5. ----->DoHttp.py   http请求处理类
  6. ----->HttpRunner  unittest加载用例执行生成报告
  7. ----->report.html   执行后生成的报告
  8. ----->HTMLTestRunnerNew.py  测试报告模板
复制代码
3.目录介绍


 
4.excel数据


5.case.config
  1. [CASE]
  2. caseid=[1,3]
复制代码
6.Docase.py
  1. #测试用例类
  2. import unittest
  3. from test02.DoHttp import Request_Http#引入请求类
  4. from ddt import ddt,data,unpack#引入ddt做参数化
  5. from test02.DoExcel import GetExcelData
  6. data_list = GetExcelData("C:\\Users\\Administrator\\Desktop\\testdemo.xlsx","s1").get_data()
  7. #用例类
  8. @ddt#装饰器装饰类
  9. class HttpCase(unittest.TestCase):#继承unittest测试用例类
  10.     @data(*data_list)#脱外套
  11.     def test_login_yes(self,item):
  12.         res = Request_Http(item["method"], item["url"], item["data"]).request_http()
  13.         try:
  14.             self.assertEqual(item["expect"],res.json()["code"])#断言:预期与实际是否相等
  15.         except Exception as e:
  16.             print("断言异常:{0}".format(e))
  17.             raise e#抛出异常
复制代码
7.DoConfig.py
  1. import configparser
  2. class GetConfig():
  3.     def get_config_data(self,file,section,option):
  4.         cf = configparser.ConfigParser()
  5.         cf.read(file, encoding="utf8")  # 读取config,有中文注意编码
  6.         # 返回value
  7.         return cf[section][option]
复制代码
8.DoExcel.py
  1. from openpyxl import load_workbook
  2. from test02.DoConfig import GetConfig
  3. class GetExcelData():
  4.     def __init__(self,file,sheet):
  5.         self.file=file
  6.         self.sheet=sheet
  7.     def get_data(self):
  8.         caseid = eval(GetConfig().get_config_data("case.config","CASE","caseid"))#处理配置文件获取要执行的caseid
  9.         wb = load_workbook(self.file)#打开excel
  10.         sheet = wb[self.sheet]#定位工作簿
  11.         data_list = []
  12.         for n in range(2,sheet.max_row+1):
  13.             data_dic = {}
  14.             for m in range(2,sheet.max_column+1):
  15.                 data_dic["case_id"] = sheet.cell(n, 1).value
  16.                 data_dic["module"] = sheet.cell(n, 2).value
  17.                 data_dic["title"] = sheet.cell(n, 3).value
  18.                 data_dic["method"]=sheet.cell(n,4).value
  19.                 data_dic["url"]=sheet.cell(n,5).value
  20.                 data_dic["data"]=eval(sheet.cell(n, 6).value)#还原数据类型
  21.                 data_dic["expect"]=sheet.cell(n, 7).value
  22.             if data_dic["case_id"] in caseid:#判断case_id是否包含在配置文件中
  23.                 data_list.append(data_dic)
  24.         return data_list
复制代码
5.DoHttp.py
  1. #http请求处理类
  2. import requests
  3. class Request_Http():
  4.     def __init__(self,method,url,data,expected=None,headers=None,cookie=None):
  5.         self.method=method.lower()#请求方式转小写
  6.         self.url=url
  7.         self.data=data
  8.         self.excepted=expected
  9.         self.headers=headers
  10.         self.cookie=cookie
  11.     def request_http(self):
  12.         if self.method=="get":
  13.             try:
  14.                 return requests.get(self.url, params=self.data, headers=self.headers, cookies=self.cookie)
  15.             except Exception as e:
  16.                 print("异常请求:{0}".format(e))
  17.                 raise e  # 抛出异常
  18.         else:
  19.             try:
  20.                 return requests.post(self.url,params=self.data,headers=self.headers,cookies=self.cookie)
  21.             except Exception as e:
  22.                 print("异常请求:{0}".format(e))
  23.                 raise e#抛出异常
复制代码
6.HttpRunner.py
  1. #unittest加载用例执行生成报告
  2. import unittest
  3. from test02 import DoCase
  4. import HTMLTestRunnerNew
  5. suite = unittest.TestSuite()#存放测试用例
  6. loader = unittest.TestLoader()#加载器
  7. suite.addTest(loader.loadTestsFromModule(DoCase))#加载测试模块
  8. #上下文管理器
  9. with open("report.html","wb") as file:
  10.     runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2,title="标题",description="备注",tester="姓名")
  11.     runner.run(suite)
复制代码
7.report.html


8.报告模板下载

HTMLTestRunnerNew.py(下载地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表