05 案例:测试框架如何才能支持RESTful风格的接口?

2021-08-11 15:11:18 浏览数 (1)

如何让你的测试框架完美支持 RESTful 风格的接口测试。这里我希望你能不断强化封装测试框架的三个流程,不断为自己的接口测试框架添砖加瓦。

RESTful 风格接口关我什么事?

看到这里,你是不是一脸困惑:RESTful 是一个接口的封装风格,和我们测试人员有什么 关系呢?

要想理解它和我们测试工程师的关系,你就要先知道 RESTful 风格的接口到底有什么好。如果你用螺丝、钉子和板材等一系列原材料组装过家具,那么你肯定见到过各种千奇百怪的 螺丝,比如一字的、十字的、三角形的、六角形的和海星形的等等,为了加固这些各式各样 的螺丝,你就要准备各式各样的螺丝刀,因此,你的工具箱就会被不同规格和大小的螺丝刀 填满。

不知道你是不是也和我一样,面对塞满螺丝刀的、乱七八糟的工具箱,心里非常急躁。但后 来我在宜家看到一款螺丝刀,它只有一个刀柄,但给你提供了一整套各种形状、各种大小的 螺丝刀刀头。

这样你在使用时,只要根据螺丝规格的不同,选择替换同形状的刀头就可以了;与此同时, 它们放在工具箱里面又会显得很整齐,而不会七零八落。而且,如果你后续需要使用其它特 殊形状的螺丝刀,你只要买和刀柄连接口一样的刀头就可以了,而不用再买一个完整的螺丝 刀了。

如果你理解了上面这个场景,也就能很好地理解 RESTful 风格的接口了。它主要就是一组 设计原则和约束条件,本质上就是让消费者依据 URI 就可以找到资源,并通过简单的服务 输入输出完成服务的交互。

它主要就是一组设计原则和约束条件,本质上就是让消费者依据 URI 就可以找到资源,并通过简单的服务输入输出完成服务的交互。

RESTful 接口的测试和 原始的 HTTP 协议接口的测试的区别:数据交换的承载方式和操作方式。

  • RESTful 风格的接口主要是以 JSON 格式来进行数据交换
  • 操作方式,在“战场”系统中,我们用了 HTTP 协议的 Get 和 Post,其实 HTTP 协议有很多方法,但是我们仅仅用了这两种,而 RESTful 的规定,使 HTTP 的很多 方法都被利用到了

比如说,Get 方法用来获取资源,Post 方法用来新建资源(或者更新 资源);再比如说,Put 方法用来更新资源、Delete 方法用来删除资源等等。

RESTful 的第一个数据交换的承载方式是 JSON,使用 JSON 字符串和代码对象实体的转换, 它有一个专业的叫法:序列化和反序列化。

我们原来框架中的 Common 类却只支持 Get 和 Post 方法,因此,你需要 在 Common 类中加入 Delete 和 Put 方法的支持。具体的操作你可以依据下面这个代码段 来完成:

代码语言:javascript复制
import requests


def put(self, uri, params=None):
    '''
    封装你自己的put方法,uri是访问路由,params是put请求需要传递的参数,如果没有参数这里为空
    :param uri: 访问路由
    :param params: 传递参数,string类型,默认为None
    :return: 此次访问的response
    '''
    url = self.url_root   uri
    if params is not None:
        # 如果有参数,那么通过put方式访问对应的url,并将参数赋值给requests.put默认参数data
        # 返回request的Response结果,类型为requests的Response类型
        res = requests.put(url, data=params)
    else:

        # 如果无参数,访问方式如下
        # 返回request的Response结果,类型为requests的Response类型

        res = requests.put(url)

    return res


def delete(self, uri, params=None):
    '''
    封装你自己的delete方法,uri是访问路由,params是delete请求需要传递的参数,如果没有参数这里
    :param uri: 访问路由
    :param params: 传递参数,string类型,默认为None
    :return: 此次访问的response
    '''
    url = self.url_root   uri
    if params is not None:
        # 如果有参数,那么通过put方式访问对应的url,并将参数赋值给requests.put默认参数data
        # 返回request的Response结果,类型为requests的Response类型
        res = requests.delete(url, data=params)
    else:
        # 如果无参数,访问方式如下
        # 返回request的Response结果,类型为requests的Response类型
        res = requests.put(url)
    return res

在上面的代码中,你可以看到,我们为了实现 HTTP 协议的 Put 和 Delete 方法,自己封 装了 put() 函数和 delete() 函数。

总结

到这里,我们已经结束了今天的分享了。我们今天主要完成了 RESTful 风格接口的测试,对比之前的例子以及你自己的测试框架,针对框架中 RESTful 里缺失的部分,我为你提供了对应的解决方法。

随着我们的接口测试分享不断深入以及内容的不断丰富,我相信,你最终会获得一个完全适合你自己,又可以解决实际工作任务的测试框架,这也是你自己的接口测试武器仓库,里面有解决各种接口测试问题的方法。它会是一个私有仓库,里面每一个武器都是为你自己量身定制的,因此,每一件武器你用起来都会更得心应手。

0 人点赞