Python 接口测试之 requests 库核心用法

文章目录

一、安装

通过pip工具在命令行进行安装,建议使用指定版本避免使用差异,安装命令:

复制代码
pip install requests

安装后可通过pip list命令检查当前项目下requests包的版本是否安装成功。

二、介绍

requests库是一个非常流行的HTTP客户端库,主要用于发送HTTP请求,其中requests.get方法专门用于发送HTTP get请求到指定的URL。

requests.get方法会返回一个Response对象,该对象包含了服务器返回的所有信息,其提供的常用属性/方法及描述如下:

属性/方法 描述
r.status_code 响应状态码
r.content 字节方式的响应体,会自动解码gzip和deflate压缩
r.headers 以字典对象存储服务器响应头,若键不存在则返回None
r.json() Requests中内置的JSON解析方法,将响应体解析为JSON格式
r.url 获取实际请求的URL
r.encoding 编码格式,根据响应头部的字符编码确定
r.cookies 获取服务器设置的cookies
r.raw 返回原始响应体,不进行任何处理
r.text 字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.raise_for_status() 失败请求(非200响应)抛出异常

三、常见请求方法

requests库支持多种HTTP请求方法,核心常用方法为get、post,也可通过通用的request方法指定请求类型,核心方法定义及使用示例如下:

方法定义

python 复制代码
# 发起get请求
def get(url, params=None, **kwargs)

# 发起post请求
def post(url, data=None, json=None, **kwargs)

# 支持不同请求方式,method指定请求方法(get/OPTIONS/HEAD/post/PUT/PATCH/DELETE)
def request(method, url, **kwargs)

使用示例

python 复制代码
import requests
# 直接调用get/post
get_r = requests.get("https://www.baidu.com")
post_r = requests.post("https://www.baidu.com")
# 通过request方法指定请求类型
req_r1 = requests.request(method="get", url="https://www.baidu.com")
req_r2 = requests.request(method="post", url="https://www.baidu.com")

# 打印响应状态码
print("get:", get_r.status_code)
print("post:", post_r.status_code)
print("method_get:", req_r1.status_code)
print("method_post:", req_r2.status_code)

四、添加请求信息

get()、post()底层均调用request()方法,因此三个方法发送请求时传参无太大区别,可传递的核心参数及描述如下:

参数名 描述
url 请求的接口
headers 一个字典,包含要发送的HTTP头
cookies 一个字典、列表或者RequestsCookieJar 对象,包含要发送的cookies
files 一个字典,包含要上传的文件
data 一个字典、列表或者字节串,包含要发送的请求体数据
json 一个字典,将被转换为JSON格式并发送
params 一个字典、列表或者字节串,将作为查询字符串附加到URL上
auth 一个元组,包含用户名和密码,用于HTTP认证
timeout 一个浮点数或元组,指定请求的超时时间
proxies 一个字典,包含代理服务器的信息
verify 一个布尔值或字符串,指定是否验证SSL证书

实际使用示例

示例1:博客详情接口(带params、headers)
python 复制代码
url = "http://84.153.19.140:9090/blog/getBlogDetail"
# 定义查询参数
params = {
    "blogId":9773
}
# 定义请求头信息
header = {
    "user_token_header":"eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOiJ6aGFuZ3NhbiIsImV4cCI6MTczNTU1ODk2Mn0.72oh-gQ-5E6_aIcLsjotWL4ZHmgy0jF1794JDE-uUkg",
    "x-requested-with":"XMLHttpRequest"
}
r = requests.post(url=url, params=params, headers=header)
print(r.json())
示例2:博客登录接口(带data)
python 复制代码
url = "http://84.153.19.140:9090/user/login"
# 定义要发送的表单数据
data = {
    "username":"zhangsan",
    "password": "123456"
}
r = requests.post(url=url, data=data)
print(r.json())
示例3:博客园接口(带cookies、headers)
python 复制代码
def test_01():
    url = "https://account.cnblogs.com/user/userinfo"
    # 定义请求头信息
    header = {
        "Accept":"application/json, text/javascript, */*; q=0.01"
    }
    # 定义cookie信息
    cookie = {
        ".Cnblogs.AspNetCore.Cookies":"CfDJ8DfB03_iObVLoqH7ndAeeDgVJetjhlYbwnntg9Uy7_bcLryJ_RIEtfbgLsOt7uinPvbNd-pBCrZ_PSO5PvJVIw1lWKGW_BmqUG4pK2jDjEGKO8vaJdJ74bQWmCZW5U5wMaUO6QMrJFftQN8k31pgTbuD4X4lX-9kWMqGkzXkGkNb8C8hU_MyCqe9ZqjSDDSoPp4lFXTZ_MgBMGJLMzyw61Otnrrp2BXpw9oGbK14Q5ibK4_cAAL0cOPN1hYq1tDjbUs_CoDAyJanjddoezpNU6KQTchSOAmfFCbcuTLrDBlrHYHgnP75YE8pb4-AsJuaNrN74fBlYhJ_BQHKmvs_GJmj1L1seks5C32Lx7it67uq9be_7oDyj6ZLvTnZdryWXlucNb7EPE27P1-djOPq8MY15hSNVjO86Gcn8kDBbfyCee8Yi3exGOr026dRtPLSVjPdSbKV0st6X-d8so1oVJlKH2amdiX1Pofe7h_Yf6S-eVG_pnL6_frtvpCNbpVgApxB5Wm1yyy0UXLy31U-mVSuo5RJN6BQr4DXQ7umCz-yfpFjnZSUiuskBcwG83N3ww"
    }
    r = requests.post(url=url, headers=header, cookies=cookie)
    print(r.json())
  • 关键参数选择:params、json、data区别
  1. params:用于在URL中传递查询参数(Query Parameters),通常用于GET请求,也可用于其他类型请求;
  2. json :用于在请求体(Body)中传递JSON格式的数据,通常用于POST/PUT请求,使用时Content-Type会自动设置为application/json
  3. data:用于在请求体(Body)中传递表单数据,通常用于POST/PUT请求。

五、模块核心作用

requests库专注于HTTP请求的发送,能够便捷地构造各类HTTP请求、传递请求参数、获取服务端响应数据,是Python实现接口测试的核心基础库。

在接口自动化测试中,requests库负责底层的请求发送工作,而测试用例的组织、执行、管理则需要结合pytest等测试框架来实现。

相关推荐
E_ICEBLUE2 小时前
Excel 删除空白行的 5 种方法 【手动管理与 Python 自动化】
python·自动化·excel
飞Link2 小时前
概率图模型的基石:隐马可夫模型 (HMM) 深度解析
开发语言·python·算法
Sagittarius_A*2 小时前
小波变换:多分辨率分析与图像小波去噪 / 增强 / 融合【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉·小波变换
creaDelight2 小时前
编写你的第一个 Django 应用(官网demo)
python·django·sqlite
喵手2 小时前
Python 爬虫实战:利用 Playwright 攻克 Canva 动态设计模板库
爬虫·python·爬虫实战·playwright·canva·零基础python爬虫教学·搭建动态设计模版库
进击的小头2 小时前
第4篇:二阶系统的时域响应分析
python·算法
赵谨言2 小时前
基于YOLOv5的火灾检测研究是当前计算机视觉和消防安全领域的重要研究方向
大数据·开发语言·经验分享·python
ZhengEnCi2 小时前
P1C-Python变量和数据类型详解
python
chushiyunen2 小时前
django venv虚拟环境
后端·python·django