Python+ddt+Excel实现接口自动化测试生成完美测试报告

news/2024/7/21 6:38:23 标签: python, excel, 开发语言

 接口自动化测试是指通过编写代码或使用工具,模拟用户发送请求,验证接口是否符合设计规范和功能需求的过程。

如何用 python +ddt+excel 实现接口自动化测试

接口自动化测试可以提高测试效率和质量,节省测试成本和时间,保证测试覆盖率和可维护性。

入门如何用 python +ddt+excel 实现接口自动化测试,请瞧如下内容:

一、准备工作

1. 安装 python 环境

python 是一种简洁、优雅、易学的编程语言,它有丰富的第三方库和社区支持,非常适合用来进行接口自动化测试。安装 python 的3.0以上的版本),并配置好环境变量,以便在命令行中使用 python 命令。

2. 安装相关库

为了进行接口自动化测试,我们需要安装以下几个库:

  • requests:用来发送 HTTP 请求,支持各种方法、参数、头部、身份验证等。

  • xlrd:用来读取 excel 文件中的数据,支持 xls 和 xlsx 格式。

  • openpyxl:用来写入 excel 文件中的数据,支持 xlsx 格式。

  • ddt:用来实现数据驱动测试,可以从 excel 文件中读取多组数据,并生成多个测试用例。

  • unittest:用来编写和执行测试用例,支持断言、前置后置条件、测试套件等。

  • HTMLTestRunner_api:用来生成 HTML 格式的测试报告,支持图表、日志、截图等。

我们可以使用 pip 命令来安装这些库,例如:

pip install requests

二、设计测试

1. 编写 excel 文件

我们需要在 excel 文件中填写接口的相关信息,包括:

  • 接口名称

  • 请求地址

  • 请求方法

  • 请求参数

  • 预期结果

例如:

我们可以将这个 excel 文件保存为 test_data.xlsx,并放在项目的 test_datas 目录下。

2. 封装 excel 操作

为了方便地读取和写入 excel 文件中的数据,我们需要封装一些 excel 操作的函数,例如:

  • 打开表单

  • 获取表头

  • 获取所有数据

  • 写入数据

我们可以将这些函数定义在一个类中,并保存为 excel_handler.py,并放在项目的 Lib 目录下。具体代码如下:

 
  1. from openpyxl import load_workbook

  2. from openpyxl.worksheet.worksheet import Worksheet

  3. class ExcelHandler():

  4. '''操作Excel'''

  5. def __init__(self, file):

  6. '''初始化函数'''

  7. self.file = file

  8. def open_sheet(self, sheet_name) -> Worksheet:

  9. '''打开表单'''

  10. wb = load_workbook(self.file)

  11. sheet = wb[sheet_name]

  12. return sheet

  13. def read_rows(self,sheet_name):

  14. '''读取除表头外所有数据(除第一行外的所有数据)'''

  15. sheet = self.open_sheet(sheet_name)

  16. rows = list(sheet.rows)[1:]

  17. data = []

  18. for row in rows:

  19. row_data = []

  20. for cell in row:

  21. row_data.append(cell.value)

  22. data.append(row_data)

  23. return data

  24.      def read_key_value(self,sheet_name):

  25.        '''获取所有数据,将表头与内容结合整....'''                ...

  26.        return data

3. 封装 requests 请求

为了方便地发送 HTTP 请求,我们需要封装一

些 requests 请求的函数,例如:

  • 初始化 session

  • 发送请求

  • 关闭 session

我们可以将这些函数定义在一个类中,并保存为 requests_handler.py,并放在项目的 Lib 目录下。具体代码如下:

 
  1. import requests

  2. class HTTPHandler:

  3. # 初始化

  4. def __init__(self):

  5. self.session = requests.Session()

  6. # 定义一个方法,接收访问http请求的方式

  7. def visit(self, url, method, params=None, data=None, json=None, **kwargs):

  8. res = self.session.request(method, url, params=params, data=data, json=json, **kwargs)

  9. try:

  10. return res.json()

  11. except ValueError:

  12. print('return not json')

  13. # 关闭session会话

  14. def close_session(self):

  15. self.session.close()

三、执行测试

1. 编写测试用例

我们需要使用 unittest 和 ddt 来编写和执行测试用例,具体步骤如下:

  • 导入相关库和模块

  • 定义一个测试类,继承 unittest.TestCase

  • 定义一个类方法,用来初始化 session 和读取 excel 文件中的数据

  • 使用 @ddt.data 装饰器,传入 excel 文件中的数据

  • 定义一个测试方法,用来发送请求,并断言响应结果是否符合预期

