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

news/2024/9/19 0:45:03/ 标签: pytest, 计算机网络, python

解读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.ppmy.cn/news/1525746.html

相关文章

【LabVIEW学习篇 - 24】:生产者/消费者设计模式

文章目录 生产者/消费者设计模式案例:控制LED等亮灭 生产者/消费者设计模式 生产者/消费者是多线程编程中最基本的一种模式,使用非常普遍。从软件角度看,生产者就是数据的提供方,而消费者就是数据的消费处理方,二者之…

C# 开发教程-中级教程

1.C# 多线程/异步 C# 异步编程Task整理(一) C# 异步编程Task整理(二)异常捕捉 C# 异步编程Task(三) async、await C#中创建线程,创建带参数的线程 C# 线程同步之排它锁/Monitor监视器类 C# lock关键词/lock语句块…

智能语音技术在人机交互中的应用与发展

摘要:本文主要探讨智能自动语音识别技术与语音合成技术在构建智能口语系统方面的作用。这两项技术实现了人机语音通信,建立起能听能说的智能口语系统。同时,引入开源 AI 智能名片小程序,分析其在智能语音技术应用场景下的意义与发…

具有成长性的数据飞轮将会替代数据中台

上图就是Gartner最新发布的“中国数据分析和人工智能技术成熟度曲线图”,图中我标注出来的就是数据中台,可以看到数据中台确实是在走下坡路,究其原因我认为是现在大环境导致,目前整个大环境是处于经济下行的情况,所以很…

html+css网页制作 旅游 厦门旅游网3个页面

htmlcss网页制作 旅游 厦门旅游网3个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

el-table 如何实现行列转置?

在某些需求里需要用到 行列转置 的表格,但 el-table 提供的基本表格是不支持行列转置的,这样就需要对这个表格进行二次开发。下面来看具体实现的效果: 具体实现方式 基本原理就是对原有的可渲染的数据结构进行处理,表头与表格数…

XMOJ3376 结界

很憨憨的题,想复杂了,是这场比赛四道题中难度第二的,可却是我唯一没做出来的题,挡了我的AK路。(发怒)(难得过一次最难题) 题目大意 有一个环,第 i i i 个位置上有 a …

UQpy | 不确定性量化Python工具箱推荐

UQpy, "Uncertainty Quantification with Python,"是一个通用的 Python 工具箱,用于对物理和数学系统模拟中的不确定性进行建模。该代码被组织为一组以不确定性量化(UQ)的核心功能为中心的模块,如下所示。这些模块各不相…

ai 回答HFS是什么 HTTP的文件服务器是什么

HFS(HTTP File Server)是一个基于HTTP协议的文件服务器软件,它允许用户通过浏览器访问和共享计算机上的文件。HFS的特点包括界面简洁直观、易于安装和配置、支持虚拟文件系统、多种权限设置等。用户可以轻松地在本地网络或互联网上共享文件和…

【STM32 Blue Pill编程】-定时器PWM模式

定时器PWM模式 文章目录 定时器PWM模式1、定时器PWM模式介绍2、硬件准备及接线3、模块配置4、代码实现在文中,我们将介绍如何使用 STM32 Blue Pill 定时器的PWM模式以及如何配置它们以生成具有不同占空比和频率的信号。 我们将使用 LED调光器示例来演示如何使用 STM32Cube IDE…

贪吃蛇项目实现(C语言)——附源码

前言 贪吃蛇是一款十分经典的游戏,其通过控制贪吃蛇的上下左右移动来吃食物,延长自己的身体,也会因为撞到墙体和自身而死亡。下面我们通过C语言来实现贪吃蛇。 1.技术要点 C语言枚举,结构体,链表,动态内…

Flutter动画—雷达扫描效果

前言 我们现在要用Flutter做一个雷达扫描的动画,如下图所示 需求分析 需要在画布上画出三个同心圆和一个十字创建一个固定角度的圆弧圆弧做渐变色让圆弧动起来封装组件,将圆弧角度、圆弧颜色、几个同心圆与十字颜色 实现步骤 1.创建一3个同心圆与十字 class Ri…

汽车免拆诊断案例 | 沃尔沃V40 1.9TD断续工作

故障现象 一辆04款的沃尔沃V40 1.9 TD,发动机代码D4192T3,使用博世EDC15C发动机管理。客户说车子断续工作,怀疑是正时皮带出现问题。卸下上皮带盖,检查发现皮带仍然在原来的位置上并且没有出现松动。起动发动机,车辆能…

音视频入门基础:AAC专题(3)——AAC的ADTS格式简介

一、引言 AAC(Advanced Audio Coding)有两种格式: 1.ADIF(Audio Data Interchange Format,音频数据交换格式):整个流中只包含一个Header(文件头),不能在任意…

TiDB 数据库核心原理与架构_Lesson 01 TiDB 数据库架构概述课程整理

作者: 尚雷5580 原文来源: https://tidb.net/blog/beeb9eaf 注:本文基于 TiDB 官网 董菲老师 《TiDB 数据库核心原理与架构(101) 》系列教程之 《Lesson 01 TiDB 数据库架构概述》内容进行整理和补充。 课程链接:…

python中比较两ip地址大小 简单好用的方法

核心代码如下 import ipaddressdef compare_ips(ip1_str, ip2_str):try:# 将字符串转换为IP地址对象ip1 ipaddress.ip_address(ip1_str)ip2 ipaddress.ip_address(ip2_str)# 比较IP地址if ip1 < ip2:print("ip1_str 小于 ip2_str")elif ip1 > ip2:print(&qu…

红外图像处理算法详解:从基础到应用

红外图像处理算法在现代科技中占据着举足轻重的地位。无论是在军事、安防,还是在医学、工业检测中,红外成像都发挥着不可或缺的作用。本文将从红外图像的特点入手,深入探讨其处理算法及在不同场景中的应用。 1. 什么是红外图像? 红外图像不同于可见光图像,它记录的是物体…

Spring的核心思想

目录 一、Spring要解决的问题 二、Spring的核心结构 三、核心思想 3.1.1 什么是IOC 3.1.2 IOC解决的问题&#xff1a;耦合 3.1.3 IOC和DI的区别 3.2.1 什么是AOP 3.2.2 AOP解决的问题&#xff1a;耦合 3.2.3 为什么叫做面向切面编程 一、Spring要解决的问题 问题1&am…

『功能项目』战士的位移型技能【46】

我们打开上一篇45战士的伤害型技能的项目&#xff0c; 本章要做的事情是制作技能按钮&#xff0c;点鼠标点击时释放如果20米内存在敌人会移动到敌人身边&#xff08;对多个敌人逻辑暂未写&#xff09;并对怪物造成一定伤害 首先对战士职业的动画控制器增加一个新的技能2动画 设…

JavaWeb【day14】--(SpingBoot原理)

SpingBoot原理 在前面十多天的课程当中&#xff0c;我们学习的都是web开发的技术使用&#xff0c;都是面向应用层面的&#xff0c;我们学会了怎么样去用。而我们今天所要学习的是web后端开发的最后一个篇章springboot原理篇&#xff0c;主要偏向于底层原理。 我们今天的课程安…