Requests库的接口测试实现

Requests库是在接口测试中被广泛运用的库,包括模拟请求的下发,请求相关配置和响应结果的获取,核心主体都是通过request库完成。在接口测试中使用非常频繁。

一、Requests库环境搭建

接口测试的核心从模拟请求开始。在Python中,通过requests库实现请求的模拟。

  • 环境部署:pip install requests

Requests库的基本应用:

  • 1.模拟请求 定义url,定义header,定义body,定义请求相关数据内容
  • 2.管理cookie 可以实现cookie的创建,修改,发送
  • 3. 获取响应 所有响应相关内容都可以获取


  二、Requests库接口测试的基本实现

2.1 post方法源码解析

 有些接口是post方法进行测试之前,先看一下post请求的源码:

url : 就是要填写即将请求接口的url

param data : 填入的参数可以是元组,字典和文件等

param json : 会将数据传入body中进行发送

return :会返回一个response对象,所以需要有result 来进行接收


2.2 get方法源码解析

get方法和post 方法类似,最大的区别在于param 参数支持字典,元组这些类型,但是不支持文件。post方法中的body参数是支持文件类型的。


 

2.3接口测试的基本实现 

    接口测试就是三个步骤:
            1. 准备测试数据
            2. 模拟请求下发
            3. 解析响应,并校验

假如我们要对登录接口进行验证,接口提供了url,请求方式,请求参数以及响应结果:

 以下代码是对登录接口的简单测试:

import requestsurl = 'http://fecshop.appapi.fancyecoemmerce.com/v1/account/login'
#定义接口的url
#设置请求参数
data = {'username' : '123','password' : 'admin'
}
#2.进行请求的下发
res = requests.post(url = url,data = data)#发送一个post请求,返回response对象
#3.对响应结果进行解析和处理
print(res.text)#响应的文本信息

运行一下,可以得到接口定义的返回值:access-token、status、code。这里报错401主要是由于用户端传入参数有误。只需要修改对应参数即可。


2.4获取请求和响应信息 

Requests库默认调用HTTP1.1的版本,进行请求的下发,所以所有的请求方法都包含在内。

响应的 res 中返回的是一个respond对象,可以通过操作对象获取相关信息。

  • 获取文本信息 res.text     text表示响应的文本信息,str数据类型
  • 获取res的json格式 res.json    生成字典格式的json对象
  • 获取响应头res.headers     可以获取到set-cookie

 

  • 获取cookie信息res.cookies  ,得到RequestsCookiesJar对象,对应的信息在后面

通过遍历获取cookie,通过cookie.name 和cookie.value获取cookie对应的名称和值。 

cookies属性获取requestsCookieJar对象,要获取完整的cookie信息需要用循环来获取
 

print(res.cookies)  
for cookie in res.cookies:print(cookie.name)print(cookie.value)
  • 获取http状态码 res.status_code
  • 获取请求头 res.request.headers   获取请求头:当我们在调用接口的时候,如果接口对请求头有限制,则需要自行在请求之前,配置好请求headers                                                           

对于F12看到的请求是真实发送的请求,控制台输出的请求是代码模拟发送的请求。

通过代码发起请求和在浏览器发起请求,区别在于user-Agent:代表发送请求时的环境

类似于Webdriver 启动的浏览器是零缓存的浏览器,所以我们登陆操作的时候,需要进行验证码的操作。为了避免这种安全机制的产生,所以我们在selenium 中,我们要配置chrome options 加载缓存。

接口测试也有安全机制。直接用request 发送请求,会失败,因为检测到请求和在浏览器发起请求,区别在于user-Agent是不正常的用户。所以我们要设置headers ,将user-Agent改成正常的用户情况。

# 设置请求头参数:都是基于kv对
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 ''Safari/537.36'
}

 

2.5响应结果的断言

 想对响应结果做断言操作,需要先把结果拿出来。判断响应结果的关键内容是否符合预期。对接口的断言是断言,respond的body。

 接口测试的断言,只需要对响应结果或者是响应头进行断言处理即可。而且断言的时候,只需要考虑针对性的某一组数据内容即可

# 进行响应结果的断言
assert 200 == res.json()['code'], '登录失败'
assert 200 == res.status_code  
# 状态码断言只能做辅助手段。所以没有必要的情况下,可以不用写。

2.6接口关联

 比如我们想要验证获取多语言接口,但是需要传入的参数正好是登录接口响应结果得到的access-token,就会涉及到接口关联。

我们需要先获取登录接口的结果,得到access-token,将access-token设置到第二个接口的headers

中,就可以实现接口关联。

# 登录接口测试的基本实现
# 1. 模拟请求的数据内容
url = 'http://apihcc.fecmall.com/v1/account/login'  # 定义接口的url
# 设置请求参数
data = {'username': 'admin','password': 'admin123'
}
# 设置请求头参数:都是基于kv对
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 ''Safari/537.36'
}
# 2. 进行请求的下发,获取登录接口的响应结果
res = requests.post(url=url, json=data, headers=headers) #第二个接口获取请求头:当你在调用接口的时候,如果接口对请求头有限制,则需要自行在请求之前,配置好请求headers
res.request.headers
# 生成第二个接口的请求下发
url1 = 'http://apihcc.fecmall.com/v1/languages'headers = {'access-token': res.json()['access-token']
}r = requests.get(url=url1, headers=headers)
print(r.text)

查看结果:

 

接口测试的提前介入,可以很好的定位到后端接口之间的问题,提高整个开发效率。 

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

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

相关文章

15个等轴视图设计的电动车汽车无人机等PR剪辑素材视频制作元素

包含15个等轴视图、等距视角电动车、汽车、无人机、沙漏、飞机等PR剪辑素材视频制作元素mogrt动画模板。 特征: 等距设计; 可以更改颜色; 分辨率:全高清(19201080); 持续时间:15秒&a…

IDEA+Git——项目分支管理

IDEAGit——项目分支管理 1. 前言2. 基础知识点2.1. 分支区分2.2. Git 代码提交规范2.3. 四个工作区域2.4. 文件的四种状态2.5. 常用命令2.6 注重点 3. IDEA分支管理 1. 前言 在Git中,分支是项目的不同版本,当开始开发一个新项目时,主分支通常…

使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架

使用命令行方式搭建uni-app Vue3 Typescript Pinia Vite Tailwind CSS uv-ui开发脚手架 项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/uniapp-vue3-ts-scaffold 文章目录 使用命令行方式搭建uni-app Vue3 Typescript Pinia V…

【Python】不一样的Ansible(一)

不一样的Ansible——进阶学习 前言正文概念Ansible CorePlugins和Modules 插件插件类型编写自定义插件基本要求插件选项文档标准编写插件 添加一个本地插件注册为内置插件指定插件目录 其他一些技巧更改Strategy 结语 前言 Ansible 是一个极其简单的 IT 自动化引擎&#xff0c…

Windows下Redis5+可视化软件下载、安装和配置教程-2024年1月8日

Windows下Redis5下载、安装和配置教程-2024年1月8日 一、下载二、安装三、配置环境四、配置可视化客户端 一、下载 redis是现在是没有对win系统版进行维护的,这个是大神完成的,目前是到5版本,选择Redis-x64-5.0.14.1.zip点击下载 下载地址&…

pgAdmin和asdf postgres的安装

安装pgAdmin: curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key addsudo sh -c echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmi…

.NET 6中如何使用Redis

1、安装redis Redis在windows平台上不受官方支持,所以想要在window安装Redis就必须去下载windows提供的安装包。安装地址:https://github.com/tporadowski/redis/releases 2、在NueGet安装包 3、在appsettings.json文件里面添加Redis相关配置信息 &quo…

MySQL之子查询、连接查询(内外)以及分页查询

一、案例(接上一篇文章) 09)查询学过「张三」老师授课的同学的信息 -- 一共有两种方式 -- 第一种方式: SELECT s.*,c.cname,t.tname,sc.score FROMt_mysql_teacher t,t_mysql_course c,t_mysql_student s,t_mysql_score sc WHERE…

鸿蒙设备-开发板基础学习(BearPi-HM Micro)

theme: minimalism 每当学习一门新的编程语言或者上手一款新的开发板,在学习鸿蒙设备开发过程中,带大家写的第一个程序,通过这个程序,我们可以对鸿蒙设备开发的整个流程有一个初步的体验。BearPi-HM Micro开发板为例:…

