Python 如何根据接口请求类型和请求方法,自动执行对应请求

Acc · 2020年11月05日 · 最后由 Jacky 回复于 2020年11月06日 · 3263 次阅读

有个问题想请教大家

1.问题:想在代码中通过一个类跑流程化用例接口,但是流程用例中可能【每个接口的请求类型不一样,请求方法也不一样】,这样该如何方便处理呢

2.目前的做法:通过在用例中加上请求头字段,然后在代码里面用 if 分支去根据

用例详情

判断代码

我知道这样处理是很笨的一个方法,请求类型那么多,不可能一个个都写上去,但是一直没想到很好的解决办法,希望大家能给一些思路

共收到 10 条回复 时间 点赞

如果没理解错的话。你是想通过这个方法自动适配 body 的任意类型是吗?如果是这样的话,你不需要判断,requests 库的请求方法,支持 data(原始数据), json(json 数据),files(文件参数),params(get 请求参数)等,你只需要在你的 excel 里面把这几个都定义好就好了。没有就空着,requests 接收到这些参数时会自动判断并组装请求头。

Acc #2 · 2020年11月05日 Author

@guolong123 您的意思是,在 excel 里面加一个字段,字段下面根据接口的请求头,手动填写 requests 的传参类型(data,json,file) 这些,然后再通过代码获取到传参类型,进行请求吗

Acc 回复

跟请求头没关系啊,requests 会自动处理请求头。比如你接口是表单类型,那你直接写成 self.send(data=data,),要传 json 类型的,写成 self.cend(json=data) 就行了。

可以将 method 细分一下,POST_JSON&POST_FORM

Acc #9 · 2020年11月05日 Author

@ 云中一只猫 嗯嗯,我在 excel 里面新加入一个字段,用来做判断项试一下😀

不就是数据驱动吗

首先,json 只是个便利参数,检测到有 json 参数值会多做一步 dump 变成字符串以及加上 content-Type 而已,本质上还是会变为 data 往后走的。files 也是类似的做法。所有属于 body 的不同参数输入,最终都会转换成 data 传入 http body 里面。

可以看下源码里的 requests.models.PreparedRequest.prepare_body

然后,1 楼的也是一个不错的方法,每个参数都单独给一列,哪一列有内容就直接给到对应内容,没有就传 None 。类似:

url method data json files params
/a get page=1
/b post {"a":1}

代码实现起来很简单,直接遍历每一列有没有值,然后赋值就行。

最后,一定要按需实现,一个能满足 80% 需求的框架就是好框架,不用刻意追求满足 100%。excel 格式本身对于 files 类型就不友好(只能写路径不能直接写内容),multipart 就更不用说了(这种格式本身就很另类,body 里可以写多种格式的数据)。专注支持好 data、json、params 几种就很足够了(一般系统绝大部分接口的 body 是纯字符串)。而且你这个场景下,json 和 data 没啥差(都是字符串,所以 dump 出来都是一样的,只是会多加一个 content-type 的 header 而已),没啥好纠结的。剩下少量的 files 和 multipart 的接口,那就直接调用 request api 手写代码好了。

Acc · #6 · 2020年11月06日 Author
仅楼主可见
Acc · #9 · 2020年11月06日 Author
仅楼主可见

做个字典

Acc 关闭了讨论 11月06日 10:45
Acc 重新开启了讨论 11月06日 11:05
Acc 关闭了讨论 11月06日 11:05
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册