有个问题想请教大家
我知道这样处理是很笨的一个方法,请求类型那么多,不可能一个个都写上去,但是一直没想到很好的解决办法,希望大家能给一些思路
如果没理解错的话。你是想通过这个方法自动适配 body 的任意类型是吗?如果是这样的话,你不需要判断,requests 库的请求方法,支持 data(原始数据), json(json 数据),files(文件参数),params(get 请求参数)等,你只需要在你的 excel 里面把这几个都定义好就好了。没有就空着,requests 接收到这些参数时会自动判断并组装请求头。
@guolong123 您的意思是,在 excel 里面加一个字段,字段下面根据接口的请求头,手动填写 requests 的传参类型(data,json,file) 这些,然后再通过代码获取到传参类型,进行请求吗
跟请求头没关系啊,requests 会自动处理请求头。比如你接口是表单类型,那你直接写成 self.send(data=data,),要传 json 类型的,写成 self.cend(json=data) 就行了。
可以将 method 细分一下,POST_JSON&POST_FORM
@ 云中一只猫 嗯嗯,我在 excel 里面新加入一个字段,用来做判断项试一下
不就是数据驱动吗
首先,json 只是个便利参数,检测到有 json 参数值会多做一步 dump 变成字符串以及加上 content-Type 而已,本质上还是会变为 data 往后走的。files 也是类似的做法。所有属于 body 的不同参数输入,最终都会转换成 data 传入 http body 里面。
可以看下源码里的 requests.models.PreparedRequest.prepare_body
然后,1 楼的也是一个不错的方法,每个参数都单独给一列,哪一列有内容就直接给到对应内容,没有就传 None 。类似:
代码实现起来很简单,直接遍历每一列有没有值,然后赋值就行。
最后,一定要按需实现,一个能满足 80% 需求的框架就是好框架,不用刻意追求满足 100%。excel 格式本身对于 files 类型就不友好(只能写路径不能直接写内容),multipart 就更不用说了(这种格式本身就很另类,body 里可以写多种格式的数据)。专注支持好 data、json、params 几种就很足够了(一般系统绝大部分接口的 body 是纯字符串)。而且你这个场景下,json 和 data 没啥差(都是字符串,所以 dump 出来都是一样的,只是会多加一个 content-type 的 header 而已),没啥好纠结的。剩下少量的 files 和 multipart 的接口,那就直接调用 request api 手写代码好了。
做个字典