python使用requests+excel进行接口自动化测试(建议收藏)

news2024/11/27 14:46:40

前言

在当今的互联网时代中,接口自动化测试越来越成为软件测试的重要组成部分。Python是一种简单易学,高效且可扩展的语言,自然而然地成为了开发人员的首选开发语言。而requests和xlwt这两个常用的Python标准库,能够帮助我们轻松地开发接口自动化测试,更快更好地完成测试工作。

下面是这两个库在接口自动化测试中可带来的好处

1. requests可以方便地模拟发送HTTP请求,实现接口测试,支持GET、POST、PUT、DELETE等请求方式。使用requests,我们可以轻松实现对接口的请求及返回结果的处理。​​​​​​

import requestsresponse = requests.get('http://example.com')

2. requests提供了对HTTP头的复杂处理和特定认证方案的支持,包括Basic,Digest,OAuth等。这意味着我们可以轻松地实现接口的授权认证。

import requestsresponse = requests.get('http://example.com', auth=('user', 'pass'))

3. requests支持Cookie和Session的处理,可以用来保证用户的身份认证或后续请求的连续性。这对于需要进行多次调用接口的测试非常有用。

4. xlwt库支持将测试结果以Excel格式将结果输出或记录。接口自动化测试有的时候需要输出测试报告,xlwt可以方便地将测试结果输出为Excel表格。​​​​​​​

import xlwtbook = xlwt.Workbook(encoding='utf-8')sheet = book.add_sheet('Sheet1')sheet.write(0, 0, '接口名称')sheet.write(0, 1, '测试结果')sheet.write(1, 0, 'test API')sheet.write(1, 1, 'Pass')book.save('result.xls')

5. xlwt库为测试结果提供格式化的输出,用户可以自定义表格样式以及表格内容的格式、字体、颜色、边框等,以便用户快速理解接口测试结果,对其做出有效的应对。

综上所述,requests和xlwt是Python的两个基础库,它们能够方便地完成接口自动化测试,并且大大提高测试的效率和精度。因此,如果您还没有使用它们进行接口自动化测试,不妨试试看以下的接口自动化测试框架DEMO。

完整代码

import requestsimport xlwtimport xlrdimport unittestclass BaseTestCase(unittest.TestCase):    url = ""  # 接口请求的 URL    method = "GET"  # 接口请求的方法    data = {}  # 接口请求的数据    headers = {}  # 接口请求的头部    expected_code = 200  # 预期的 HTTP 状态码    expected_result = {}  # 预期的响应结果    def setUp(self):        """每个测试方法执行前调用"""        pass    def tearDown(self):        """每个测试方法执行后调用"""        pass    def run_case(self, case):        """动态创建的测试方法,执行测试用例"""        self.url = case['url']        self.method = case['method']        self.data = case['data']        self.headers = case.get('headers', {})        self.expected_code = case.get('expected_code', 200)        self.expected_result = case.get('expected_result', {})        self.test_api()    def test_api(self):        """测试用例实现"""        response = requests.request(self.method, url=self.url, headers=self.headers, data=self.data)        self.assertEqual(response.status_code, self.expected_code)  # 断言响应的 HTTP 状态码是否与预期一致        self.assertDictEqual(response.json(), self.expected_result)  # 断言响应的结果是否与预期一致def read_excel(file_path, sheet_name):    workbook = xlrd.open_workbook(file_path)  # 打开 Excel 文件    sheet = workbook.sheet_by_name(sheet_name)  # 获取 Excel 工作表    rows = sheet.nrows  # 获取行数    cases = []    for i in range(1, rows):  # 从第 2 行开始读取测试用例        case = {}        case['url'] = sheet.cell_value(i, 0)  # 读取接口请求的 URL        case['method'] = sheet.cell_value(i, 1)  # 读取接口请求的方法        case['data'] = sheet.cell_value(i, 2)  # 读取接口请求的数据        case['headers'] = sheet.cell_value(i, 3)  # 读取接口请求的头部        case['expected_code'] = int(sheet.cell_value(i, 4))  # 读取预期的 HTTP 状态码        case['expected_result'] = eval(sheet.cell_value(i, 5))  # 读取预期的响应结果        case['name'] = sheet.cell_value(i, 6)  # 读取用例名称        cases.append(case)    return casesdef write_excel(file_path, sheet_name, cases):    workbook = xlwt.Workbook()    sheet = workbook.add_sheet(sheet_name)    sheet.write(0, 0, '用例编号')    sheet.write(0, 1, '用例名称')    sheet.write(0, 2, '测试结果')    for i, case in enumerate(cases):        sheet.write(i+1, 0, i+1)        sheet.write(i+1, 1, case.get('name', '') or case['url'])        sheet.write(i+1, 2, '通过' if case.get('result') else '失败')    workbook.save(file_path)if __name__ == '__main__':    cases = read_excel('cases.xlsx', 'Sheet1')  # 读取测试用例    suite = unittest.TestSuite()  # 创建测试套件    for case in cases:        case_name = case.get('name', '') or case['url']        setattr(BaseTestCase, 'test_{}'.format(case_name), lambda self, case=case: self.run_case(case))        # 动态创建测试方法,并将测试用例绑定到测试方法上    unittest.TextTestRunner().run(suite)  # 执行测试套件    write_excel('report.xls', 'Sheet1', cases)  # 写入测试结果报告