「MCU」SD NAND芯片之国产新选择优秀

文章目录 前言 传统SD卡和可贴片SD卡 传统SD卡 可贴片SD卡 实际使用 总结 前言 随着目前时代的快速发展,即使是使用MCU的项目上也经常有大数据存储的需求。可以看到经常有小伙伴这样提问: 大家好,请问有没有SD卡芯片,可以…

MongoDB高级集群架构设计

两地三中心集群架构设计 容灾级别 RPO & RTO RPO(Recovery Point Objective):即数据恢复点目标,主要指的是业务系统所能容忍的数据丢失量。RTO(Recovery Time Objective):即恢复时间目标&…

C++学习笔记——string类和new函数

目录 string类 1.功能增强 1.1 子字符串提取 1.2 字符串拼接 1.3 大小写转换 1.4 字符串比较 2.性能优化 3.使用示例 下面是一个简单的使用示例,展示了如何使用改进后的String类: NEW函数 2.1NEW函数的基本用法 2.2NEW函数的注意事项 2.3避…

密码学:一文读懂非对称加密算法 DH、RSA

文章目录 前言非对称加密算法的由来非对称加密算法的家谱1.基于因子分解难题2.基于离散对数难题 密钥交换算法-DH密钥交换算法-DH的通信模型初始化DH算法密钥对甲方构建DH算法本地密钥乙方构建DH算法本地密钥DH算法加密消息传递 典型非对称加密算法-RSARSA的通信模型RSA特有的的…

建模软件Rhinoceros mac介绍说明

Rhinoceros mac是一款3D设计软件“犀牛”,在当今众多三维建模软件中,Rhinoceros 版因为其体积小、功能强大、对硬件要求低而广受欢迎,对于专业的3D设计人员来说它是一款不错的3D建模软件,Rhinoceros Mac中文版能轻易整合3DS MAX与…

Git命令+github仓库克隆

Git github Git常用命令 开始 git init #创建仓库 git status #查看仓库的状态 git status -s #简单的查看仓库的状态 git ls-files #查看暂存区的内容 git reflog #查看操作的历史记录 暂存区 git add git add <file&g…

网安入门11-文件上传(前后端绕过,变形马图片马)

Upload-Labs Upload-Labs是一个使用PHP语言编写、专注于文件上传漏洞的闯关式网络安全靶场。练习该靶场可以有效地了解并掌握文件上传漏洞的原理、利用方法和修复方案。 思考&#xff1a;他只让我传一个.jpg的图片&#xff0c;我想传一个.php的木马&#xff0c;两者什么区别 …

如何计算指标波动贡献率?(附Pandas实现)

大家好&#xff0c;我是阿粥 “为什么这个月销售额提升了30%&#xff1f;” “为什么转化率又降了&#xff0c;同比竟然降低了42%&#xff0c;什么原因导致的呢&#xff1f;” 这些都是数据分析师在工作中经常会遇到的问题&#xff0c;甚至有些基础岗的数据分析师要花80%以上的…

静态S5在项目管理中的应用与案例分享

静态S5作为一种强大的数据分析工具&#xff0c;不仅在数据处理和可视化方面表现出色&#xff0c;还在项目管理中发挥着重要作用。本篇将通过实际案例分享&#xff0c;探讨静态S5在项目管理中的应用与优势。 一、静态S5在项目管理中的应用 项目进度管理&#xff1a;静态S5通过…

软件测试|深入理解SQL CROSS JOIN:交叉连接

简介 在SQL查询中&#xff0c;CROSS JOIN是一种用于从两个或多个表中获取所有可能组合的连接方式。它不依赖于任何关联条件&#xff0c;而是返回两个表中的每一行与另一个表中的每一行的所有组合。CROSS JOIN可以用于生成笛卡尔积&#xff0c;它在某些情况下非常有用&#xff…

SpringBoot-自定义监听器

Spring Boot提供了强大的事件模型&#xff0c;其中包括多种内置监听器&#xff0c;同时也支持开发者自定义监听器。通过实现ApplicationListener接口&#xff0c;开发者可以创建自己的监听器&#xff0c;并在Spring Boot应用程序中进行配置。这样一来&#xff0c;在特定的应用程…