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

python+pytest接口自动化框架(5)-requests发送post请求

在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递。

且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务端通过请求头中的 Content-Type 字段来获知请求中的消息主体是何种编码方式,再以对应方式对消息主体进行解析。

post请求参数常用的编码方式如下:

application/x-www-form-urlencoded		                # form表单格式,非常常见
multipart/form-data						# 一般用于上传文件,较为常见
application/json						# json字符串格式,非常常见
text/xml							# xml格式

关于post请求参数,后面会有文章专门讲述,这里不做过多的阐述。

requests.post()参数说明

使用requests库提供的post方法发送post请求,requests.post() 源码如下:

defpost(url, data=None, json=None, **kwargs):r"""Sends a POST request.:param url: URL for the new :class:`Request` object.:param data: (optional) Dictionary, list of tuples, bytes, or file-likeobject to send in the body of the :class:`Request`.:param json: (optional) json data to send in the body of the :class:`Request`.:param \*\*kwargs: Optional arguments that ``request`` takes.:return: :class:`Response <Response>` object:rtype: requests.Response"""return request('post', url, data=data, json=json, **kwargs)

参数说明:

  1. url,请求网址

  1. data,字典、元组列表、字节或要发送到指定URL的文件对象,可选(即可填可不填)

  1. json,要发送到指定URL的JSON对象,可选

  1. **kwargs,可以添加其他请求参数,如headers、timeout、cookies等

post接口中常用的编码格式在python脚本中对应的请求参数的格式一般就是 dict (字典) 或 json,如 application/x-www-form-urlencoded 格式在python中对应为dict,application/json 在python中对应为json。

因此,接下来分别这种编码格式进行举例。

发送post请求(请求参数格式为dict)

我们以请求TesterHome网的登录接口为例,发送请求参数格式为dict的请求。

请求头中content-type为application/x-www-form-urlencoded;charset=UTF-8,如下图所示:

那么请求参数编码格式应为dict,代码如下:

import requestsdeftesterhome_login():# data为请求入参data = {"user[login]": "账号","user[password]": "密码","user[remember_me]": 0,"commit": "登录"}headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53\7.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"}url = "https://testerhome.com/account/sign_in"# 编码格式为application/x-www-form-urlencoded;charset=UTF-8,所以请求参数为dict,使用data参数res = requests.post(url=url, headers=headers, data=data)print(res.text)print(res.status_code)if __name__ == '__main__':testerhome_login()

运行结果如下:

由打印出来的返回内容,我们可以判断该接口请求成功。

发送post请求(请求参数格式为json)

这里我用flask框架写了个简单的模拟接口来演示,接口代码如下:

from flask import Flask, jsonify, requestapp = Flask(__name__)
app.config["JSON_AS_ASCII"] = False@app.route("/login", methods=["POST"])deflogin():username = request.json.get("username").strip()password = request.json.get("password").strip()print(username, password)if username and password:if username == "lilei"and password == "123456":return jsonify({"code": 1000, "msg": "登录成功!", "token": "sh34ljjl08s32730dj"})elif username == "hanmeimei"and password == "888888":return jsonify({"code": 1000, "msg": "登录成功!", "token": "hjf078977l08ert2323k"})else:return jsonify({"code": 1001, "msg": "账号或密码错误!"})else:return jsonify({"code": 1002, "msg": "账号或密码不能为空!"})if __name__ == '__main__':app.run()

注意需要先安装flask框架,然后运行该模块,具体可参考我之前的文章使用Flask开发简单接口,运行后我们可以看到该接口服务的 host 地址,如下:

这个接口的请求参数格式需要为json,requests.post()请求这个接口代码如下:

import requests
import jsonheaders = {"Content-Type": "application/json;charset=utf8"}
url = "http://127.0.0.1:5000/login"
_data = {"username": "lilei","password": "123456"
}# 这里使用json参数,即json=_data
res = requests.post(url=url, headers=headers, json=_data).text
# 当然还可以使用data参数,但需先将_data转换为json格式,即data=json.dumps(_data)# json.dumps()将dict格式转换成json格式
res = requests.post(url=url, headers=headers, data=json.dumps(_data)).text
print(res)

运行结果如下:

总结

post请求因为请求主体编码格式的原因,在使用 requests.post() 时需要根据接口请求头中Content-Type字段,为请求参数选择指定的编码格式,才能发送请求。其实get请求的请求参数也有其对应的编码格式,至于如何确定get、post请求参数的格式,且听下回详解。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

电商项目实战

web测试项目

web+App+h5+小程序 测试项目

接口自动化测试实战项目

Linux实战项目

面试资料

我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以后台私信找我免费领取。

总结

我见过很多leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了好几年,更夸张的是7、8年工作内容的重复性比较高,没有什么技术含量的工作。

凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

相关文章:

python+pytest接口自动化框架(5)-requests发送post请求

在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务端通过请…...

Linux 进程:进程控制

目录一、进程创建1.fork2.vfork二、进程终止三、进程等待四、进程替换1.理解程序替换2.子进程在程序替换中的作用Linux的进程控制分为四部分&#xff1a; 进程创建进程终止进程等待进程替换 一、进程创建 常见的创建进程的函数有两个&#xff1a; pid_t fork(void)pid_t vf…...

过滤器的创建和执行顺序

过滤器的创建和执行顺序 8.1.1创建并配置过滤器 P143 重点是如何创建并配置&#xff08;xml&#xff09; 1.创建 public class EncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFil…...

JDK1.8 ConcurrentHashMap

数据结构锁sizeCtlconcurrencyLevelForwardingNode、ReservationNode扩容get、put、removehashmap&#xff1a;线程不安全 hashtable&#xff1a;通过synchronized保证线程安全但效率低。强一致性 ConcurrentHashMap&#xff1a;弱一致性 数据结构 ConcurrentHashMap为node数…...

