第5章 接口测试框架进阶
我们已经掌握了Python语言的基础知识,这为我们深入学习接口自动化测试奠定了坚实的基础。在此基础上,我们已经开始接触接口自动化测试方面的一些技术,其中包括requests库、接口测试脚本的编写方法、unittest框架的基本使用方法及关键技术等。本书前面介绍的是基础的HTTP接口测试,但在实际工作中,我们遇到的往往不止HTTP接口,本章就探讨我们可能遇到的实际情况。
5.1 支持RESTful风格的接口
5.1.1 RESTful是什么
HTTP 协议的原创作者Roy Thomas Fielding在其博士论文“Architectural Styles and the Design of Network-based Software Architectures”中提出,“我写这篇论文的目的,就是希望在符合架构原理的前提下,通过理解和评估以网络为基础的应用软件的架构设计,得到一种功能强、性能好且适于通信的架构。REST指的是一组架构约束条件和设计原则。”
根据上面的描述,我们将符合REST(Representational State Transfer,表述性状态转移)约束的架构称为RESTful架构。RESTful由于是面向资源接口设计的并且操作抽象,因此能简化开发人员的不良设计,同时最大限度地利用HTTP最初的应用协议设计理念。要想理解RESTful,我们就必须掌握资源、表现层和状态转移这3个概念。
1.资源
这里的资源是指网络上的实体或具体信息,如一段文本、一幅图片、一个多媒体文件或一种可以提供的服务。资源是通过URI(Uniform Resource Identifier,统一资源标识符)进行标识的,要想和资源进行交互,只需要访问资源对应的URI就可以了,示例如下。
http://127.0.0.1/v1/news:获取新闻。
http://127.0.0.1/v1/group:获取群组列表。
http://127.0.0.1/v1/profile:获取个人的详细信息。
2.表现层
资源有多种表现形式,具体如何展示是由表现层控制的。例如,数据既可以使用JSON来描述,也可以使用XML来描述。在RESTful服务中,表现层控制着服务器和客户端之间资源的传递形式,比如使用JSON和XML传输文本,而使用JPG、WebP格式传输图片等。当然,通过HTTP传输的数据也可以压缩。
3.状态转移
当我们通过网络和网页发生交互时,就会产生交互式且流程化的信息传递,而在信息传递过程中,必然会有数据和状态的变化,这就是状态转移,状态转移是在表现层之上完成的。在状态转移过程中,我们会用到HTTP的以下4种基本操作。
GET操作:用来获取资源。
POST操作:用来新建或更新资源。
PUT操作:用来更新资源。
DELETE操作:用来删除资源。
提倡使用的方式如下。
DELETE http://127.0.0.1/v1/group:删除群组。
POST http://127.0.0.1/v1/friends:添加群组。
UPDATE http://127.0.0.1/v1/profile:更新个人信息。
不提倡或不允许使用的方式如下。
http://api.pr.com/v1/deleteGroup
另外,RESTful要求HTTP 状态码必须能够传递出服务器的状态信息。例如,常用的HTTP状态码200表示成功,500表示服务器内部错误。