携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
概念
从之前的两篇文章解析get方法以及post方法后,我们不难发现,其实python的requests强大就在于处理不同的请求方式也能够支持各种入参,那是如何实现的呢?
源码解析
以post为例:
我们不难发现,使用requests.post方法最终请求的是request("post", url, data=data, json=json, **kwargs),而request的源码只有下面两行代码:
以上源码我们可以得到不管是使用什么请求方式,最终的请求链路都是:requests.session().request(method=method, url=url, **kwargs)
因此我们只要解析request(method=method, url=url, **kwargs)的入参就可以实现一些简单的统一入口,这对于我们平常做自动化是比较有用的,一下是request(method=method, url=url, **kwargs)的入参解析部分:
由官方给出的指定入参注释,不难发现我们平时需要传送的接口请求参数都是支持的,像method,data,json,url都是我们之前解析过的,其他比较常用的还有cookies、headers以及files,只需要在参数中以键值对的方式请求,即可以完成。
通过上述的源码,尝试写一个简单的统一请求入口
以上只是一个简单的例子,而具体的复杂的统一入口则需要通过不断的实战而去改进。
通过上面的封装后,我们对于一个请求就只需要简单的使用RequestsUtil().send_request(method = method, url = url, data= data)便可以发起。
对于统一入口的好处:
1、减少每个用例入口的重复代码requests.get(url=url, params=data)等
2、为后续需要分析所有接口的请求做铺垫,便于日志监控来分析,这个也是比较重要的点,在平时的接口自动化中,我们也是经常需要日志分析。