Requests库的接口测试实现

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

一、Requests库环境搭建

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

  • 环境部署:pip install requests

Requests库的基本应用:

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

二、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)

查看结果:

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

相关推荐
努力的小帅4 分钟前
C++_STL_map与set
开发语言·数据结构·c++·学习·leetcode·刷题
yezipi耶不耶16 分钟前
Rust入门之高级Trait
开发语言·后端·rust
JZMSYYQ19 分钟前
磁光克尔效应在量子计算中的应用
功能测试·测试工具·制造
双叶83628 分钟前
(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)
c语言·开发语言·数据结构·c++·windows
言之。34 分钟前
Python3 简易DNS服务器实现
python·dns
为美好的生活献上中指35 分钟前
java每日精进 5.14【参数校验】
java·开发语言·spring boot·tomcat
正在走向自律35 分钟前
GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈
网络·人工智能·python·机器学习·性能优化·gpugeek
IT小郭.1 小时前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(一)
开发语言·后端·rust
qh0526wy2 小时前
金融接口基方法Python
windows·python·金融