Uinttest +excel结合使用--详细讲解 ----放到csdn上去哈
两种方式:1、超继续  2、ddt(推荐使用)

测试类:
unittest 单元测试,通过单元测试,实现对自己写的类的测试
TestCase  self.assert 异常处理

参数化:

用Excel 写成类,有三种方法:
      1、excel 无表头,一次性加载所有数据
      2、excel无表头,使用的时候,再加载数据
      3、excel有表头,按表头去加载数据

一、使用DDT的方式

注意:使用ddt的话,不能通过【suite.addTest】--这种创建实例的方式加载用例

代码实现如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : test_suite.py
import HTMLTestRunner
import unittestfrom ddt_excel.test_http import TestHttp# 使用ddt的话,不能通过【suite.addTest】--这种创建实例的方式加载用例suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestHttp))# 执行用例
with open("test_summer.html", "wb") as file:testrunner = HTMLTestRunner.HTMLTestRunner(stream=file, verbosity=2, title=None, description=None)testrunner.run(suite)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : test_http.py
import unittestfrom test_excel_case import GetData
from test_excel_case.http_request import HttpRequest
from ddt import ddt, data, unpack
from ddt_excel.do_excel import DoExcel# test_data = DoExcel("test.xlsx", 'test').get_data()
test_data = DoExcel("test.xlsx", 'test').get_data([1, 2])@ddt
class TestHttp(unittest.TestCase):def setUp(self):pass@data(*test_data)def test_api(self, item):res = HttpRequest().http_request(item['url'], item['data'], item['method'])if res.cookies:  # 如果cookie有的话,那么就更新cookiesetattr(GetData, 'Cookie', res.cookies)  # 反射try:self.assertEqual(item['expected'], res.json()['code'])except AssertionError as e:print("test_api's error is {}".format(e))raise eprint(res)def tearDown(self):pass
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : do_excel.py
from openpyxl import load_workbookclass DoExcel:def __init__(self, file_name, sheet_name):self.file_name = file_nameself.sheet_name = sheet_nameself.sheet_obj = load_workbook(self.file_name)[self.sheet_name]  # 获取一个表单对象def get_data(self, mode='all'):'''mode 控制是否执行所有的用例,默认值:all,为all就执行所有用例如果不等于all的话就进入分值判断mode,只能输入 all 、列表  这两种类型的参数'''wb = load_workbook(self.file_name)sheet = wb[self.sheet_name]test_data = []for i in range(2, sheet.max_row + 1):sub_data = {}sub_data['case_id'] = sheet.cell(i, 1).valuesub_data['module'] = sheet.cell(i, 2).valuesub_data['title'] = sheet.cell(i, 3).valuesub_data['method'] = sheet.cell(i, 4).valuesub_data['url'] = sheet.cell(i, 5).valuesub_data['data'] = sheet.cell(i, 6).valuesub_data['expected'] = sheet.cell(i, 7).valuetest_data.append(sub_data)print(test_data)# 根据mode的值去进行判断if mode == 'all':  # 执行所有用例final_data = test_dataelse:  # [1,2,3,4]和case_idfinal_data = []for item in test_data:  # 对test_data所有的用例进行遍历if item['case_id'] in mode:final_data.append(item)print(final_data)return final_data  # 返回取到的数据if __name__ == '__main__':DoExcel("test.xlsx", 'test').get_data()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : http_request.pyimport requestsclass HttpRequest:def http_request(self, url, data, method):headers = {'Content-Type': 'application/json;charset=UTF-8'}result = Noneif method.lower() == 'post':result = requests.request("POST", url, data=data, headers=headers)elif method.lower() == 'get':result = requests.request("GET", url, data=data, headers=headers)else:print("错误")return result
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : GetData.pyclass GetData:Cookie = None

二、 超级继承方式

