在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请求相关推荐

  1. python+requests+pytest 接口自动化框架(四)

    目录 一.requests库简介 二.requests库常用方法 三.request()返回的response对象 四.实战案例 post(url, data=None, json=None, **k ...

  2. python+requests+pytest 接口自动化框架(一)

    目录 一.Pytest详解以及常用的插件安装 二.Pytest默认的测试用例的规则 三.Pytest用例运行方式以及参数 1.命令行模式运行 命令:pytes 2.主函数模式运行 3.基于pytest ...

  3. python+pytest接口自动化之测试函数、测试类/测试方法的封装

    前言 今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码如下: import requestshea ...

  4. 最全最新pytest接口自动化框架

    pytest接口自动化框架介绍: Python+pytest+allure+log+yaml(默认数据和动态传参)+数据驱动+关键字驱动+pymysql(数据清理尽量接口清理)+一键切换环境+多角色随 ...

  5. python接口自动化(六)--发送get请求接口(详解)

    简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...

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

    [文章末尾给大家留下了大量的福利] 简介 在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递. 且协议中并没有规定po ...

  7. python+requests+pytest 接口自动化框架(八)

    今日内容:接口自动化测试框架封装之数据类型处理以及DDT数据驱动封装 一.数据类型处理 "${read_extract_data(tag_id)}" 替换成 110 json: { ...

  8. pytest接口自动化框架搭建

    目录: 一.设计思路-整体框架: 二.具体框架搭建 1.公共方法-common 1.1.yaml_util.py 1.2.excel_util.py 1.4.text_ util.py 1.5.exc ...

  9. 跳槽涨薪技术之python+pytest接口自动化(6)-请求参数格式的确定

    [文章末尾给大家留下了大量的福利] 我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请 ...

最新文章

  1. C/C++、嵌入式开发岗笔试集锦
  2. Kotlin中的Java静态方法等效于什么?
  3. Java中关于==和equal的区别 以及equals()方法重写
  4. [BUUCTF]pwn - wustctf2020_easyfast (Use After Free)
  5. Spring Data REST的实际应用
  6. 通过Xshell登录远程服务器实时查看log日志
  7. Java网络编程 — Netty入门
  8. python常用代码入门-入门十大Python机器学习算法(附代码)
  9. linux如何退出python编辑器_怎么退出python
  10. Python中list,tuple,dict,set的区别和用法
  11. directx9又更新了。
  12. PLSQL Developer安装破解 ,以及连接配置
  13. 非常好用的卸载软件工具【纯净绿色卸载】
  14. css利用flex实现左-中-右布局
  15. matlab 函数pdf怎么用_PDF文档怎么进行批量旋转?调整页面用迅捷PDF转换器
  16. 天之博特 多车协同:Waiting for subscriber to connect to /tianbot_1/cmd_vel 解决办法
  17. python斜杠作用_Python中正反斜杠(‘/’和‘\’)的意义与用法
  18. Stable Diffusion一键安装器,只有2.3M
  19. 基于itextpdf java pdf添加水印后,部分文档无法显示水印的问题
  20. 软件测试工程实训综合管理平台

热门文章

  1. 谈谈嵌入式视觉的几个典型应用
  2. 懂DOS终于发挥了一点作用:phoenix bios密码破解
  3. 读书笔记:再读羊皮卷:世界上最伟大的励志经典
  4. Python注释代码块
  5. win无法识别linux磁盘,分享win10电脑无法识别移动硬盘三种解决方案
  6. 【MySQL】C语言连接数据库
  7. 对内涵段子正则的提取
  8. 医共体HIS系统应该具有哪些特色功能
  9. 安装SQL2000时的几个问题和解决方法
  10. 预装Win10改Win7出错了?这些失误一定不要犯!