我们可以将这些代码保存为 test_api.py,并放在项目的 test_cases 目录下。具体代码如下:

 
  1. from Lib.excel_handler import ExcelHandler

  2. from Lib.requests_handler import HTTPHandler

  3. import requests

  4. import ddt

  5. import unittest

  6. data = ExcelHandler('test_datas/test_data.xlsx').read_key_value('Sheet1')

  7. @ddt.ddt

  8. class TestAPI(unittest.TestCase):

  9. @classmethod

  10. def setUpClass(cls):

  11. cls.s = HTTPHandler()

  12. @ddt.data(*data)

  13. def test_api(self,params):

  14. print('params:%s' % params)

  15. case_name = params.get('接口名称')

  16. url = params.get('请求地址')

  17. args = eval(params.get('请求参数')) if isinstance(params.get('请求参数'), str) else params.get('请求参数')

  18. method = params.get('请求方法')

  19. expct_res1 = params.get('预期结果')

  20. # 发起请求,获取返回数据

  21. result = self.s.visit(url, method, params=args)

  22. # 分析返回数据

  23. response_data = result['name']

  24. # 断言响应结果是否符合预期

  25. self.assertEqual(expct_res1, response_data)

  26. @classmethod

  27. def tearDownClass(cls):

  28. cls.s.close_session()

2. 生成测试报告

我们需要使用 HTMLTestRunner_api 来生成 HTML 格式的测试报告,具体步骤如下:

  • 导入相关库和模块

  • 定义一个测试套件,添加测试用例

  • 定义一个测试报告的文件名和路径

  • 定义一个测试运行器,传入测试报告的文件对象和相关参数

  • 使用测试运行器来运行测试套件

我们可以将这些代码保存为 run.py,并放在项目的根目录下。具体代码如下:

 
  1. import unittest

  2. from HTMLTestRunner_api import HTMLTestRunner

  3. from test_cases.test_api import TestAPI

  4. # 定义一个测试套件

  5. suite = unittest.TestSuite()

  6. # 添加测试用例

  7. suite.addTest(unittest.makeSuite(TestAPI))

  8. # 定义一个测试报告的文件名和路径

  9. report_file = 'reports/test_report.html'

  10. # 定义一个测试运行器,传入测试报告的文件对象和相关参数

  11. with open(report_file, 'wb') as f:

  12. runner = HTMLTestRunner(f, title='接口自动化测试报告', description='用例执行情况')

  13. # 使用测试运行器来运行测试套件

  14. runner.run(suite)

四、查看结果

运行 run.py 文件后,我们可以在 reports 目录下看到生成的 test_report.html 文件,打开它,我们可以看到以下内容:
 

我们可以看到,共有 11 个测试用例,通过 6 个,失败 5 个。我们还可以看到每个测试用例的详细信息,包括用例名称、请求地址、请求参数、预期结果、实际结果等。我们还可以看到一些图表、日志、截图等。

这样,我们就完成了用 python +ddt+excel 实现接口自动化测试的过程。

总结:
感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。


http://www.niftyadmin.cn/n/5347875.html

相关文章

#Uniapp:map地图组件

示例 <map class"map" :latitude"mapOptions.latitude" :longitude"mapOptions.longitude" :scale"mapOptions.scale" :markers"mapOptions.markers"></map>mapOptions: {longitude: 108.95, // 中心经度latit…

基于 Docker 搭建 Uptime-Kuma 一个极简风的应用监控

GitHub&#xff1a;https://github.com/louislam/uptime-kuma 一、uptime-kuma 介绍 Demo&#xff1a;https://uptime.wuhanjiayou.cn/ uptime-kuma 是一款开源的监控工具, 支持 TCP / PING / HTTP 等多种监控方式&#xff0c;可监测网站&#xff0c;数据库&#xff0c;Docker…

研究生开题报告撰写:文言一心VSChatgpt3.5

文言一心 问&#xff1a;我是一名研二学生&#xff0c;请帮我生成一份研究生毕设开题答辩ppt框架。 答&#xff1a;好的&#xff0c;以下是一份研究生毕设开题答辩PPT的框架&#xff0c;供您参考&#xff1a; 幻灯片1&#xff1a;封面页 标题&#xff1a;研究生毕设开题答辩…

海外云手机三大优势

在全球化潮流下&#xff0c;企业因业务需求对海外手机卡等设备的需求不断攀升&#xff0c;推动了海外云手机业务的蓬勃发展。相较于自行置备手机设备&#xff0c;海外云手机不仅能够降低成本&#xff0c;还具备诸多优势&#xff0c;让我们深入探讨其中的三大黄金优势。 经济实惠…

快速了解工业交换机

工业交换机是专门为工业环境设计的数据通信设备。该设备的主要作用是满足工业控制系统对数据通信的要求&#xff0c;实现不同设备之间的数据传输和网络连接。工业交换机在适应恶劣环境、抗干扰和稳定性等方面表现更出色&#xff0c;相较于传统的商用交换机。 它的基本原理是利用…

oak-d-lite摄像头 去噪处理

前言 试过了各种滤波才知道&#xff0c;为啥oak在示例算法只是使用5X5滤波而不使用更好的滤波的原因了。 实验内容 oak-d-lite使用的工业相机噪声主要表现为随机的亮度变化&#xff0c;使用Non-Local Means Denoising算法后去噪效果很好&#xff08;左为原图&#xff09;&…

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…

iframe通信

1.postMessage onmessage 父页面 父页面接受iframe消息 window.addEventListener("message",(event)>{console.log(event.data)} );父页面向iframe发送消息 window.postMessage 在postMessage(message, targetOrigin, transfer)函数中可以传递3个参数&#xf…