基于RobotFramework的RESTful WebAPI自动化测试框架设计与研究

2021-01-22 13:41康彦
数字技术与应用 2020年12期
关键词:关键字测试用例用例

康彦

(安徽城市管理职业学院信息技术学院,安徽合肥 230011)

0 引言

当下,随着互联网的蓬勃发展,应用程序正在向着移动设备方向转变,人们的软件使用习惯慢慢地从传统PC软件迁移到移动APP、微信小程序上,在软件设计模式上也在发生变革,前后端逐渐分离,前端负责用户界面设计,并配合后端显示数据和支持交互操作等可视化内容。后端主要负责底层业务逻辑的实现,平台的稳定性与性能,并配合前端进行数据交互及数据的保存和读取等。而前后端最好的交互方式莫过于通过WebAPI接口来实现[1]。在这种软件分层结构中,用户可以使用不同的前端平台通过HTTP协议向后端发送请求并得到返回结果。由于软件业务逻辑负责,系统中存在大量的WebAPI,如果完全依靠人工方式对软件进行测试,显然无法满足实际需要。因此,研究如何对WebAPI进行自动化测试,构建一套适用于WebAPI自动化测试框架,就显得尤为重要。

1 RESTful WebAPI

要弄清楚什么是RESTful WebAPI,首先要知道REST是什么。REST(Representational State Transfer)描述了是一组用约束条件和规则组成的网络应用系统架构。满足其架构规约的设计被称为RESTful[2]。是由Roy Fielding在他的博士论文中提出的,Roy Fielding同时也是HTTP规范的主要编写者中的一员。目前主流的Web服务交互方案主要有REST、SOAP(Simple Object Access protocol,简单对象访问协议)、XML-RPC(remote procedure call,远程过程调用协议)三种,REST相较于其他两种更加简洁明了。在对HTTP方法和网络资源的获取方面,REST结构显得更为轻量,更适用于高效率低安全性的应用开发。

REST在应用程序中最重要的原则是,前端和后端之间的交互在请求之间是无状态的。从前端到后端的每个请求都必须包含理解请求所必需的信息。如果后端在请求之间的任何时间点重启,前端不会得到通知。此外,无状态请求可以由任何可用后端应答,这十分适合基于云平台的应用。前端还可以通过缓存数据来改进其性能。

在后端,应用程序状态和功能等各种资源可以理解为一种概念上的实体,并对前端公开。可用的资源有:应用程序对象、数据库记录、算法等[3]。每个资源都使用 URI(Universal Resource Identifier) 得到一个唯一的地址。各种资源通过统一的接口,完成在前端和后端之间状态的传输。使用的是标准的HTTP方法,比如GET、PUT、POST和DELETE。超媒体是应用程序状态的引擎,各种资源通过超链接实现互联。

RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POST,DELETE,PUT和GET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。

RESTful WebAPI架构将服务器分成前端服务器和后端服务器两部分,前端服务器为用户提供无模型的视图,后端服务器为前端服务器提供数据访问接口[4]。浏览器向前端服务器请求视图,通过视图中包含的AJAX函数发起接口请求获取模型。RESTful WebAPI架构如图1所示。

图1 RESTful WebAPI架构

2 RobotFramework

表1 RESTLibrary关键字库

图2 Robot Framework架构

RobotFramework是一个独立于操作系统和应用程序的通用开源自动化框架。核心框架使用python实现,也运行在jython(jvm)和ironpython(.net)上[5]。主要用于验收测试、验收测试驱动开发(ATDD)和机器人过程自动化(RPA)。它具有易于使用的表格测试数据语法,并采用关键字驱动的测试方法。它的测试能力可以通过使用Python或Java实现的测试库来扩展,用户可以使用与创建测试用例相同的语法从现有的新的高级关键字创建新的高级关键字[6]。其本身提供了一个基础的功能。比如自带的Builtin库提供的关键字告诉我们如何定义变量、数组、字典、打印信息,分支语句和循环,以及框架本身所提供的自动化功能,如何组织用例,生成测试报告等。其框架结果如图2所示。

3 自动化测试框架设计

传统的接口测试自动化框架不支持数据驱动,没有将测试代码与测试数据分离,不利于维护,一旦新增测试用例需要重新修改测试代码,并且一个测试方法只能由一个测试用例实现,将会造成编写测试代码工作量巨大[7]。本文主要介绍一种基于Robot Framework框架的针对于RESTful WebAPI的自动化测试框架的构建。

3.1 RESTLibrary关键字库设计

针对RESTful WebAPI,该库设计由客户端通过HTTP方法,定于自己的测试套件,使用单独的测试用例测试不同的操作,以便于每个端点都可以拥有自己的专用测试套件[8]。使用JSON模式验证JSON数据,使得测试代码的编写基于属性而不是特定值的WebAPI测试(例如:手机号码必须有效与电子邮件为13012345678)。当WebAPI响应的值易于更改时,此方法减少了测试代码维护。也可以实现JSON数据的传递测试(例如:从一个端点获取响应正文,然后将其某些值发布到另一个端点并验证结果)。

该库将自己的状态表示为JSON本身,即对象数组。这些对象在一起通常被称为实例。一个实例始终具有以下三个属性:

图3 REST API测试网站

图4 测试报告

(1)请求数据作为JSON对象;

(2)响应数据作为JSON对象;

(3)以上两个属性的JSON模式。

对于每个请求响应,一旦获得响应(并且请求未超时),就会使用这些属性创建一个新实例。如果尚未使用期望关键字来推断请求和响应模式,则可以推断出它们。库中定义了类型判断、期望验证、HTTP方法、输入输出及通用设置等关键字,关键字库如表1所示。

3.2 应用实例

为验证该自动化测试框架,我们使用node.js和lowdb在本地部署了一个REST API网站。其中node.js是一种让JavaScript运行在服务器端的开发平台,lowdb是一种轻量级本地JSON数据库。该网站可支持常用HTTP方法,如GET、POST、PUT、PATCH、DELETE等方法。网站如图3所示。

一个测试套件(Test Suite)包含不同类别的多个测试脚本,在使用robot命令执行测试时,会依次执行测试套件中的各个测试脚本下的每个测试用例,测试执行结束后,框架会自动生成测试报告和测试日志文件,图4所示的report.html报告文件是本次批量执行测试用例的整体情况,记录了测试结果、测试用例总数,通过用例总数和未通过用例总数以及执行全部用例的总耗时等。图5所示的log.html日志文件是本次批量执行测试用例的具体情况,包括每个用例的执行结果的耗时情况和每个用例步骤的执行情况等。

图5 测试日志

4 结语

目前,大部分软件的业务逻辑都是基于WebAPI实现的,WebAPI测试可以简化软件中复杂业务逻辑之间的耦合度。接口功能越单一越容易提高测试用例的覆盖度和实现持续集成测试。本文所介绍自动化测试框架在Robot Framework基础上设计开发针对于RESTful API测试的关键字库,使得针对于此类接口的测试语法更为简练、易于理解。通过应用该测试框架,能有效的提高软件测试覆盖度,降低回归测试成本。

猜你喜欢
关键字测试用例用例
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
UML用例间包含关系与泛化关系的比较与分析
UML用例模型中依赖关系的比较与分析
基于SmartUnit的安全通信系统单元测试用例自动生成
成功避开“关键字”
联锁软件详细设计的测试需求分析和用例编写
從出土文獻用例看王氏父子校讀古書的得失
基于混合遗传算法的回归测试用例集最小化研究
基于依赖结构的测试用例优先级技术
软件回归测试用例选取方法研究