python使用requests+excel进行接口自动化测试

news2024/12/21 16:39:51

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

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

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

免费获取方式 :

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

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

相关文章

LInux之find查找

目录 LInux之find查找 定义 详解 格式 参数及作用 详解 1.按照文件名搜索 2.按照文件大小搜索 3.按照修改时间搜索 4.按照权限搜索 5.按照所有者和所属组搜索 6.按照文件类型搜索 7.逻辑运算符 8.其他选项 -exec参数 获取到该目录中所有以host开头的文件列表 如在…

【测试入门】测试用例经典设计方法 —— 因果图法

01、因果图设计测试用例的步骤 1、分析需求 阅读需求文档,如果User Case很复杂,尽量将它分解成若干个简单的部分。这样做的好处是,不必在一次处理过程中考虑所有的原因。没有固定的流程说明究竟分解到何种程度才算简单,需要测试…

3D打印机分类汇总

1 根据市场定位分类 当今市面上应用比较多的3D打印机是SLS、SLA、DLP、FDM四种3D打印机,按照用途可分为两类:一类是高精度工业打印机,比如SLA、DLP、SLS;一类是以FDM、SLA(用于工业打印机更多)为主的桌面级…

NRF52832空中升级DFU

1.工具环境搭建 gcc-arm-none-eabi编译环境:GCC编译环境 Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer mingw 平台(win版的Linux命令行) Download MinGW - Minimalist GNU for Windows micro-ecc-master源码 GitHu…

永不磨灭的设计模式(23种设计模式全集)

永不磨灭的设计模式 概述七大基本原则23种设计模式1、单例模式2、工厂(方法)模式3、抽象工厂模式4、原型模式5、建造者模式6、适配器模式7、桥接模式8、组合模式9、装饰器模式10、外观模式11、享元模式12、代理模式13、责任链模式14、命令模式15、迭代器模式16、中介者模式17、…

tinkerCAD案例:3.基本按钮

基本按钮 在本课中,您将学习制作具有圆柱形状的基本按钮。 说明 将圆柱体拖动到工作平面。 将其缩小到 2 毫米的高度。 提示: 您可以使用圆柱形状顶部的白点缩小圆柱体。 将其缩小到直径 16 毫米。 这将是按钮的主要形状。 现在我们可以创建允许将纽…

CSS动画:多动画同步播放或非同步播放

前言 本篇在讲什么 在CSS样式表现动画的基础上的拓展 本篇适合什么 适合初学H5的小白 适合初学CSS的小白 适合入门的前端程序 本篇需要什么 对Html和css语法有简单认知 Node.js(博主v18.13.0)的开发环境 Npm(博主v8.19.3)的开发环境 依赖VS code编辑器 本篇的特色…

impala内存超限

目录 一、背景 二、报错内容 三、解决办法 1.调参 2.简单粗暴 一、背景 impala shell执行SQL语句时报错 二、报错内容 Memory limit exceeded: Could not allocate memory while trying to increase reservation. 三、解决办法 1.调参 mem_limit参数:&…

ciscn 2023 初赛 pwn shell we go

ciscn 2023 初赛 pwn shell we go 这题go pwn,符号恢复就恢复很长时间了,网上的插件好多都没用 根着流程,可以看到这里有一个验证,以空格来分割,第一个参数会验证是否为nAcDsMicN 如果第一个参数验证通过&#xff0c…

Centos7 开启图形化界面 Linux安装VNC

环境: Centos7 windows连接:下载VNC Viewer 目录 VNC概述 VNC原理 一、检查是否安装过VNC 二、安装图形化界面 三、安装和配置VNC服务 四: 启动VNC及常用命令 五: VNC windos连接工具连接 VNC概述 VNC (Virtual Network Computing)是虚拟网络计算机的缩写…

如何零基础自学网络安全?

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解…

性能优化记录

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~ 前言 最近零零散散的对刚接手的一个新项目做了一些优化,白屏、打包相关的内容都涉及到了,写一篇文章来记录一下。 白屏相关 DNS…

chatgpt赋能python:Python同一行语句之间的分隔

Python同一行语句之间的分隔 在Python中,同一行内的语句通常使用分号 ‘;’ 分隔开来。分号作为语句之间的分隔符,可以使我们在同一行内写多条语句,从而减少代码行数,提高代码可读性和可维护性。 分隔符和代码风格 在使用分号进…

[C++]基本知识与概念

C基础知识与概念 C与C基础C面向对象C STLC 内存管理C11新特性C linux编程I/O多路复用 前言 本文章适用于有一定C基础的新手同学快速掌握一些C的基本知识概念以及面试中可能会问的内容,如果你没有相应的基础学习又因为这篇文章缺少代码讲解所以可能会影响你的学习效率…

Mysql安装教程(windows)

本文主要讲解如何去安装使用Mysql 一、下载Mysql 1、官网在线下载 MySQL官网:https://www.mysql.com/downloads/ 下载版本:MySQL Installer for Window 2、云盘离线下载 https://pan.baidu.com/s/1dB7kFiwrKpF5W-5XPn2FeQ?pwdrvb9 提取码:…

【图像任务】Transformer系列.2

两篇改进Transformer结构的论文:MAN(arXiv2022),ScalableViT(ECCV2022). Multi-Scale Attention Network for Single Image Super-Resolution, arXiv2022 解读:【ARIXV2209】Multi-Scale Atten…

Java课程设计-学生管理系统《控制台版本》

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

JavaEE(系列20) -- 网络编程之UDP和TCP套接字

目录 1. 网络编程 2. UDP网络编程 2.1 DatagramSocket API 2.2 DatagramPacket API 2.3 基于UDP实现的回显服务器 2.3.1 UDP服务器设计步骤 2.3.2 服务器代码 2.3.3 客户端代码 2.3.4 基于UDP写一个字典服务器 3. TCP网络编程 3.1 ServerSocketAPI 3.2 SocketAPI …

如何不出国一年内拿到加拿大女王大学金融硕士学位证书?

作为加拿大最好的公立大学之一,QueensUniversity位于安大略省的金斯顿市。最近,它在QS全球大学排名中跻身第209位,同时在加拿大的综合排名中名列第7位。这表明女王大学在学术研究和教育方面都有着出色的表现。Queens University坐落于安大略省…

分布式光伏发电远程监控系统

分布式光伏发电远程监控系统 项目背景 新能源、可再生能源接入电网是智能电网建设的重要组成,也是能源互联网发展的基础。近年来,太阳能光伏发电技术快速发展,光伏发电并网对配电网的影响也不断加深。电网调度人员需要人工参与光伏发电站的发…