哈喽哈喽。小王又来了~本期内容我们开始封装思想,开始之前,先说说requests。
01 requests
requests相信各位大佬都已经很熟悉了。是python中http请求的一个模块。他可以实现get、post、put等接口请求。
在日常工作中,我们首先是创建一个requests对象,然后调用requests下的get、post等方法进行接口调用。接收到返回参数以后,进行后续操作。这种请求在单接口中比较好用,但是在一些场景中,如登录接口,我们需要记录接口的cookie。那我们就需要使用一个变量接收cookie。然后在后续接口中调用该变量。非常不方便。这时候引用session方法就可以解决
# 创建一个session对象
session = requests.session()
res = session.get('http://www.baidu.com','参数....')
但是这个方法仅限一次性请求,在第二个接口请求时,就需要再创建一个session对象。再去调用get等方法进行请求。这个时候,已经存在的session信息,在底层的request模块中进行了重置。
为了进行接口关联,我们可以用requests.session()方法创建对象。然后调用session下面的request方法进行接口请求。这个模块的request相较于上图中的request方法中。就少了一步初始化的操作。恰好这个跳过这一步,能帮助我们进行接口的session信息共享。下图是session模块的request底层实现。
02 封装
解决了多接口中session的问题。在实际用例中,我们就可以先在某个业务的用例类中先创建一个session对象。然后用这个对象进行接口调用。那么我们多个业务线,就要创建多个用例类。那么每次还是需要创建session对象,也不是很方便,同时也会出现代码冗余的情况。为解决这种情况,我们就想到了封装。
封装最大的好处就是代码复用,且代码不会冗余。
新建一个公共模块并定义一个获取requests的方法
class SendRequests:
# 创建一个session对象
sess = requests.session()
# 定义请求并传入请求参数(参数就直接复制底层的request方法的入参即可)
def get_request(self, method, url, **kwargs):
# 直接返回这个请求
return self.sess.request(method, url, **kwargs)
封装好以后。后面的接口直接调用这个方法就OK了
那么有个问题就来了。如果是两个不同系统的话,在调用这个方法时,会不会造成A系统的session信息,在B系统中出现呢?
答案是否定的,因为在新系统调用时,我们请求登录接口的话,就直接重写了session信息,所以就不会出现这个情况。当然pytest的运行机制也可以避免这个问题。
03 总结
以上就是本期内容了。在刚接触到封装的时候,一直在思考一个问题:封装这么多乱七八糟的方法。反而在逻辑上就很抽象,很不好理解啊!为啥还要封装呢?
在上面也说到:封装最大的好处就是代码复用,且代码不会冗余。封装的好处,在实际项目中的好处是需要慢慢体会的,运用得多了,就越知道它的好处。也不必担心会忘记定义了什么方法,哪个方法是想要的功能。在写好后,自然而然就记住了,就像是做饭一样,什么菜需要什么配料,肌肉记忆,想都不用想。卷就完了~
好了,各位大佬拜拜~下期见



