当前位置: 首页 > article >正文

【项目一】基于pytest的自动化测试框架———解读requests模块

解读python的requests模块

  • 什么是requests模块
  • 基础用法
  • GET与POST的区别
  • 数据传递格式
  • 会话管理与持久性连接
  • 处理相应结果
  • 应对HTTPS证书验证
  • 错误处理与异常捕获

这篇blog主要聚焦如何使用 Python 中的 requests 模块来实现接口自动化测试。下面我介绍一下 requests 的常用方法、数据传输方式以及应对实际项目中的常见问题。

什么是requests模块

requests 是 Python 中广泛使用的库,用于简化 HTTP 请求的发送和响应处理。
安装通过pip install requests

基础用法

  1. 发送post请求

在接口测试中,post请求经常用于发送数据。假设要测试一个登录接口,需要传递用户名和密码作为请求参数。

import requests

# 设置请求的 URL 和参数
url = 'http://127.0.0.1:8787/login'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'username': 'testuser', 'password': 'testpass'}

# 发起 POST 请求
response = requests.post(url, headers=headers, data=data)

# 查看响应状态码和内容
print(response.status_code)  # 200 表示请求成功
print(response.text)  # 返回服务器响应的文本内容
  1. GET请求与参数传递

GET请求常用于获取服务器资源,如获取商品列表。我们可以传递查询参数,服务器根据参数返回特定的数据。

url = 'http://127.0.0.1:8787/products'
params = {'category': 'electronics'}

response = requests.get(url, params=params)

# 输出返回的 JSON 数据
print(response.json())

GET与POST的区别

在实际项目中,选择post还是get取决于数据传递的需求:
get:用于从服务器获取数据,查询参数通过 url 传递,适用于获取资源。
post:用于提交数据到服务器,参数在请求体中,适用于数据提交或修改。

数据传递格式

  1. 表单提交与JSON数据

post请求的数据传输方式主要有两种:表单数据和json数据。

  • 表单提交
data = {'username': 'testuser', 'password': 'testpass'}
response = requests.post(url, data=data)
  • JSON提交:
json_data = {'username': 'testuser', 'password': 'testpass'}
response = requests.post(url, json=json_data)

不同的接口通常有特定的数据格式要求,测试时需依据接口文档确定数据传输方式。

会话管理与持久性连接

在一些需要多次请求的场景下,使用会话对象 Session 可以管理持久性连接,避免重复登录等繁琐操作。尤其是涉及用户登录、会话保持的场景,Session 的使用至关重要。

# 创建会话对象
session = requests.Session()

# 使用会话对象进行登录
login_url = 'http://127.0.0.1:8787/login'
session.post(login_url, data={'username': 'testuser', 'password': 'testpass'})

# 登录后,访问受保护的资源
protected_url = 'http://127.0.0.1:8787/protected'
response = session.get(protected_url)

print(response.text)

处理相应结果

除了接口的响应状态码,还需要处理接口返回的数据格式,requests支持多种返回格式:
文本类型:print(response.text)
解析JSON相应:print(response.json())
获取二进制内容,如图片或文件:print(response.content)

应对HTTPS证书验证

在测试HTTPS接口时,可能会遇到证书验证错误,可以通过一下方式禁用证书验证:

response = requests.get(url, verify=False)

错误处理与异常捕获

requests提供了强大的异常处理机制,在测试过程中可以捕获网络错误或者超时的问题

try:
    response = requests.get(url, timeout=5)
    response.raise_for_status()  # 检查请求是否成功
except requests.exceptions.HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except requests.exceptions.RequestException as err:
    print(f'Other error occurred: {err}')

http://www.kler.cn/news/310452.html

相关文章:

  • C# 修改项目类型 应用程序程序改类库
  • IOS 24 实现歌单详情(UITableView)列表
  • 下载Kafka 3.0.0教程
  • 基于Matlab的模拟答题卡识别阅卷可以识别指定答题卡的各个部分-界面
  • Day04_JVM实战
  • 开发定制:学校考试成绩自动处理,可定制规则
  • 2024桥梁科技两江论坛——第二届桥梁工程安全与韧性学术会议
  • laravel public 目录获取
  • 如何在 Fork 的 GitHub 项目中保留自己的修改并同步上游更新?github_fork_update
  • 如何使用麦肯锡方法解决软件的BUG和运维管理?
  • 基于微信小程序的游泳馆管理系统--论文源码调试讲解
  • SSL证书选择指南:免费 vs 付费
  • 【vue2】v-scale-screen大屏自适应组件
  • QCustomPlot笔记(一)
  • 2024年9月python二级易错题和难题大全(附详细解析)(二)
  • android 14.0 Launcher3长按拖拽时,获取当前是哪一屏,获取当前多少个应用图标
  • Hugging Face NLP课程学习记录 - 2. 使用 Hugging Face Transformers
  • Canvas简历编辑器-Monorepo+Rspack工程实践
  • 使用PaddleNLP调用大模型ChatGLM3-6b进行信息抽取
  • Oracle事物
  • 线性代数之QR分解和SVD分解
  • ShouldSniffAttr在自动化测试中具体是如何应用?
  • mysql事务的隔离级别学习
  • Selenium实现滑动滑块验证码验证!
  • 交换机最常用的网络变压器分为DIP和SM
  • 嵌入式单片机中数码管基本实现方法
  • ARM基础
  • C++ (进阶) ─── 多态
  • 力扣(LeetCode)每日一题 2848. 与车相交的点
  • 【智路】智路OS airos-edge