0
点赞
收藏
分享

微信扫一扫

[Tech] POST数据提交请求测试

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时,尤其要注意,因为会出现前端转换丢失精度的情况。
当然,以上的测试注意点并不能避开所有POST提交数据请求中的坑,》~《
举报

相关推荐

0 条评论