Python进行web接口测试之通过接口上传文件
往常的接口测试都是get或者post请求进行接口测试,但遇到需要上传文件的操作。遇到了很多坑
坑1:data的构造
这个例子可以在开发者模式里看到字典的构造包含4个key,但是能看到filename的文件地址并不是真实地址,而是web构造的虚假地址,所以如果只想构造一个data=data的字典上传,显然是不行的
而且data的构造的filename虚假地址也要沿用这个虚假的地址格式,不能写成自己的真实地址,只要修改一下文件名
坑2:files的构造
我们可以在图一里发现:在payload里有各种属性,所以我们要构造的file里包含这些属性,然后利用files=file参数上传,file是一个字典,单文件上传的话就是一个单key的字典,如果是多文件上传的话就是多key的字典。
每个字典的key是web定义好的,如果只能单文件上传,只能填写单key值,web也必然只能看到一个key值
这个key值就是我们在payload里看到name=upload,可能很多人会第一眼以为是name为key值,实际并不是,而是upload是key值。
正确的构造是这样的files = {‘file’: (file_name, open(file_path, ‘rb’), ‘application/octet-stream’,)}
file必须用网页规定好的key值,在这个例子里也就是upload。vaule是一个元祖,元祖里面放参数。
坑3:open的打开类型
一般是以二进制的rb方法打开,但是也有可能会遇到需要转成json格式上传
坑4 pop(‘Content-Type’) 删除请求头的Content-Type
什么要删除这个?因为我们在payload里看到Content-Type 和我们前面构造登录的不一样,所以我们在file里面构造了一个,要把原来的pop方法弹出,这样就不会干扰我们上传的file文件和file的参数了