【五、接口自动化测试】5分钟掌握python + requests接口测试
你好啊!我是山茶,一个持续探索AI + 测试的程序员!
在做接口测试时,在python中内置了HTTP库 urllib,可以用于发送http请求。基于urllib二次封装的三方库Requests,相较于urllib更佳简介易用。所以,在接口自动化测试中通常使用Requests库对接口进行测试
Requests安装
因为Requests是第三方库,所以需要对其进行安装,通常安装使用pip命令安装即可
# 在终端命令行或python编辑工具pycharm的Terminal中输入以下指令即可
pip install requests
安装完成后,在编辑器中引入对应的库import requests
Requests常见请求类型
HTTP接口测试涉及到3个方面
-
请求方法:get、post、put、 delete、head ......
-
请求体:form、json、xml、 binary
-
响应结果:status code、 response body、 json path、 xpath
接口常见的请求方法及类型如下
#【如有问题,关注公众号:程序员山茶】留言r = requests.get('http://127.0.0.1:8080/shancha/test_one') #get请求
r = requests.post('http://127.0.0.1:8080/shancha/test_one', data = {'key':'value'})#post请求
r = requests.put('http://127.0.0.1:8080/shancha/test_one', data = {'key':'value'})
r = requests.delete('http://127.0.0.1:8080/shancha/test_one')
r = requests.head('http://127.0.0.1:8080/shancha/test_one')
r = requests.options('http://127.0.0.1:8080/shancha/test_one')#【如有问题,关注公众号:程序员山茶】留言
# 构造请求目标
import resquests
r = requests.get('http://127.0.0.1:8080/shancha/test_one')
print(r.status_code) # 响应结果为 200# 构造请求头
url = 'http://127.0.0.1:8080/shancha/test_one'
headers ={'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print(r.status_code) # 响应结果为 200# 构造请求cookie
url = 'http://127.0.0.1:8080/shancha/test_one'
cookies = dict(cookies_are='chengxuyuanshancha')
r = requests.get(url, cookies=cookies)
print(r.status_code) # 响应结果为 200
Requests请求体构造
请求体key:value 即键值对的形式存在,如query参数、form请求、binary请求(上传文件)以及json、xml、 json rpc等结构化请求
# form 和 Json 示例如下
#【如有问题,关注公众号:程序员山茶】留言# form请求
payload = {'key':'valuel','key2':'value2'}
r = requests.post("http://127.0.0.1:8080/shancha/test_one", data=payload)
print(r.status_code) # 响应结果为 200# JSON请求
url = 'http://127.0.0.1:8080/shancha/test_one'
payload = {'some': 'data'}
r = requests.post(url, json=payload)
print(r.status_code) # 响应结果为 200
Requests响应断言
在做测试时,结果判断是功能实现的重要依据之一。结果判断也可以称之为响应断言,即对请求动作结果返回的预期
-
响应的类型有多种
-
r.url:
-
r.status_code
-
r.headers
-
r.cookies
-
r.encoding
-
r.content
-
r.text
-
r.json()
-
以接口API为例
#【如有问题,关注公众号:程序员山茶】留言# 结构化响应断言方式
import requests
import jsonr = requests.get('https://api.github.com/repos/hiyongz/DjangoDemo')
json_data = r.json()
print(json.dumps(json_data, indent=4))
# 返回信息结果为
{"message": "API rate limit exceeded for 50.7.252.58. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
}
除了常用的Assert断言以外, 还有Hamcrest 断言、xml解析断言、schema断言、JSONPath断言等多种断言方式,断言也可以组合使用,在测试过程中要根据返回的结果数据选择适合的断言方法
接口测试示例
使用Springboot编写一个接口“/shancha/test_one”,且在web端也可以访问
@RestController
@RequestMapping("/shancha")
public class FirstController {@AutowiredFirstService firstService;@GetMapping("/test_one")public String showNlefer(){System.out.println("我是山茶,公众号:程序员山茶。有问题请公众号留言!");return "{\"name\":\"山茶\",\"公众号\":\"程序员山茶\"}";}}
web端访问结果
使用requests测试接口
import requestsdef requestsShanCha():r = requests.get('http://127.0.0.1:8080/shancha/test_one')assert r.status_code == 200print(r.status_code)print(r.headers)print(r.content)print("返回信息结果:"+r.text)if __name__ == '__main__':requestsShanCha()
响应结果如下所示,与web浏览器响应结果一致
以上,本文完,如果你觉着有用就点个“赞呗👍”
作者简介:
程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。
欢迎关注我, 和我一起探索AI+测试之路,终身成长
相关文章:

【五、接口自动化测试】5分钟掌握python + requests接口测试
你好啊!我是山茶,一个持续探索AI 测试的程序员! 在做接口测试时,在python中内置了HTTP库 urllib,可以用于发送http请求。基于urllib二次封装的三方库Requests,相较于urllib更佳简介易用。所以,…...
双边市场的基本理论
双边市场由两个不同类型的用户组成,通过一个中介机构或平台进行交易,其中一边用户的决策会影响另一边用户的结果。这种影响被称为间接网络外部性,它导致了平台在吸引和平衡两边用户时面临的挑战。 平台定价在双边市场中成为核心问题…...

R统计学2 - 数据分析入门问题21-40
往期R统计学文章: R统计学1 - 基础操作入门问题1-20 21. 如何对矩阵按行 (列) 作计算? 使用函数 apply() vec 1:20 # 转换为矩阵 mat matrix (vec , ncol4) # [,1] [,2] [,3] [,4] # [1,] 1 6 11 16 # [2,] 2 7 12 17 # [3,] …...

蓝桥杯2023年-买瓜(dfs,类型转换同样耗时)
题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。 小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…...

生成式人工智能服务安全基本要求实务解析
本文尝试明晰《基本要求》的出台背景与实践定位,梳理《基本要求》所涉的各类安全要求,以便为相关企业遵循执行《基本要求》提供抓手。 引言 自2022年初以来,我国陆续发布算法推荐、深度合成与生成式人工智能服务相关的规范文件,…...
nginx详解,配置http,https,负载均衡,反向代理,SMTP 代理步骤说明
Nginx 是一款高性能的开源 Web 服务器,同时也可以用作反向代理服务器、负载均衡器、HTTP 缓存、HTTPS 中继、以及作为邮件代理服务器等。以下是 Nginx 可以实现的一些常见用途: 静态内容服务: Nginx 可以用来提供静态内容,比如 HTML、CSS、JavaScript 文件等。 动态内容服务…...

ARTS Week 20
Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上,可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens,其中 queens[i] [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的…...
python如何读取文件
这里的文件是txt文件,office文件不支持。 假如有一个pi_digits的txt文件,里面的内容是“3.1415926” 如果要读取这个文件的内容,需要调取pathlib模块,并把路径告知python。同时python文件必须要和目标读取文件在一个文件夹里。 …...

InnoDB和MyISAM存储引擎
InnoDB mysql默认存储引擎 支持事务,行级锁(并发量大),外键约束,容量大,支持缓存,支撑主键自增, 全文检索,不存储表的总行数,需要sql逐行统计 MyISAM 不…...

DataGrip 2023:让数据库开发变得更简单、更高效 mac/win
JetBrains DataGrip 2023是一款功能强大的数据库IDE,专为数据库开发和管理而设计。通过DataGrip,您可以连接到各种关系型数据库管理系统(RDBMS),并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023软件获取 DataGrip 2…...
突破编程_C++_设计模式(命令模式)
1 命令模式的基本概念 C 命令模式是一种设计模式,它允许将请求封装为一个对象,从而可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的主要目的是将请求封装为对象,从而可…...

LeetCode102题:二叉树的层序遍历(python3)
代码思路:使用队列先进先出的特性,queue[]不为空进入for循环,tmp存储每层的节点,将结果添加至res[]中。 python中使用collections中的双端队列deque(),其popleft()方法可达到O(1)时间复杂度。 class Solution:def lev…...
linux服务器保存git账号密码命令
1.保存git账号密码 git config --global credential.helper store 2.查看git账号密码 cd回车 ls -a cat .git-credentials 步骤: 先输入 git config --global credential.helper store 然后进入代码目录,git pull 会提示输入git账号、密码,因为我们提前输…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)
摘要:开发用于田间杂草识别的系统对提高农业运营效率和提升作物产出至关重要。本篇文章详尽阐述了如何应用深度学习技术开发一个用于田间杂草识别的系统,并附上了完备的代码实现。该系统基于先进的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5…...
java Lambda表达式如何支持静态方法引用
java Lambda表达式如何支持静态方法引用 在Java中,Lambda表达式支持静态方法引用,允许你直接使用静态方法作为Lambda表达式的实现。静态方法引用使用类名和方法名来引用静态方法。 下面是一个简单的示例,展示了如何在Lambda表达式中使用静态…...

SpringMVC04、Controller 及 RestFul
4、Controller 及 RestFul 4.1、控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。控制器负责解析用户的请求并将其转换为一个模型。在Spring MVC中一个控制器类可以包含多个方法在Spring MVC中,对于Contr…...
【机器学习300问】33、决策树是如何进行特征选择的?
还记得我在【机器学习300问】的第28问里谈到的,看决策树的定义不就是if-else语句吗怎么被称为机器学习模型?其中最重要的两点就是决策树算法要能够自己回答下面两问题: 该选哪些特征 特征选择该选哪个阈值 阈值确定 今天这篇文章承接上文&…...

剑指offer C ++双栈实现队列
1. 基础 队列:先进先出,即插入数据在队尾进行,删除数据在队头进行; 栈:后进先出,即插入与删除数据均在栈顶进行。 2. 思路 两个栈实现一个队列的思想:用pushStack栈作为push数据的栈ÿ…...

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt
【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt 1. 模型权重准备2. 模型重新参数化2.1 文件准备2.2 参数修改2.3 重新参数化过程 3. 重新参数化后模型推理3.1 推理超参数配置3.2 模型推理及对比 4. onnx 模型导出(补充内容)4…...

Zookeeper搭建
目录 前言 初了解Zookeeper 搭建 准备 配置Zookeeper 前言 今天来介绍Zookeeper的搭建,其实Zookeeper的搭建很简单,但是为什么还要单独整一节呢,这就不得不先了解Zookeeper有什么功能了!而且现在很火的框架也离不开Zookeepe…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...

VASP软件在第一性原理计算中的应用-测试GO
VASP软件在第一性原理计算中的应用 VASP是由维也纳大学Hafner小组开发的一款功能强大的第一性原理计算软件,广泛应用于材料科学、凝聚态物理、化学和纳米技术等领域。 VASP的核心功能与应用 1. 电子结构计算 VASP最突出的功能是进行高精度的电子结构计算ÿ…...

【RabbitMQ】- Channel和Delivery Tag机制
在 RabbitMQ 的消费者代码中,Channel 和 tag 参数的存在是为了实现消息确认机制(Acknowledgment)和精细化的消息控制。 Channel 参数 作用 Channel 是 AMQP 协议的核心操作接口,通过它可以直接与 RabbitMQ 交互: 手…...