(这个使用的excel文件是没有带表头的)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/13 15:53
# @File    : test_suite.py
import HTMLTestRunner
import unittestfrom test_excel_case.do_excel import DoExcel
from test_excel_case.test_http import TestHttp# test_data = [{"url": "https://xxx.xx.com/xxxapi/login",
#               "data": {"username": "testlxm", "password": "testlxm"}, "expected": 1000, "method": "post"},
#              {"url": "https://xxx.xx.com/xxxapi/login",
#               "data": {"username": "testlxm", "password": "123456"}, "expected": 1000, "method": "post"}]# 方法一:一次性将用例从exel中读取出来
test_data = DoExcel("test.xlsx", 'test').get_data()suite = unittest.TestSuite()# 实例的方式加载用例
for item in test_data:suite.addTest(TestHttp('test_api', item['method'], item['url'], item['data'],item['expected']))# 执行用例
with open("test_summer.html", "wb") as file:testrunner = HTMLTestRunner.HTMLTestRunner(stream=file, verbosity=2, title=None, description=None)testrunner.run(suite)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : test_http.py
import unittestfrom test_excel_case import GetData
from test_excel_case.http_request import HttpRequestclass TestHttp(unittest.TestCase):def setUp(self):passdef __init__(self, methodName, method, url, data, expected): #通过初始化函数传参super(TestHttp, self).__init__(methodName)  # 父类的方法保留了self.url = urlself.data = dataself.method = methodself.expected = expecteddef test_api(self):res = HttpRequest().http_request(self.url, self.data, self.method)if res.cookies:#如果cookie有的话,那么就更新cookiesetattr(GetData,'Cookie',res.cookies) #反射try:self.assertEqual(self.expected,res.json()['code'])except AssertionError as e:print("test_api's error is {}".format(e))raise eprint(res)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : do_excel.py
from openpyxl import load_workbookclass DoExcel:def __init__(self, file_name, sheet_name):self.file_name = file_nameself.sheet_name = sheet_nameself.sheet_obj = load_workbook(self.file_name)[self.sheet_name]  # 获取一个表单对象def get_data(self):wb = load_workbook(self.file_name)sheet = wb[self.sheet_name]test_data = []for i in range(1, sheet.max_row + 1):sub_data = {}sub_data['method'] = sheet.cell(i, 1).valuesub_data['url'] = sheet.cell(i, 2).valuesub_data['data'] = sheet.cell(i, 3).valuesub_data['expected'] = sheet.cell(i, 4).valuetest_data.append(sub_data)print(test_data)return test_data  # 返回取到的数据,获取一个表单对象if __name__ == '__main__':DoExcel("test.xlsx", 'test').get_data()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : http_request.pyimport requestsclass HttpRequest:def http_request(self, url, data, method):headers = {'Content-Type': 'application/json;charset=UTF-8'}result = Noneif method.lower() == 'post':result = requests.request("POST", url, data=data, headers=headers)elif method.lower() == 'get':result = requests.request("GET", url, data=data, headers=headers)else:print("错误")return result
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File    : GetData.pyclass GetData:Cookie = None

注意:使用的excel表是不带表头的

Uinttest +excel结合使用--详细讲解相关推荐

  1. 怎样才算精通 Excel?超详细讲解!

    这个问题就很主观了,分为三大模块简单说一下个人看法: 到底怎样才算[熟练]? 从入门到精通各阶段的要求是啥? 小白怎样快速学习Excel,达到"熟练使用"的要求? 01 到底怎样才 ...

  2. pytest自动化测试框架,真正做到从0到1由浅入深详细讲解【万字级】

    目录 嗨咯铁汁们,很久不见,我还是你们的老朋友凡叔,这里也感谢各位小伙伴的点赞和关注,你们的三连是我最大的动力哈,我也不会辜负各位的期盼,这里呢给大家出了一个pytest自动化测试框架由浅入深详细讲解 ...

  3. python中.find函数的使用方法及实例_FIND函数的详细讲解及实例分析

    在写LOOKUP的时候就想写一下FIND函数,此函数是我经常用到的函数,无论是在EXCEL中还是在VBA中,此函数的利用价值极高,很值得推荐,此函数应用简单,易学易用.我在以前的VBA文章中非常详细地 ...

  4. Yaml版接口自动化详细讲解(Python + pytest + allure + log + yaml + mysql + redis + 钉钉通知 + Jenkins)

    目录 框架介绍 框架结构 框架功能讲解 common  # 配置 config.yaml  # 公共配置 setting.py  # 环境路径存放区域 data  # 测试用例数据 Files  #  ...

  5. 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)

    今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现,详细讲解每一行代码加注 ...

  6. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  7. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

  8. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  9. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

最新文章

  1. python 保存内容到记事本里面
  2. NLP 领域还有 5 大开放问题
  3. 程序员最喜爱的12个Android应用开发框架二(转)
  4. 通过HTML的canvas实现简单的画图功能
  5. php获取上传多个文件缺失
  6. python爬虫从入门到放弃(二)之爬虫的原理
  7. z-index失效的情况
  8. Kali linux学习入门-安装Kali Linux 后需要做的 20 件事
  9. 设计包含min函数的栈,O(1)空间实现方法
  10. Base64编码简介及在java中的使用
  11. Windows网络命令行程序
  12. java动画api_使用MMAPI播放gif动画
  13. Markdown编辑器对比分析
  14. msicuu2微软卸载工具
  15. 服务器安全狗的日志在哪儿 文件位置,服务器安全狗 防护日志功能介绍
  16. 字体:等宽字体与比例字体 - Monospaced font Proportional font
  17. 【毕业设计】智能指纹识别门禁系统 - 单片机 嵌入式 物联网
  18. Drcom下如何优雅地使用路由器上网
  19. 讲道理,只要你是一个爱折腾的程序员,毕业找工作真的不需要再花钱培训!
  20. paddlepaddle、paddlehub依赖包下载并离线安装

热门文章

  1. simulink同步发电机模型_基于Speedgoat的永磁同步电机控制Demo
  2. 2022年2月国产数据库排行榜: OceanBase“三连增”重夺榜眼,GaussDB实现本月最大涨幅引期待...
  3. 数据3分钟丨Snowflake获“2021 DBMS”;OceanBase社区版3.1.2正式发布
  4. 效率提高N倍的19条MySQL优化秘籍
  5. 一条SQL语句的千回百转
  6. 自治时代:Oracle 公有云离我们很近,自治数据库离我们还远
  7. 深入解析:你听说过Oracle数据库的更新重启动吗?
  8. 实例解析网络编程中的另类内存泄漏
  9. DCI架构是如何解决DDD战术建模缺点的?
  10. 一文讲全了Python 类和对象内容