某公司的工具平台,涉及到web前端和后端(前后端分离,多个服务组成的后端和多个第三方服务依赖),包括数据库(同步第三方数据和存储己方数据),还有一个调用后端提供服务的GraphQL(可以通过组装调用多个后端提供的API)。所有的工作都是在公司内部环境中,不能连外网。
前端:AgularJS,GraphQL(TypeScript)。。。
后端:Spring-boot (Java),gateway,MySQL,WireMock。。。
基础设施:pipeline,openshift。。。。
因为每个迭代需要给客户showcase,所以每个迭代安排的是前端和后端同步开发;同时因为技术选型的问题,在这过程中存在的主要问题:
针对以上问题需要解决的:
选择工具时,我们一般都遵循几个原则:
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也是一个模拟网速很好的工具。
Postman
Postman 是一个有界面的免费工具,安装在电脑上就可以用。常用的post、get请求都可以发送,
而且支持Params,Body等形式在request中,所以既支持REST 请求又支持GraphQL形式请求。
在项目中用了REST API和GraphQL API两种调用方式,有时候在测试时发现前端直接调用的GraphQL出错了,但这个时候不能直接判断是GraphQL出问题了还是后端提供的某个REST API出错了,所以需要同时查看相关接口的response。
在项目中除了用postman检验接口调用,也可以用它保存请求,便于反复使用。而且对于一个项目,一般都有多环境,在postman中可以配置多环境;在发送请求时引入配置变量,就能很方便的切换环境了。
如图分别是REST API请求和GraphQL请求。
GraphQL Playground
GraphQL Playground是一个专用于 GraphQL 的免费工具,当输入请求时就可以拿到GraphQL的所有契约。用该工具也可以很方便的进行GraphQL请求,支持输入部分query语句时查找。在上述中用postman可以发送GraphQL的请求,但是GraphQL请求request中的body部分比较复杂,需要知道它的具体组成部分,所以我们就可以用该工具自动检查出相关的schema。
DBeaver
当项目中有用到数据库存储数据,如果想对数据库里的数据操作,可以用DBevaer工具连接数据库,然后可以直接对表里数据进行增删更新之类操作,也可以用查询语言写脚本操作。
DBeaver也是一个图像化的免费工具,支持很多常用的数据库连接。
在项目中有些场景的数据如果直接使用数据库表里存储的数据(有些同步过来的,有些正常操作存储的)不能满足异常情况(比如部分同步失败的数据或者写失败的),这时候就可以通过对表操作数据来达到一些设想情况。
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的测试工具或者框架,主要是在该项目中,测试页面显示的一些场景可以借助请求返回来模拟,而且好些情况是需要数据修改的,前端功能测试不能构成完整的流程。
至于上述说的两个测试框架的选择和实践,可以再详细阐述。