1. 常见POST提交数据方式
HTTP/1.1协议规定的HTTP请求方法POST一般是用来向服务端提交数据的,下面就和大家介绍一下几种常见的POST提交数据方式,以及在接口测试中需要注意的点啦。
一般服务端在接受到了POST请求后,会根据Content-Type字段去判断消息主体(body)是何种方式,如何编码的,随后再对主体进行解析。
1.1 application/x-www-form-urlencoded
这是POST数据提交最常见的方式了,即表单提交,浏览器的原声表单不设置enctype属性时就会以这种方式提交数据哦。
1.2 application/json
这种消息主体是序列化后的json字符串,这种格式支持数据层次很深的比较复杂的结构化数据,这种格式的提交方式也比较主流。
1.3 multipart/form-data
这也是一种很常见的POST数据提交方式,一般这类提交中会包含一些文件,这种方式也是浏览器原生支持的。
2. 使用requests提交POST请求
2.1 application/x-www-form-urlencoded
即form表单提交,可直接使用requests的post方法,将需要提交的表单数据用dict的形式传给data;
栗子:
post_data = {
'name': 'missxx',
'age': 18
}
requests.post(url=url, data = post_data)
2.2 application/json:
需要用到jsonpickle.encode()序列化dict数据;
栗子:
post_data = {
'name': 'missxx',
'age': 18
}
requests.post(url=url, data = jsonpickle.encode(post_data))
2.3 application/x-www-form-urlencoded & multipart/form-data
一般用于有文件的提交,若提交内容既包含纯数据又包含文件时,可以将纯数据和文件分别传给requests的data和file;
这里还需要说明一下,文件需要用到read()将其转化为文件流哦
文件流函数
def img_string(path):
# path为文件路径
with open(path, 'rb') as f:
s = f.read()
return s
栗子:
post_data = {
'name': 'missxx',
'age': 18
}
post_file = {
"file_name": ("photo.jpg", img_string(file_path), "image/jpg")
}
requests.post(url=url, data = post_data, file = post_file)
3. POST接口测试注意点
3.1 参数校验
3.2 文件与数据异步上传
当文件与数据异步上传时(如先传图片,根据图片的key传数据;或者先传数据,根据数据的id传图片),需要校验水平权限。什么是水平权限呢?比如说当A登录系统后传了一些资料,返回了这些资料的id,这时候B也登录了系统,拿着A传资料返回的id上传了一些图片,结果成功了,这种情况下若是发生会对系统造成很大的安全隐患与数据混乱。所以当文件与数据,或是数据间异步上传时,一定要检查水平权限哦。
3.3 数据类型
- 由于服务端在将json反序列化时,有时候对于参数0、‘’(空字符串)以及None的情况无法分辨,但有时参数传0被视为合法但为空则视作不合法,所以一般约定这种情况下,前端需要将数字转换为字符串提交(即0传'0');
- 当后端返回数据为int时,尤其要注意,因为会出现前端转换丢失精度的情况。