美食家大橙子 发表于 2022-12-20 23:21:51

Python unittest+ddt+openpyxl接口自动化

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  测试报告模板 
https://img2023.cnblogs.com/blog/1375875/202212/1375875-20221220223934408-891048890.png
https://img2023.cnblogs.com/blog/1375875/202212/1375875-20221220232751324-1240541711.png
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#定位工作簿
      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<br>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

https://img2023.cnblogs.com/blog/1375875/202212/1375875-20221220233051540-1753786899.png
8.报告模板下载

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Python unittest+ddt+openpyxl接口自动化