下面详细介绍一下⬆️上方代码

1. 安装所需要的库和依赖项​​​​​​​

pip install requestspip install xlwt

2. 编写接口自动化测试基类及测试用例实现​​​​​​​

import requestsimport xlwtimport unittestclass BaseTestCase(unittest.TestCase):    url = ""  # 接口请求的 URL    method = "GET"  # 接口请求的方法    data = {}  # 接口请求的数据    headers = {}  # 接口请求的头部    expected_code = 200  # 预期的 HTTP 状态码    expected_result = {}  # 预期的响应结果    def setUp(self):        """每个测试方法执行前调用"""        pass  # 可以进行一些初始化工作    def tearDown(self):        """每个测试方法执行后调用"""        pass  # 可以进行一些清理工作    def test_api(self):        """测试用例实现"""        response = requests.request(self.method, url=self.url, headers=self.headers, data=self.data)        self.assertEqual(response.status_code, self.expected_code)  # 断言响应的 HTTP 状态码是否与预期一致        self.assertDictEqual(response.json(), self.expected_result)  # 断言响应的结果是否与预期一致

3. 编写 Excel 文件读取和解析函数​​​​​​​

import xlrddef read_excel(file_path, sheet_name):    workbook = xlrd.open_workbook(file_path)  # 打开 Excel 文件    sheet = workbook.sheet_by_name(sheet_name)  # 获取 Excel 工作表    rows = sheet.nrows  # 获取行数    cases = []    for i in range(1, rows):  # 从第 2 行开始读取测试用例        case = {}        case['url'] = sheet.cell_value(i, 0)  # 读取接口请求的 URL        case['method'] = sheet.cell_value(i, 1)  # 读取接口请求的方法        case['data'] = sheet.cell_value(i, 2)  # 读取接口请求的数据        case['headers'] = sheet.cell_value(i, 3)  # 读取接口请求的头部        case['expected_code'] = int(sheet.cell_value(i, 4))  # 读取预期的 HTTP 状态码        case['expected_result'] = eval(sheet.cell_value(i, 5))  # 读取预期的响应结果        cases.append(case)    return cases

4. 编写 Excel 结果报告写入函数​​​​​​​

