如果您用螺丝、钉子和板材等一系列原材料组装过家具,那么肯定看到过各种千奇百怪的螺丝,比如一字螺丝、十字螺丝、三角螺丝、六角螺丝等。为了加固这些各式各样的螺丝,您需要准备各式各样的螺丝刀。因此,您的工具箱会被不同规格和大小的螺丝刀填满。

不知道您是不是和作者一样,面对塞满螺丝刀的、乱七八糟的工具箱,心里也会非常烦躁。后来,作者在商场看到一款螺丝刀,它虽然只有一个刀柄,但提供了包含各种形状和大小的一整套螺丝刀刀头。这样在使用时,只需要根据螺丝的规格,选择相同形状的螺丝刀刀头就可以了。

与此同时,将它们放在工具箱里又显得十分整齐。如果后面需要使用其他特殊形状的螺丝刀,那么只需要购买与刀柄连接口一样的螺丝刀刀头就可以了,而不用再买一款螺丝刀。

如果您理解了上述场景,那么应该也能够很好地理解RESTful风格的接口。REST指的是一组架构约束条件和设计原则,其本质是为了让访问者依据URI就可以找到资源,然后通过简单的输入和输出完成与服务的交互。

REST所约束的每一个URI都是独一无二的资源,可通过HTTP方法进行资源操作,实现表现层的状态转移。这就像螺丝刀刀头一样,待解决的问题就像螺丝,每一个接口只面向一种特定的资源,而不用管其他接口的处理方式,这样您就能够一目了然地知道该用哪种螺丝刀刀头固定哪种螺丝了,从而降低接口开发的复杂度。

软件开发人员只需要遵循RESTful规范并按照一定的内部定义开发外部接口,就能形成像螺丝刀刀头一样轻便的接口并对外提供服务。现在的很多项目中,无论是服务器端和服务器端的调用,还是前端和服务器端的调用,通常会采用RESTful风格来设计接口。

对于测试工程师来说,RESTful风格的接口使用的仍是之前的访问模式,它们同样是HTTP接口,并且同样可以使用我们之前封装的框架来完成接口测试任务。但是,RESTful接口测试与前面讲过的HTTP接口测试是有一些区别的,因而我们需要对现有的框架做一些修改,以便更好地支持RESTful接口测试。

现在,您明白了RESTful接口测试和HTTP接口测试有很大的关系,那么RESTful接口测试和HTTP接口测试又有什么区别呢?两个关键点——数据交换的承载方式和操作方式需要特别关注。

下面我们先讲讲数据交换的承载方式。RESTful风格的接口主要以JSON(JavaScript Object Notation)格式进行数据交换。回顾前面一直作为SUT(被测系统)使用的Battle系统,您一定在Battle系统的Readme.md文件中看到过请求正文和响应正文中有关数据部分的一些定义,那就是JSON。

虽然Battle系统并不算严格使用RESTful接口,但是在数据交换的承载方式上,Battle系统模仿了RESTful风格。

下面我们再讲讲数据交换的操作方式。在Battle系统中,我们仅仅使用了HTTP的GET和POST两种基本操作;但在RESTful风格的接口中, HTTP的4种基本操作都会被用到,比如,GET操作用来获取资源,POST操作用来新建或更新资源,PUT操作用来更新资源,DELETE操作用来删除资源等。

在弄清楚RESTful风格的接口和普通的HTTP接口的区别后,大家需要想一想自己的框架需要添加什么内容才能支持RESTful风格的接口。内容的添加方法有两种——借助外力或自行封装。

在这里,对于第一个RESTful风格的接口来说,数据交换的承载方式是JSON,Battle系统使用的数据格式也是JSON,虽然全部操作都是参数拼凑的过程,但这足以满足需求。

这时,如果还需要拼凑更多复杂的数据,就需要使用JSON字符串并进行对象实体的转换。

JSON是一种轻量级的数据交换格式,不仅相对简捷,而且可以清晰地描述数据的结构和类型。JSON格式的数据既能让人轻松地阅读,又方便机器解析和网络传输。在HTTP中,如果要传输JSON格式的数据,那么MIME类型必须是“application/json”)。

对象实体的转换也就是对象实体的序列化和反序列化。在接口测试过程中,我们很多时候遇到的入参以及返回的参数是JSON格式的,但JSON格式的字符串在代码中并不是以字符串的方式进行处理的,而需要转换成一些特有的对象以完成一些内部操作,这个过程就称为序列化和反序列化。

那么,序列化和反序列化到底是什么意思呢?下面我们用生活中的一个小例子进行解释。

假设您在商场里看中一款衣柜,但这款衣柜很大,为了方便运输,需要将其拆成可以重组的零件,等送到家里后再重新组装。您和商家商量后,决定由商家将这款衣柜拆成可以重组的零件并送到您家里,然后由您自己重新组装。商家把衣柜拆成各个零件并打包的过程就是“序列化”,在代码中相当于把一些对象转换成JSON等格式的字符串;而由您使用这些零件重新组装衣柜的过程就是“反序列化”,在代码中相当于把JSON等格式的字符串转换成对象。

序列化:将对象转换为便于传输的格式。 反序列化:将序列化的数据恢复为对象。

在Python中,序列化是指将Python对象转换成JSON格式的字符串,反序列化则是指将JSON字符串转换回Python对象。Python为此提供了JSON库,在通过JSON库进行序列化后,列表或字典就会转换成字符串类型;在进行反序列化后,JSON字符串则会转换成列表或字典。

下面介绍如何使用JSON库进行序列化和反序列化,我们以在CSDN网站上搜索性能关键字后返回的JSON字符串为例(可以看到头信息中包含“application/json”),如代码清单5-1所示。

 代码清单5-1

运行结果如下。

 为了让框架快速完成序列化和反序列化操作,建议在代码中导入JSON库。现在,我们已经可以借助开源库来解决数据交换的问题了。

但是,RESTful接口和普通的HTTP接口相比还有一个明显的区别,那就是RESTful接口规定了HTTP的每一个方法都必须做固定的事情,而我们原有框架中的Common类只支持GET和POST方法。因此,我们还需要在Common类中添加对DELETE和PUT方法的支持,如代码清单5-2所示。

代码清单5-2

从上述代码可以看出,为了实现HTTP的PUT和DELETE方法,我们自行封装了put()和delete()函数。其实,为了实现RESTful风格的接口测试,只需要封装HTTP对应的方法就可以了,这样您的框架就能完美地支持RESTful风格的接口了。完成以上操作后,Common类便既可以完成HTTP接口测试,也可以完成RESTful接口测试。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: