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

在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体( body)中传递 。
且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务端通过请求头中的 -Type 字段来获知请求中的消息主体是何种编码方式,再以对应方式对消息主体进行解析 。
post请求参数常用的编码方式如下:
application/x-www-form-urlencoded# form表单格式,非常常见multipart/form-data# 一般用于上传文件,较为常见application/json# json字符串格式,非常常见text/xml# xml格式
关于post请求参数,后面会有文章专门讲述,这里不做过多的阐述 。
.post()参数说明
使用库提供的post方法发送post请求,.post() 源码如下:
defpost(url, data=http://www.kingceram.com/post/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 ` object:rtype: requests.Response"""return request('post', url, data=http://www.kingceram.com/post/data, json=json, **kwargs)
参数说明:
url,请求网址
data,字典、元组列表、字节或要发送到指定URL的文件对象,可选(即可填可不填)
json,要发送到指定URL的JSON对象,可选
**,可以添加其他请求参数,如、、等
post接口中常用的编码格式在脚本中对应的请求参数的格式一般就是 dict (字典) 或 json,如 /x-www-form- 格式在中对应为dict,/json 在中对应为json 。
因此,接下来分别这种编码格式进行举例 。
发送post请求(请求参数格式为dict)
我们以请求网的登录接口为例,发送请求参数格式为dict的请求 。
请求头中-type为/x-www-form-;=UTF-8,如下图所示:
【5python+pytest接口自动化框架-requests发送post请求】

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

文章插图
那么请求参数编码格式应为dict,代码如下:
import requestsdeftesterhome_login():# data为请求入参data = http://www.kingceram.com/post/{"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=http://www.kingceram.com/post/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()