def write_excel(file_path, sheet_name, cases):    workbook = xlwt.Workbook()    sheet = workbook.add_sheet(sheet_name)    sheet.write(0, 0, '用例编号')    sheet.write(0, 1, '用例名称')    sheet.write(0, 2, '测试结果')    for i, case in enumerate(cases):        sheet.write(i+1, 0, i+1)        sheet.write(i+1, 1, case.get('name', ''))        sheet.write(i+1, 2, '通过' if case.get('result') else '失败')    workbook.save(file_path)

5. 编写主函数​​​​​​​

if __name__ == '__main__':    cases = read_excel('cases.xlsx', 'Sheet1')  # 读取测试用例    suite = unittest.TestSuite()  # 创建测试套件    for case in cases:        case_name = case.get('name', '') or case['url']        setattr(BaseTestCase, 'test_{}'.format(case_name), lambda self, case=case: self.run_case(case))        # 动态创建测试方法,并将测试用例绑定到测试方法上    unittest.TextTestRunner().run(suite)  # 执行测试套件    write_excel('report.xls', 'Sheet1', cases)  # 写入测试结果报告

这是一个简单的Python接口自动化测试项目,可以通过Excel 文件管理测试用例,支持多种 HTTP 请求方法和数据格式,适用于各种接口自动化测试场景。

读到这了,希望能够“分享并转发文章”让更多同学知道。


END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试qq交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== 编辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

archive log list :报错的解决办法

装好oracle数据库之后, 没事在练习sql语句, 看看一些基本的字典表啊啥的 但是当我执行 archive log list这个的时候居然给我报错, 这句话的意思是: 查看数据库的备份和恢复策略,并确定归档文件的具体位置&#xff…

小觅相机去畸变--Apriltag标签检测--Apriltag_ros

小觅相机型号:深度版,视场角50 ROS版本:nodelet 1.使用Calibrator获取相机的标定参数,或者用小觅相机自带的sdk获取: calibrator可以参考:ROS系统-摄像头标定camera calibration 小觅自带sdk参考:获取图像标定参数 或者小觅的ROS包编译后,会生成 这个get_img_para…

请求从前端到后端跟踪调试

请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢&a…

【MySQL】数据库报错集

一. 报错列表 1.1. Out of range value for column “xx” at row x 阐述:第 “x” 行的列 “xx” 超出范围 原因:建表时,类型bigint且长度20,如下字段的值超过其可输入的范围了 解决:修改该值为该列所设的长度即可 …

Cookie和Session原理详解

目录 前言 Cookie Session 会话机制 Cookie和Session的区别 Servlet中对Session和Cookie的封装 代码实例:实现用户登录 约定前后端交互的接口 前端页面: 后端实现 login index 总结 前言 在web的发展史中,我们知道浏览器和服务…

【模拟电子技术】理论考核回顾

写在前面: 1:好好学习,早日学会看B站华成英老师的课,不然就会像我一样最后快挂科了。 2:杂谈:我觉得一个“智者”可以因为我不会做题来侮辱我的智商,但是不能借此侮辱我没好好复习。 3&#…

AI换脸(支持视频换脸,支持cpu、低算力)【附代码】

可直接选择一张人脸去替换另一张图片或者视频中的人脸。本项目仅提供人脸替换部分,不需要数据集,不用训练! 目录 项目说明 环境说明 准备工作 如何使用 免责声明 项目说明 本项目参考源码:GitHub - s0md3v/roop: one-click…

[数据结构 -- 手撕排序算法第一篇] 堆排序,一篇带你搞懂堆排序

目录 1、堆的应用 -- 堆排序 1.1 堆排序的思路分析 2、建堆 2.1 向上调整建堆:O(N*logN) 2.1.1 向上调整代码 2.1.2 向上调整建堆代码 2.2 向下调整建堆:O(N) 2.2.1 向下调整代码 2.2.2 向下调整建堆代码 3、堆排序实现代码 4、堆排序测试 1、…

一文读懂Serverless,它到底有啥用?

