应用场景
接口还没有开发好,现在测不了;测试系统有多个接口,测试环境没有配置好,还无法开展测试执行;这个功能到底哪里出错了,不好说,接口太多,要一个一个调试......
孤立的应用程序变得越来少了,做起API 的测试需要多方面协调,环境的配置、数据的准备、测试场景的设计以及提交缺陷时的出错信息的准确度等诸多因素都在影响着测试计划、测试进度、测试结果。
今天我们就学习搭建一个API Mock Server ,利用它来做API或功能方面的测试,从而使被测试对象功能独立出来,这样既可以在外部接口还没有完成时,就提早介入测试,争取测试时间,又可以使被测试对象简单化。
一旦外部接口开发完成,系统进行集成测试时,如果出错,就可以快速的定位到问题原因。
温馨提示
如果您要按着示例一起做,请勿必配置如下工具 ,示例主要是介绍Mock server 与Maven 的集成,利用TestNg 与 Rest-Assured 做API 自动化测试。
对于不了解TestNg 与Maven,Rest-Assured 的小伙伴们可能需要做点相关功课 (示例中没有给出详细的配置与使用步骤):
·IDE: IntelliJ IDEA
·语言:Java
·API 测试开发:Rest-Assured
·API Mock服务器:Mock Server
·测试框架:TestNg
·项目类型:Maven
·API 测试工具:Jmeter
知识重点
1. Mock Server 服务器 Maven 配置
2. 创建API Expectation
3. Mock Server 启动
4. Mock Server UI 监控
5. API自动化测试: Rest-Assured
Mock Server配置
创建一个Maven项目,在pom文件里添加对应的mockserver dependency。
创建API Expectation
API 服器功能描述:
1. API服务器接收一个对用户列表的 get()请求
2. 以Json 文件格式返回对应的用户列表
目标明确了,现在需要做的就是:
准备数据
创建一个json文件,存放用户列表。这里只是为了学习,所以数据准备的并不复杂。
创建Expectation
Expectation的意思就是告诉服务器当接收到请求时,响应相关的数据。通过Expectation定义相关请求的规则,与响应的规则。
比如:本例中当请求userList链接 get()方法时,就返回以Json格式的用户列表。
注意:这里的用户列表我们单独放在一个Json文件里,以方法getPayloadString() 读取后作为变量被Expectation调用。
目的主要让代码变得简洁、易读。数据存放在文件里也方便测试的修改与维护。
配置Rest-Assured
在pom文件里,配置Rest-Assured的dependency。
启动Mock Server
创建MockServerTest文件,在测试用例执行之前,需要先启动Mock Server:
@BeforeTest:这里用的是TestNg的配置方法,是在单个测试用例之前先运行方法startMockServer()。
StartClientAndServer(10800):启动本地Mock Server,端口10800。
测试场景
创建测试场景
依据Expectation定义的规则,服务器启动设置后,当用户请求“http://localhost:10800/userList”,API Mock Server返回以Json格式的用户列表。
示例中验证了:
·响应代码:200
·响应格式: json
期待返回的用户列表中有”hujy@gmail.com”:这是一个错误的期待,因为我们准备的用户列表里没有这个期待的字符串。
运行测试
运行测试以后,从结果中我们可以看到测试是失败的。从运行的 log中看出:
Request URI是测试用例的请求:http://localhost:10800/userList
·响应代码:200
·响应格式:json
·失败的原因:期待字符不存在返回的用户列表里。
Mock Server UI监控
等待语句
现在我们在上面的测试用例中加一条等待语句 Thread.sleep(1000000)。
这里主要以学习为目的,最好给的等待久一点。 我们详细看一下Mock Server的日志。
运行测试
这次运测试,在执行完第一条打印语句以后,程序一直处于运行状态。
访问Mock Server UI
通过浏览器访问:http://localhost:10800/mockserver/dashboard
Mock Server Dashboard显示如下:
·Log Messages:当前mock server的进程列表
·Active Expectations:当前可以访问的Expectations列表
·Received Requests:当前服务器接受到请求列表
·Proxied Requests:当前服务器已被代理的请求列表
Log分析
通过点击creating expectation旁边的展开符号,可以详细的看到刚才准备的expectation的规则与响应。
Received与Response分析
示例一:
发送Positive Request通过Jmeter
现在我们发送一个正确的请求通过Jmeter,如图所示:Jmeter中会返回响应的用户列表。
刷新Mock Server Dashboard页面
记录Request Received会同时出现在Log Messages、 Received Requests列表里,通过展开记录可以详细看到Request与Response。
示例二
发送一个Negative Reqeust请求通过Jmeter(注:Request Path: /userListError)。
给出这样一个没有对应Expectation的请求时,Mock Server会返回响应代码404。
刷新Mock Server Dashboard,Received Requests里显示了接受到的请求。
但是在Log Messages里可以看NO_MATCH_RESPONSE的记录。展开可以看到Request与Response的详细信息。
结语
这次主要是介绍Mock Server与Maven集成做API自动化测试的示例,以供大家参考。
另外Mock Server支持其它配置方式,如: Docker、独立服务器等以适应各种不同测试环境下的要求。Mock Server Dashboard随时记录下Request与Response信息,是很好的调试工具。
但是,Mock Sever也并不是万能的,比如Mock Server 没有自己的数据库,也就是指所有的Expectations都是存储在内存的,因此要求动态数据的场景,相比较有自带数据库的API Server,Mock Server 就有点差强人意了。
总之,一切要以实际测试环境为依据,每一个工具都有优点与缺点。
我始终坚持测试的终极目的不是比拼大家会用什么测试工具、会用什么语言。测试人员灵活掌握工具与语言是为了测试过程更简约、更快捷。
好了,希望这些介绍能帮助到您的测试,有不足之处也希望大家多多提建议,共同进步。
作者:胡军英