当前位置: 首页 > news >正文

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

前言

在当今的互联网时代中,接口自动化测试越来越成为软件测试的重要组成部分。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== 编辑

相关文章:

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

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

华为OD机试真题 Java 实现【食堂供餐】【2023 B卷 考生抽中题】,附详细解题思路

一、题目描述 某公司员工食堂以盒饭的方式供餐。 为将员工取餐排队时间降为0,食堂的供餐速度必须要足够快。 现在需要根据以往员工取餐的统计信息,计算出一个刚好能达到排队时间为0的最低供餐速度。 即,食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求。 二、…...

一分钟学一个 Linux 命令 - cd

前言 大家好,我是 god23bin。欢迎来到这个系列,每天只需一分钟,记住一个 Linux 命令不成问题。今天让我们从 cd 命令开始,掌握在 Linux 系统中切换目录的技巧。 什么是 cd 命令? cd 命令来自这么一个词语&#xff0…...

vi(vim)常用命令汇总

vim ~/.vimrc vim.vimrc 配置 set nobackup set cursorline #当前行 set cc100 #分屏线 set number set laststatus2 syntax on colorscheme delek 快速移动光标 w(e) 移动光标到下一个单词 b 移动光标到上一个单词 0 移动光标到本行最开头 ^ 移动光标到本行最开头的字符…...

模特信息管理系统的开发与实现(ASP.NET,SQLServer)

需求分析 模特信息管理系统主要给商家和模特用户提供服务,系统分为前台和后台两部分。 本研究课题重点主要包括:活动管理,商家管理,模特管理,系统公告管理和活动报名管理。 活动管理模块主要实现活动更新、活动添加、活…...

文件上传漏洞

<1>概述 漏洞产生原因&#xff1a;服务端代码未对客户端上传的文件进行严格的验证和过滤&#xff0c;就容易造成可以上传任意文件的情况。 <2>文件上传绕过 (1)js检测绕过 1.删除js中检测文件的代码&#xff1b; 2.上传的文件改为允许的后缀绕过js检测后再抓包…...

前端还是后端,该怎么选择

在计算机科学领域&#xff0c;前端和后端是两个常见的方向&#xff0c;它们各自拥有独特的特点和职责。本文将对前端和后端进行比较&#xff0c;并总结哪些人适合前端&#xff0c;哪些人适合后端。 一、前端 前端开发主要涉及构建用户界面&#xff0c;处理用户交互和用户体验…...

【Python】Python系列教程-- Python3 循环语句(十七)

文章目录 前言while 循环无限循环while 循环使用 else 语句简单语句组for 语句for...elserange() 函数break 和 continue 语句及循环中的 else 子句pass 语句 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&#xff08;一&#xff09;Python系列教程–Python3 环境…...

chatgpt赋能python:Python如何变为列表

Python如何变为列表 Python是一种高级编程语言&#xff0c;用于快速、轻松地编写软件。它的语法简洁、易于学习&#xff0c;可以用于各种领域&#xff0c;包括Web开发、机器学习和数据科学等。其中&#xff0c;列表是Python的一种基本数据类型&#xff0c;它用于存储一系列相关…...

高频面试八股文用法篇(二) hive中几种排序类型区别

目录 排序函数 1、order by 2、sort by 3、distribute by 4、cluster by 总结 排序类型 1、order by order by是与关系型数据库的用法是一样的。select * from emp order by empno desc; 针对全局数据进行排序&#xff0c;所以最终只会有1个reduce&#xff0c;因…...

linuxOPS基础_linux umask

1、什么是umask umask表示创建文件时的默认权限&#xff08;即创建文件时不需要设置而天生的权限&#xff09; 例如&#xff1a; root用户下&#xff0c;touch a &#xff0c;文件a的默认权限是644 普通用户下&#xff0c;touch b &#xff0c;文件b的默认权限是664 644和…...

K8s基础核心

Kubernetes (K8s) 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。下面是 Kubernetes 的一些核心概念&#xff1a; Pod&#xff08;容器组&#xff09;&#xff1a;Pod 是 Kubernetes 中最小的可调度和管理的单元 &#xff0c;它可以包含一个或多个相关的容器。这…...

Web开发中的图片管理:策略与实践

前言 在Web开发中&#xff0c;图像是无法忽视的重要组成部分。然而&#xff0c;随着图片数量的增加和高清图像的普及&#xff0c;图片管理变得越来越复杂。在这篇文章中&#xff0c;我们将详细探讨Web开发中的图片管理策略和实践&#xff0c;包括图片优化、存储、分发和加载策…...

SNK施努卡 - 机器视食品检测 食品中视觉检查的作用是什么?

随着工业4.0时代的到来&#xff0c;机器视觉在工业领域的应用场景越来越广泛。在食品工业领域中&#xff0c;机器视觉的应用大大提高了食品生产企业的生产效率&#xff0c;有效的保证了产品品质的水准。 在智能工厂中&#xff0c;机器视觉系统能够实时监控生产工况。机器视觉系…...

【七】设计模式~~~结构型模式~~~桥接模式(Java)

【学习难度&#xff1a;★★★☆☆&#xff0c;使用频率&#xff1a;★★★☆☆】 2.1. 模式动机 在正式介绍桥接模式之前&#xff0c;我先跟大家谈谈两种常见文具的区别&#xff0c;它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔&#xff0c;能够绘制12种不同的颜色&am…...

Python 教程:使用 pandas 和 glob 库合并多个 Excel 文件

引言 Microsoft Excel 是一种常见的电子表格软件,可用于在表格中存储和处理数据。在某些情况下,您可能需要将多个 Excel 文件合并成单个文件,以方便数据处理和分析。 Python 是一种非常流行的编程语言,具有广泛应用和丰富的库,用于处理数据和文本文件。在本文中,我们将使…...

16. Vue-element-template记住密码

Vue-element-template 记住密码 1. 在登录页面添加记住密码按钮 新增参数 rememberMe # resources/src/views/login/index.vueloginForm: {username: admin,password: 123456,rememberMe: false},添加复选框 # resources/src/views/login/index.vue<div style"margin-…...

Python文件打包成exe文件

文章目录 背景安装pyinstaller开始打包总结 背景 今天因为在线将pdf转为word被收费了&#xff0c;有点不爽&#xff0c;所以自己动手撸一个pdf转word的小工具&#xff0c;想着打包成exe给朋友使用&#xff0c;万一哪天会用到呢&#xff1f; 安装pyinstaller 打开cmd命令窗口…...

【简单实用框架】【十大排序算法直接调用】【可移植】

☀️博客主页&#xff1a;CSDN博客主页&#x1f4a8;本文由 萌萌的小木屋 原创&#xff0c;首发于 CSDN&#x1f4a2;&#x1f525;学习专栏推荐&#xff1a;面试汇总❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&#…...

微服务架构之RPC调用

在单体应用时&#xff0c;一次服务调用发生在同一台机器上的同一个进程内部&#xff0c;也就是说调用发生在本机内部&#xff0c;因此也被叫作本地方法调用。在进行服务化拆分之后&#xff0c;服务提供者和服务消费者运行在两台不同物理机上的不同进程内&#xff0c;它们之间的…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...