各位ICT的小伙伴好呀。 Serverless是最近大家讨论很多的一个话题。 今天我们就来聊聊什么是Serverless? ▉ Serverless是个啥? Server:服务器,Serverless解决问题的产品。 less:更少,Serverless解决问题…

如何解决空指针异常

NPE异常相信 Java 程序员都很熟悉,是 NullPointerException 的缩写;最近业务需求开发的有点着急,测试环境就时不时的来个NPE异常,特别的头疼;作为出镜率最高的异常之一,一旦入行Java开发,可以说…

微服务网关、SpringBoot、Nginx、tomcat8配置跨域

微服务网关、SpringBoot、Nginx、tomcat8配置跨域 跨域是什么?为什么会跨域解决跨域微服务网关处理跨域springboot项目配置跨域nginx配置跨域tomcat8配置跨域 跨域是什么? 跨域是A端向B端发送请求,A端与B端的地址协议、域名、端口三者之间任意一个不同&#xff0c…

Tomcat的优化

Tomcat的优化 一、Tomcat 优化Tomcat 配置文件参数优化 二、系统内核优化三、Tomcat 配置 JVM 参数:参数含义 一、Tomcat 优化 Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它…

吴恩达联手OpenAI的免费课程笔记—面向开发人员的 ChatGPT 提示工程

目录 前言一、大语言模型介绍二、提示指南2-0、导入API key和相关的python库2-1、写清楚的、具体的提示2-1-1、使用分隔符清楚的指示输入的不同部分2-1-2、要求结构化的输出2-1-3、按照指定的条件输出2-1-4、少样本学习 2-2、给模型时间去思考2-2-1、指定完成任务所需要的具体步…

软件外包开发UI管理工具

软件在开发前需要设计UI界面,UI界面是产品经理和开发人员、测试人员之间的交流工具,因此项目中会有多人的工作涉及到的UI界面,这就需要有个好的工具协调相互之间的工作。今天和大家分享一些常用到的工具,希望对大家的工作有所帮助…

插件框架PF4J-从理论到实践

PF4J:Plugin Framework for Java 目录 是什么? 不是什么? 特点 组件 主要类 流程概述 spring-pf4j 思考 功能模块化 我对pf4j的封装和使用demo GitHub - chlInGithub/pf4jDemo: pf4j demo 是什么? 开源轻量级的插件框架。通过插件…

三相三线、三相四线、三相五线制区别

三相三线、三相四线、三相五线制区别 1、三相三线2、三相四线3、三相五线4、三相三线和三相四线的区别5、三相四线和三相五线的区别 1、三相三线 由A、B、C这3根相线俗称火线组成,没有布置零线N和接地线PE,这种布线方式常见于交流380V的上一级10KV的系统…

Maven安装教程

maven环境配置(点击此电脑右键属性): 点击高级系统设置,点击环境变量: 开始配置环境变量(点击系统变量,新建按钮): 新建系统变量:MAVEN_HOMED:\maven\apac…

vueX学习看这篇就够了

vuex就是为了实现全局状态管理 vuex有哪些东西? state【状态】getter【可以认为是 store 的计算属性,不会修改状态】mutation【唯一修改state的方法,不支持异步】action【不能直接修改state,通过触发mutation修改状态,支持异步】…

GPT聊天功能,逐字返回数据

目录 前言一、前端二、后端1.接收前端请求的api如下是继续向其他接口请求的api如下是直接返回前端数据的api甚至可以返回图片 2.模拟GPT的接口 前言 我们在和GPT交流的时候发现GPT总是逐字的显示,因为GPT是一种基于神经网络的自然语言处理模型,它的训练…

王道考研计算机网络第一章知识点汇总

以上内容为1.1概念与功能的重点知识点 以下为1.2组成与分类: P2P模式下每台主机既可以是客户也可以是服务器,主机越多资源分享速度越快。 1.3标准化工作及相关组织 1.4性能指标 带宽只是指的是从主机内部往传输链路上投送数据的最大能力(从入口端放入数…