request发送http请求
今天正式开始为大家介绍接口自动化,相信很多做测试的朋友,都用过一些工具,比如jmeter,loadrunner,postman等等,所以今天先给那些基础不太好的同学,先讲讲postman如何来测接口以及如何用pthon代码的方式来发送http请求
首先,我们在做接口测试之前,一般会拿到开发人员那边的接口文档,没有接口文档是很难快速高效率的去进行测试工作的这部分接口测试,所以,得提前准备好或者拿到一份接口测试
接下来,小编我以注册和登录为例,附上截图给大家看看,请提前下载安装好postman工具
一、postman的基本使用

请求头信息截图如下:

如果你不想一个一个的手动写,可以有一种简单的方法,


看,自动生成了

这里有几个注意点要说明:
1.一定结合开发人员给你的接口文档结合起来进行
2.请求头,有的没有,有的有,看接口文档
二、requests发送http请求
这里有的问题会问,做接口测试,只能用工具吗?可不可以写代码的方式来做接口测试?当然可以,python代码还是很强大的
在写代码前,先安装requests插件,安装命令:pip install requests

然后,继续看下面的内容,以登录接口为例:
import requests # 登录的接口地址 url = "http://api.lemonban.com/futureloan/member/login" # 登录的参数 params = { "mobile_phone": "15879563287", "pwd": "lemonban" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2", } # 发送一个登录的请求 # 请求类型为Content-Type:application/json,参数就应该使用json去传递 response = requests.post(url=url, json=params, headers=headers) print(response) # 200,请求成功 # 获取接口返回的数据 print(response.text)

