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 requests

url = '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)

查看结果:

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:数据处理与特征工程

机器学习中的数据处理和特征工程是非常关键的步骤,它们直接影响模型的性能和泛化能力。以下是一些常见的数据处理和特征工程技术: 数据处理: 缺失值处理: 处理数据中的缺失值,可以选择删除缺失值、填充均值/中位数/众…

HarmonyOS应用开发学习笔记 ArkTS 布局概述

一、布局概述 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中,需要遵守以下流程保证整体的布局效果 确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。 二…

HarmonyOS应用开发学习笔记 UIAbility组件间交互 UIAbility启动,页面跳转结果回调

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器:定义组件重用样式 Extend装饰器:定义扩展组件样式 5、HarmonyOS 应用开发…

(生物信息学)R语言绘图初-中-高级——3-10分文章必备——饼图(初级)

生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初-中-高级——3-10分文章必备,主要通过大量文献,总结3-10分文章中高频出现的各种图片,并给大家提供图片复现的R语言代码,及图片识读。 本专栏将向大家介绍…

你好,2024!再见,2023!

大家好,我是南城余! 今天是2023年最后一天,看到各位大佬都在分享今年的总结,我也来做个年度总结,是第一次做年度总结,希望以后可以每年都做一个好好的回顾。 说来可笑,标题,2023怎么…

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性 将skip属性注释掉或者改为false 如果为true,则工程找不到主启动类

Pytest插件pytest-cov:优雅管理测试覆盖率

在软件开发中,测试覆盖率是评估测试质量的关键指标之一。为了更方便地统计和管理测试覆盖率,Pytest插件"pytest-cov"应运而生。本文将介绍"pytest-cov"的基本用法和优雅管理测试覆盖率的方法。 什么是pytest-cov? pytest-cov 是Pyt…

zabbix-proxy代理安装及其他监控方式

zabbix-proxy代理安装及其他监控方式 安装zabbix-proxyserver端配置zabbix-proxy配置被监控的agent安装中问题解决监控网络设备JMX和IPMI监控方式 zabbix-proxy的安装,至少需要准备三台机器,一台安装服务端,一台安装agent端,这里就…

65寸OLED透明拼接屏,从这4个方面解读,让您秒懂

随着显示技术的不断进步,OLED透明拼接屏作为新一代的大屏显示解决方案,正逐渐受到市场的青睐。作为尼伽技术总监,我深知其对于高端显示市场的价值。下面,我将从技术的角度深入剖析这一产品。 一、规格与种类 65寸OLED透明拼接屏有…

Java学习笔记-day03-类名.this:内部类引用外部类实例

类名.this是啥意思? 今天在看尚硅谷的课程时里面讲了这么一句话: 集合在遍历时需要先创建一个容器,存放集合的数据,这样做浪费内存 想去验证下,就翻了翻ArrayList的迭代过程源码 在ArrayList的迭代器类Itr(…

在 PyCharm 中使用 Copilot

GitHub Copilot 由 OpenAI Codex 提供支持,可帮助用户在编辑器中实时工作。 它使用强大的 GPT-3 模型版本,该模型在大量开源代码上进行训练。 此外,GitHub Copilot 可在不同的 IDE(集成开发环境)上使用,包…

局域网IP地址冲突、环路的罪魁祸首是什么?

中午好,我的网工朋友。 这个时代,网络已经贯穿了人们的生活,对企业而言,办公信息化更是离不开网络支持。 为了提高安全管理和信息化水平,很多企业都建立了完善的办公信息系统,但一些企业在网络建设方面还…

【嵌入式】git工具基础命令学习笔记 | 嵌入式Linux

文章目录 前言一、git基础指令二、git分支管理2.1、一些基础命令2.2、时间回溯2.3、新建分支,删除分支,重命名分支 前言 参考:飞凌嵌入式ElfBoard ELF-1 软件学习手册 chatGPT 一、git基础指令 首先我们新建一个名叫git的文件夹&#xff0…

GreatSQL喊你来考证啦~

GreatSQL社区全网开放且全免费的GCA和GCP双等级考核认证,赶快来参与吧~ 认证课程介绍 GreatSQL社区开放GCA与GCP双等级认证课程,课程全面覆盖GreatSQL的安装、使用、优化、安全高可用等方面,包含构建主从和MGR架构,优化提升性能…

【动态代理详解】

文章目录 1. 关于代理1.1 代理的概述1.1.1 什么是动态代理1.1.2 动态代理能做什么 1.2 什么是代理1.2.1 生活中的代理1.2.2 为什么要找中介? 1.3 开发中的代理模式(代理)1.3.1 使用代理模式的作用 1.4 实现代理的方式 2. 静态代理2.1 什么是静…

百川智能发布角色大模型 ,零代码复刻角色轻松满足游戏领域定制需求

2024年1月9日,百川智能发布角色大模型Baichuan-NPC,深度优化了“角色知识”和“对话能力”,使模型能够更好的理解上下文对话语义,更加符合人物性格地进行对话和行动,让角色栩栩如生。此外,对于游戏领域AI角…

各版本 操作系统 对 .NET Framework 与 .NET Core 支持

有两种类型的受支持版本:长期支持 (LTS) 版本和标准期限支持 (STS) 版本。 所有版本的质量都是一样的。 唯一的区别是支持的时间长短。 LTS 版本可获得为期三年的免费支持和补丁。 STS 版本可获得 18 个月的免费支持和修补程序。 有关详细信息,请参阅 .N…

找不到文件Computer Management.lnk怎么办

win10系统右键“此电脑”,在右键菜单选择“管理”弹出错误提示: windows找不到文件Computer Management.lnk 打开电脑C盘路径C:\Windows\System32,找到compmgmt.msc文件 给compmgmt.msc文件创建一个快捷键选择文件compmgmt.msc,右…

联盛德-安全物联网芯片w800

联盛德-安全物联网芯片w800 前言一、w800简介?芯片外观 总结 前言 本文介绍w800的基本信息,详细规格,后续有时间会介绍如何适配openharmony的过程。 一、w800简介? W800 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC 芯片。支持 2.…

软件测试|Linux三剑客之sed命令详解

简介 sed(Stream Editor)是一款流式文本编辑器,在 Linux 和类 Unix 系统中广泛使用。它的设计目的是用于对文本进行处理和转换,可以用于替换、删除、插入、打印等操作。sed 命令通过逐行处理文本,允许您使用简单的命令…