1. 总体概述
如果某个post请求的入参是数组形式,在进行接口测试的时候,如何通过Apipost工具进行测试,并且后端如何识别并处理数组形式的入参呢?
传递包括数组的入参,前端代码以及接口测试工具均可以通过form-data或者json的方式进行传输带数组的入参,后端要对前端传过来的入参进行数据格式判断,然后调用不同的方法进行获取。
2. form-data方式传输
这种方式只能一对一的通过key-value的方式传递字符串,为了传递数组类型的入参,可以通过对同一参数名进行多次传输参数值的方式来达到数组元素的传递,如图所示:
千万不要试图通过在参数值内填写 [ "terminal" , "terminal-report" ] 和 [ "项目1" ] 这种方式来实现数组的传递,接口只会将整个内容视为一个字符串,可以通过右上角的导出参数来进行验证,也可以通过后端代码的打印进行验证,即使在Apipost界面内,将参数名的右边设置为Array 也无济于事,这是form-data传输机制所决定,参数值只能是一个string类型。
3. json 方式传输
如果通过json方式进行参数传输,相对来说就比较简单了,可以在key-value值中直接写上数组形式,这会在传输过程中,后端通过参数名获取到为数组形式的参数值,且格式为数组,而不是一个字符串。
4. 后端的识别和处理
为了兼容这两种数据格式的入参传入,首先要使用判断语句对传入的参数格式进行判断。然后根据不同数据传入格式,采用不同的方法去获取数据。具体代码如下:
if request.form: params = request.form permissionNames = params.getlist('permissionNames') ProjectNames = params.getlist('ProjectNames') else: params = request.json permissionNames = params.get('permissionNames', []) ProjectNames = params.get('ProjectNames', [])
复制
值得注意的是,如果是form-data方式进行数组参数传输,需要对参数名采用getlist()方法获取数据,这样得到的才是一个数组,如果采用get()方式获取数据,只能获取到对应参数名最后一次传输的参数值,而且是一个字符串。