参考 Promise/A+ 规范和测试用例手写 Promise

前言 这可能是手写promise较清晰的文章之一。 由浅至深逐步分析了原生测试用例&#xff0c;以及相关Promise/A规范。阅读上推荐以疑问章节为切入重点&#xff0c;对比Promise/A规范与ECMAScript规范的内在区别与联系&#xff0c;确定怎样构建异步任务和创建promise实例。然后开…...

yolov5数据集制作

yolov5 数据集的格式 每个图像的标注信息存储在一个独立的txt文件中每个txt文件的名称应该与其对应的图像名称相同,只是文件扩展名不同。例如: 对于名为“image1.jpg”的图像,其标注信息应存储在名为“image1.txt”的txt文件中。 在每个txt文件中,每一行表示一个对象的标注…...

主板EC程序烧写异常致无法点亮修复经验

主板型号&#xff1a;Gigabyte AB350M-Gaming3 官网上明确写着支持R5 5500&#xff0c;但按照如下步骤实践下来实际是不支持的 升级biosF31到F40版本的注意事项&#xff1a; 步骤&#xff1a; 1 使用Q-Flash先将bios升级到f31版本&#xff1b;2 然后下载提示中的ECFW Update To…...

【Java爬取赛事网站】命令行输出(仅供学习)

Java爬取赛事网站 Java爬取赛事网站Java爬取赛事网站参与社区的问题回答Gitcode项目地址PSP表格解题思路描述问题接口设计和实现过程编写中的测试关键代码展示性能改进单元测试异常处理心路历程与收获参与社区的问题回答 问题回答这个作业属于哪个课程软件工程-23年春季学期这…...

redis主从复制原理

在 Redis 中&#xff0c;我们可以通过 SLAVEOF 命令或者 slaveof 选项&#xff0c;让一个服务器去复制另一个服务器&#xff0c;被复制的服务器称为“主服务器”&#xff0c;发起复制的服务器称为“从服务器”&#xff0c;由两种服务器组成的模式称为“主从复制”。 主从复制原…...

buu刷题(第一周)

目录 [DDCTF 2019]homebrew event loop action:trigger_event%23;action:buy;5%23action:get_flag; [CISCN2019 华东南赛区]Web4 [RootersCTF2019]babyWeb [GWCTF 2019]mypassword [NESTCTF 2019]Love Math 2 [BSidesCF 2019]Pick Tac Toe [RootersCTF2019]ImgXweb [SW…...

算法训练营 day62 单调栈 每日温度 下一个更大元素 I

算法训练营 day62 单调栈 每日温度 下一个更大元素 I 每日温度 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c…...

ChIP-seq 分析:Peak 注释与可视化(9)

1. 基因注释 到目前为止&#xff0c;我们一直在处理对应于转录因子结合的 ChIPseq 峰。顾名思义&#xff0c;转录因子可以影响其靶基因的表达。 转录因子的目标很难单独从 ChIPseq 数据中确定&#xff0c;因此我们通常会通过一组简单的规则来注释基因的峰&#xff1a; 如果峰与…...

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例

ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例 基本步骤: 配置IO板分配IO信号这里以DeviceNet总线的DSQC652为例进行说明: 配置IO板的基本步骤:  配置IO板的型号  连接到总线  配置IO板的地址 (1台机器人可以配置多个IO板连接到DeviceNet总线,为了让机…...

2023 年网络安全漏洞的主要原因

​  网络安全漏洞已经并将继续成为企业面临的主要问题。因此&#xff0c;对于企业领导者来说&#xff0c;了解这些违规行为的原因至关重要&#xff0c;这样他们才能更好地保护他们的数据。 在这篇博文中&#xff0c;我们将概述 2023 年比较普遍的网络安全漏洞的主要原因。 云…...

剑指 Offer 34. 二叉树中和为某一值的路径

剑指 Offer 34. 二叉树中和为某一值的路径 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你二叉树的根节点 rootrootroot 和一个整数目标和 targetSumtargetSumtargetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节…...

2023前端vue面试题(边面边更)

Vue中key的作用 vue 中 key 值的作用可以分为两种情况来考虑&#xff1a; 第一种情况是 v-if 中使用 key。由于 Vue 会尽可能高效地渲染元素&#xff0c;通常会复用已有元素而不是从头开始渲染。因此当使用 v-if 来实现元素切换的时候&#xff0c;如果切换前后含有相同类型的…...

webpack配置完全指南

前言 对于入门选手来讲&#xff0c;webpack 配置项很多很重&#xff0c;如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单&#xff0c;基础的配置可以分为以下几个方面&#xff1a; entry 、 output 、 mode 、 resolve …...

juju创建lxd容器时如何使用本地镜像(by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-03-01 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 问题 没有外网&#xff0c;所以配置了一个local custom镜像库&#xff0c;也使用了container-image-meta…...

后端程序员学习前端开发之第一步环境搭建

一、安装 Node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。Node.js官网 二、安装 npm 镜像 因为 npm 是国外的&#xff0c;所以使用起来速度比较慢。我们这里使用了淘宝的 cnpm 镜像安装 vue。使用淘宝的 cnpm 命令管理工具代替默认的 npm 管理工具。 进入c…...

【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库

前提&#xff1a;Flask使用SQLAlchemy数据库 本质&#xff1a;依赖包版本不匹配 问题1&#xff1a;报错RuntimeError&#xff1a;working outside of application context. 运行程序报错&#xff0c;如下错误&#xff1a; 原因&#xff1a;flask-sqlalchemy 版本过高导致&am…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...