测试一个项目选择的工具 —主要用于测试API

 

项目背景                                                                                                                                                   

 

某公司的工具平台,涉及到web前端和后端(前后端分离,多个服务组成的后端和多个第三方服务依赖),包括数据库(同步第三方数据和存储己方数据),还有一个调用后端提供服务的GraphQL(可以通过组装调用多个后端提供的API)。所有的工作都是在公司内部环境中,不能连外网。

测试一个项目选择的工具 —主要用于测试API

 

 

项目技术栈

 

前端:AgularJS,GraphQL(TypeScript)。。。

后端:Spring-boot (Java),gateway,MySQL,WireMock。。。

基础设施:pipeline,openshift。。。。

 

测试遇到的问题

 

因为每个迭代需要给客户showcase,所以每个迭代安排的是前端和后端同步开发;同时因为技术选型的问题,在这过程中存在的主要问题:

  1. 前后端因为工作量,很多时候不是同步完成开发的,不能开发完之后就联调和测试。
  2. 依赖第三方比较多,来自不同团队,数据来源和API接口有可能没准备好
  3. 引进了GraphQL,不是直接调用REST API,所以有时候不好判断是哪个接口调用出错
  4. 因为导入的数据和依赖第三方数据返回,好些异常情况不能直接从源头数据模拟。

针对以上问题需要解决的:

  1. 需要某些工具来测试提前开发完成的接口和第三方接口调用
  2. 需要某些工具既要支持REST API又要支持GraphQL API检验
  3. 需要某些工具可以抓取http请求和模拟请求的数据
  4. 需要某些工具可以对数据进行修改,模拟数据异常情况

 

测试中用到的工具

 

选择工具时,我们一般都遵循几个原则:

1. 满足要求

2. 操作简单,上手快或者熟练的

3. 框架好维护或者可以扩展

4. 使用的功能文档完整或者工具框架有持续维护

 

因此我选择了这些工具和框架来辅助测试:

1. Fiddler,可以抓取http请求并拦截,模拟request和response;模拟网络情况

2. Postman,可以发送http请求,包括GraphQL query 形式的和REST API形式的

3. GraphQL Playground,可以查看GraphQL中定义的数据结构和请求,查看query和mutation

4. DBeaver,连接数据库,可以进行对表增删改除,达到修改数据的目的

5. Just-API, 可以用于自动化接口测试,支持GraphQL和REST接口,基于JS,可以NPM下载

6. REST Assured,可以用于自动化接口测试,也可以用来测试GraphQL和REST接口,用Java语言编写,多种方式引入,如maven、Gradle。

 

Fiddler

Fiddler是一个有界面的免费工具,安装就可以用。对于公司内部不能连接外网的情况下,安装上该工具就可以抓取请求了。Fiddler可以用来抓取http、https请求,查看请求的request和response,了解前后端具体交互数据。同时Fiddler作为网络请求的代理,可以截取浏览器发送接收的请求,并按需修改数据,模拟多种场景,比如服务端异常,多条/少量数据。Fiddler也是一个模拟网速很好的工具。

测试一个项目选择的工具 —主要用于测试API

 

Postman

Postman 是一个有界面的免费工具,安装在电脑上就可以用。常用的post、get请求都可以发送,

而且支持Params,Body等形式在request中,所以既支持REST 请求又支持GraphQL形式请求。

在项目中用了REST API和GraphQL API两种调用方式,有时候在测试时发现前端直接调用的GraphQL出错了,但这个时候不能直接判断是GraphQL出问题了还是后端提供的某个REST API出错了,所以需要同时查看相关接口的response。

在项目中除了用postman检验接口调用,也可以用它保存请求,便于反复使用。而且对于一个项目,一般都有多环境,在postman中可以配置多环境;在发送请求时引入配置变量,就能很方便的切换环境了。

如图分别是REST API请求和GraphQL请求。

测试一个项目选择的工具 —主要用于测试API 测试一个项目选择的工具 —主要用于测试API

 

GraphQL Playground

GraphQL Playground是一个专用于 GraphQL 的免费工具,当输入请求时就可以拿到GraphQL的所有契约。用该工具也可以很方便的进行GraphQL请求,支持输入部分query语句时查找。在上述中用postman可以发送GraphQL的请求,但是GraphQL请求request中的body部分比较复杂,需要知道它的具体组成部分,所以我们就可以用该工具自动检查出相关的schema。

测试一个项目选择的工具 —主要用于测试API

 

DBeaver

当项目中有用到数据库存储数据,如果想对数据库里的数据操作,可以用DBevaer工具连接数据库,然后可以直接对表里数据进行增删更新之类操作,也可以用查询语言写脚本操作。

DBeaver也是一个图像化的免费工具,支持很多常用的数据库连接。

在项目中有些场景的数据如果直接使用数据库表里存储的数据(有些同步过来的,有些正常操作存储的)不能满足异常情况(比如部分同步失败的数据或者写失败的),这时候就可以通过对表操作数据来达到一些设想情况。

测试一个项目选择的工具 —主要用于测试API

 

Just-API

项目中接口比较多,而且项目重点也在后端,所以当接口基本确定好之后,我们引进API自动化测试。在项目中,我们有两种方式提供API(REST和GraphQL,REST是后端用Java语言基于Spring-Boot写的,GraphQL是包装了请求用JS语言写的),所以要选择一个既要支持JS语言测试(在GraphQL代码库中加入API测试),又要兼顾能测试两种API的测试框架或者工具,最后经过调研选中了Just-API这个框架。

Just-API是一个用于REST、GraphQL API的声明式,基于规范的测试框架。 用户可以在不编写代码的情况下测试API,但也可以在需要时使用代码。 它从YAML文件中读取API测试规范,并以串行/并行模式运行它们。 可以以多种格式生成测试报告,包括HTML和JSON。

Just-API这个框架目前在持续维护中(有文档化,有GitHub,有group可以联系咨询一些问题)。

使用者可以通过编写YAML文件提供一组请求和响应验证规范来构建测试套件。在YAML文件中支持hook,支持文件依赖,支持代码复用等。而且在YAML文件中可以引入JS文件或者写JS来实现一些用户定制化的需求,比如环境配置、数据验证。

在项目中能满足基本需求:验证API的连通性、获取上一个API返回的数据用于下一个API的请求、验证返回数据的数据结构(数据值是变化的)。

 

REST Assured

REST Assured也是一个用有API测试的开源框架。它是用Java语言写测试文件的,功能比较齐全,可以验证response的很多情况,也支持各种request样式。

在项目中我们后端服务会调用好些第三方的接口,用该框架可以验证这些接口的连通性、数据结构。

该框架既可以用在后端服务的代码库中,也可以单独成代码库(拆分成多个服务后端时)。

REST Assured文档很齐全,可以直接在相关的网站上查询到,这里就不用再描述了。

 

后记

 

这篇文章没有详细写辅助web前端UI的测试工具或者框架,主要是在该项目中,测试页面显示的一些场景可以借助请求返回来模拟,而且好些情况是需要数据修改的,前端功能测试不能构成完整的流程。

至于上述说的两个测试框架的选择和实践,可以再详细阐述。