三、requests处理各种请求类型的参数
常见的接口请求参数类型:
1、查询字符串参数:
常用于get请求(其他的请求方法用的少),参数会直接拼接在url地址后面
requests发送请求,传递查询字符串参数,要使用params去传递 params=params
2、json类型的参数:
请求参数类型为 Content-Type:application/json,
requests发送请求,传递json参数,就应该使用json去传递 json=params
3、表单类型的参数
请求参数类型:content-type: application/x-www-form-urlencoded
requests发送请求,传递表单参数,就应该使用data去传递 data=params
4、文件上传:
请求参数类型:content-type: multipart/form-data
文件参数要使用files进行传递
文件参数的组装:
{"参数名": ("文件名", open以rb模式打开文件, "文件类型")}
[("参数名", ("文件名", open以rb模式打开文件, "文件类型"))]
import requests # --------------------查询字符串参数传递----------------------------- # 查询字符串参数的传递: url = "http://api.lemonban.com/futureloan/loans" # 请求参数 params = { "pageIndex": 1, "pageSize": 20 } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2" } response1 = requests.get(url=url, params=params, headers=headers) print(response1.text) # ----------------------json格式的参数传递------------------------------ # 注册的接口地址 url = "http://api.lemonban.com/futureloan/member/register" # 参数 params = { "mobile_phone": "15879562223", "pwd": "lemonban" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2" } response2 = requests.post(url=url, json=params, headers=headers) print(response2.text) # ------------------------表单类型参数的传递---------------------------------- # 接口地址 url = "https://www.ketangpai.com/UserApi/login" # 参数 params = { "email": "24782578257", "password": "1426", "remember": 0 } response3 = requests.post(url=url, data=params) print(response3.json()) # -----------------------文件上传--------------------------------- # 上传文件的接口地址(这是授课老师本地的,我们无法访问) url = "http://127.0.0.1:5000/upload" # 请求的参数 params = { "nickname": "1122", "age": 18, "sex": "男" } file = { "pic": ("jiayouya.gif", open("jiayouya.gif", "rb"), "image/gif") } # response4 = requests.post(url=url, data=params, files=file) print(response4.json())
四、请求响应数据的提取方式
响应对象response:
一、http响应码:response.status_code
二、返回的数据提取:
1、text属性(str):获取的是原生的json字符串 (用的不多)
2、content属性(bytes):可以使用decode指定编码转换为字符串 (用的不多)
3、json()方法(dict):获取到的是json转换的字典/列表 (工作中常用,需重点掌握!!!)
三、json类型的数据和 python中数据的对比
json python
{}: 对象 字典
[]: 数组 列表
空 null None
布尔 false False
true True
import requests # 登录的接口地址 url = "http://api.lemonban.com/futureloan/member/login" # 登录的参数 params = { "mobile_phone": "15879563287", "pwd": "lemonban11" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2", } # 发送一个登录的请求 # 请求类型为Content-Type:application/json,参数就应该使用json去传递 response = requests.post(url=url, json=params, headers=headers) # 获取接口返回的数据 print(response.text) print(response.json())
五、jsonpath和json数据
json提取数据
首先安装jsonpath 安装命令:pip install jsonpath
然后,这里我给出一组数据,如下:这是登录之后返回的数据
{'code': 0, 'msg': 'OK', 'data':{ 'id': 2096225, 'leave_amount': 0.0, 'mobile_phone': '15879563287', 'reg_name': '小柠檬', 'reg_time': '2020-08-21 11:36:56.0', 'type': 1, 'token_info': { 'token_type': 'Bearer', 'expires_in': '2020-08-21 18:11:31', 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjIwOTYyMjUsImV4cCI6MTU5ODAwNDY5MX0.dvhKZs67w2jWX9zjqzsQ_7xjE3ggcfuEjtl6HOkmSb0qWkqp8pOiMYzJ6LDSKfGj_6D-1SnxDqd4Ew2fY8oziw' } }, 'copyright': 'Copyright 柠檬班 © 2017-2020 湖南省零檬信息技术有限公司 All Rights Reserved' }
from jsonpath import jsonpath import requests # 登录的接口地址 url = "http://api.lemonban.com/futureloan/member/login" # 登录的参数 params = { "mobile_phone": "15879563287", "pwd": "lemonban" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2", } # 发送一个登录的请求 # 请求类型为Content-Type:application/json,参数就应该使用json去传递 response = requests.post(url=url, json=params, headers=headers) # 获取接口返回的数据 res = response.json() # 通过字典键值对的方式获取 # token = res["data"]["token_info"]["token"] # print(token) # 通过jsonpath提取 token = jsonpath(res, "$..token") print(token)
再给大家详细来张图:
因为,jsonpath提取数据的语法基本如下:
如果Json数据中还存在列表,想获取列表类型的数据信息,怎么获取?
比如:我给出一个json类型数据,看截图:
import json from jsonpath import jsonpath # 读取json文件中的数据,转换为python中的字典 with open("data.json", "r", encoding="utf-8") as f: res = json.load(f) res = jsonpath(res, "$.toplists[1].id") print(res)
因此,总结这部分json获取数据的内容,有以下这么几点:
1.可直接通过美元符号$ 举例 $..code
2.若需要找列表中的信息, 举例 $.toplists[1]

相关文章:
request发送http请求
今天正式开始为大家介绍接口自动化,相信很多做测试的朋友,都用过一些工具,比如jmeter,loadrunner,postman等等,所以今天先给那些基础不太好的同学,先讲讲postman如何来测接口以及如何用pthon代码…...
leaflet实现MARK指向的方向随机
效果图: npm install leaflet-rotatedmarkerL.marker([48.8631169, 2.3708919], {rotationAngle: Math.random() * 180, // 旋转角度,以度为单位,顺时针方向。rotationOrigin: "center center", // 旋转中心 }).addTo(map);...
如何使用Python编写小游戏?
大家好,我是沐尘而生,如果你是一个热爱编程的小伙伴,又想尝试游戏开发,那么这篇文章一定能满足你的好奇心。不废话,让我们马上进入Python游戏开发的精彩世界吧! Python游戏开发的魅力 编写小游戏不仅仅是锻…...
【Leetcode】84.柱状图中最大的矩形(Hard)
一、题目 1、题目描述 给定 n n n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10示例2:…...
Arraylist集合
保存数据会经常使用到数组,但数组存在以下几个缺陷: 长度固定;保存的必须为同一类型的元素,(基本数据类型,或引用数据类型);使用数组进行增加元素的步骤比较麻烦; 这个时候就需要用一…...
https的原理和方案
文章目录 https原理为什么要加密常见的加密方式对称加密非对称加密数据摘要&&数据指纹数据签名 https的几种工作方案方案一:只使用对称加密方案二:只使用非对称加密方案三:两端都使用非对称加密方案四:非对称加密 对称加…...
VTK 判断一个 点 是否在一个模型 stl 内部 vtk 点是否在内部 表面 寻找最近点
判断 一个点 ,判断是否在风格 stl 模型内部,或表面: 目录 1.方案一:使用vtkCellLocator FindClosestPoint 找到模型上距离给定点最近的一点,计算两点的距离 ,小于某一阈值 则认为此点在模型上; 2.方案二…...
【数据结构OJ题】链表的回文结构
原题链接:https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&ru/activity/oj&qru/ta/2016test/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 在做这道…...
Nginx常见的三个漏洞
目录 $uri导致的CRLF注入漏洞 两种常见场景 表示uri的三个变量 案例 目录穿越漏洞 案例 Http Header被覆盖的问题 案例 $uri导致的CRLF注入漏洞 两种常见场景 用户访问http://example.com/aabbcc,自动跳转到https://example.com/aabbcc 用户访问http://exa…...
爬虫逆向实战(十六)--某建筑市场平台
一、数据接口分析 主页地址:某建筑市场平台 1、抓包 通过抓包可以发现数据接口是list 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 通过查看“响应”模块可以发现,返回的响应是…...
用Python做一个滑雪小游戏
游戏是让人娱乐和放松的好方式,而编写和玩自己的游戏则是一种特别有趣的体验。在本文中,我们将使用Python和pygame库来创建一个简单的滑雪小游戏。通过这个小游戏项目,我们将学习如何使用Python编程语言来制作自己的游戏,并且享受…...
EXCEL按列查找,最终返回该列所需查询序列所对应的值,VLOOKUP函数
EXCEL按列查找,最终返回该列所需查询序列所对应的值 示例:国标行业分类汉字,匹配id 使用VLOOKUP函数 第一参数:拿去查询的值。 第二参数:匹配的数据。 Ps:Sheet1!$C 21 : 21: 21:E 117 ,需要…...
java编译报错,get方法报错
java编译报错,get方法报错 处理方式: 在空间中,将 buid 文件夹删除 再不行的话,重启电脑,删除各种缓存 试试...
可以降低CPU负载的网络传输技术——LSO
LSO 是个啥? Large Send Offload(LSO)是一种网络传输协议技术,旨在提高网络传输的性能和效率。它通过将大型数据包拆分成小型数据包,降低网络传输负载,提高传输速度。 在传统的网络传输协议中,…...
[管理与领导-25]:IT基层管理者 - 团队管理 - 如何留人, 如何留住关键人才
目录 一、离职前的五大信号,你读懂了吗? 二、员工为什么会离职 三、如何留住关键人才 一、离职前的五大信号,你读懂了吗? 离职前的信号是指员工可能在准备离职之前表现出的一些迹象或行为。 这些信号可以帮助雇主或同事们察觉…...
【Redis】Redis 的学习教程(二)之 Jedis
仅仅知道 Redis 服务端的操作知识,还是远远不够的,如果想要真正在项目中得到应用,我们还需要一个 Redis 的客户端,然后将其集成到项目中,让程序自动根据我们的业务需要自动处理。 基于 Redis 开放的通信协议ÿ…...
VB+SQL银行设备管理系统设计与实现
摘要 随着银行卡的普及,很多地方安装了大量的存款机、取款机和POS机等银行自助设备。银行设备管理系统可以有效的记录银行设备的安装和使用情况,规范对自助设备的管理,从而为用户提供更加稳定和优质的服务。 本文介绍了银行设备管理系统的设计和开发过程,详细阐述了整个应…...
Python系统学习1-9-类一之类语法
一、类之初印象 1、类就是空表格,将变量(列名)和函数(行为)结合起来 2、创建对象,表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…...
PHP“深入浅出”淘宝商品详情数据接口获取方法,淘宝API申请指南
获取淘宝商品详情数据的方法如下: 确定监控对象,通常是与自己店铺的商品相似的竞品,通过在淘宝商品详情页的URL中获取商品ID,进而获取商品的详情数据。通过API接口获取商品详情数据,申请开发者账号并获取授权访问&…...
线性代数再回顾
最近,在深度学习线性代数,之前大一的时候学过线性代数,但那纯属于是应试用的,考试一考完,啥都忘了,也说出不出个所以然,所以,在B站的MIT的线性代数以及3blue1brown线性代数的本质中去…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
