• 13
  • 13
分享

  应用场景

  接口还没有开发好,现在测不了;测试系统有多个接口,测试环境没有配置好,还无法开展测试执行;这个功能到底哪里出错了,不好说,接口太多,要一个一个调试......

  孤立的应用程序变得越来少了,做起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。

1.png

  创建API Expectation

  API 服器功能描述:

  1. API服务器接收一个对用户列表的 get()请求

  2. 以Json 文件格式返回对应的用户列表

  目标明确了,现在需要做的就是:

  准备数据

  创建一个json文件,存放用户列表。这里只是为了学习,所以数据准备的并不复杂。

2.png

  创建Expectation

  Expectation的意思就是告诉服务器当接收到请求时,响应相关的数据。通过Expectation定义相关请求的规则,与响应的规则。

  比如:本例中当请求userList链接 get()方法时,就返回以Json格式的用户列表。

  注意:这里的用户列表我们单独放在一个Json文件里,以方法getPayloadString() 读取后作为变量被Expectation调用。

3.png

  目的主要让代码变得简洁、易读。数据存放在文件里也方便测试的修改与维护。

  配置Rest-Assured

  在pom文件里,配置Rest-Assured的dependency。

4.png

  启动Mock Server

  创建MockServerTest文件,在测试用例执行之前,需要先启动Mock Server:

  @BeforeTest:这里用的是TestNg的配置方法,是在单个测试用例之前先运行方法startMockServer()。

  StartClientAndServer(10800):启动本地Mock Server,端口10800。

5.png

  测试场景

  创建测试场景

  依据Expectation定义的规则,服务器启动设置后,当用户请求“http://localhost:10800/userList”,API Mock Server返回以Json格式的用户列表。

  示例中验证了:

  ·响应代码:200

  ·响应格式: json

  期待返回的用户列表中有”hujy@gmail.com”:这是一个错误的期待,因为我们准备的用户列表里没有这个期待的字符串。

6.png

  运行测试

  运行测试以后,从结果中我们可以看到测试是失败的。从运行的 log中看出:

  Request URI是测试用例的请求:http://localhost:10800/userList

  ·响应代码:200

  ·响应格式:json

  ·失败的原因:期待字符不存在返回的用户列表里。

7.png

8.png

  Mock Server UI监控

  等待语句

  现在我们在上面的测试用例中加一条等待语句 Thread.sleep(1000000)。

  这里主要以学习为目的,最好给的等待久一点。 我们详细看一下Mock Server的日志。

9.png

  运行测试

  这次运测试,在执行完第一条打印语句以后,程序一直处于运行状态。

10.png

  访问Mock Server UI

  通过浏览器访问:http://localhost:10800/mockserver/dashboard

  Mock Server Dashboard显示如下:

  ·Log Messages:当前mock server的进程列表

  ·Active Expectations:当前可以访问的Expectations列表

  ·Received Requests:当前服务器接受到请求列表

  ·Proxied Requests:当前服务器已被代理的请求列表

11.png

  Log分析

  通过点击creating expectation旁边的展开符号,可以详细的看到刚才准备的expectation的规则与响应。

12.png

  Received与Response分析

  示例一:

  发送Positive Request通过Jmeter

  现在我们发送一个正确的请求通过Jmeter,如图所示:Jmeter中会返回响应的用户列表。

13.png

14.png

  刷新Mock Server Dashboard页面

  记录Request Received会同时出现在Log Messages、 Received Requests列表里,通过展开记录可以详细看到Request与Response。

15.png

16.png

  示例二

  发送一个Negative Reqeust请求通过Jmeter(注:Request Path: /userListError)。

  给出这样一个没有对应Expectation的请求时,Mock Server会返回响应代码404。

17.png

18.png

  刷新Mock Server Dashboard,Received Requests里显示了接受到的请求。

  但是在Log Messages里可以看NO_MATCH_RESPONSE的记录。展开可以看到Request与Response的详细信息。

19.png

20.png

  结语

  这次主要是介绍Mock Server与Maven集成做API自动化测试的示例,以供大家参考。

  另外Mock Server支持其它配置方式,如: Docker、独立服务器等以适应各种不同测试环境下的要求。Mock Server Dashboard随时记录下Request与Response信息,是很好的调试工具。

  但是,Mock Sever也并不是万能的,比如Mock Server 没有自己的数据库,也就是指所有的Expectations都是存储在内存的,因此要求动态数据的场景,相比较有自带数据库的API Server,Mock Server 就有点差强人意了。

  总之,一切要以实际测试环境为依据,每一个工具都有优点与缺点。

  我始终坚持测试的终极目的不是比拼大家会用什么测试工具、会用什么语言。测试人员灵活掌握工具与语言是为了测试过程更简约、更快捷。

  好了,希望这些介绍能帮助到您的测试,有不足之处也希望大家多多提建议,共同进步。



作者:胡军英   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 基于大量虚拟机的Jmeter集群有个缺点,就是不方便管理,比如需要重启Jmeter服务,还需要一个个的连接到虚拟机上进行操作,而且安装部署不方便(无法一键部署),也不方便将集群封装成整体应用对外提供服务。这些缺点通过Rancher部署的容器云平台就能够解决。一、给各个节点的虚拟机安装Docker可以让创建虚拟机时就自动带上统一版本的Docker,就可以省掉这一步操作,网上还推荐使用DaoCloud进行Docker安装和镜像加速,我们是为了做实现,就原始的方式安装吧:1、对于CantOS安装Docker最好是CentOS7,这样可以保证内核至少是3.10(通过uname -r 命令查看),低于这...
            12 13 2873
            分享
          • 【摘要】测试用例英文名叫Testcase,测试用例是开展测试工作的重要一项,测试用例是否完善、质量高低以及执行的情况如何是影响软件测试结果的一个重要方面。可以说测试用例是软件测试中一个举足轻重的因素。本文就有关问题进行阐述。【关键词】测试用例概述用例文档(checklist),是关于具体测试步骤的文档,它描述了测试的输入参数、条件及配置、预期的输出结果等,以判断被测软件的工作是否正常。从表现形式上而言,测试用例可以是纯文本的说明文档,也可以是用脚本语言或高级语言编写的一段代码。测试用例文档由简介和测试用例两部分组成。简介部分编制测试目的、测试范围、定义术语以及测试背景等。测试用例部分逐一列示各...
            1 1 1712
            分享
          • 看到这个问题你是不是已经笑了?当然我也做好了挨喷的准备了。我搜了一下知乎,同样的问题可以翻好几页,回答的观点也各式各样,但是没有一个统一的高赞答案,今天我姑且谈谈我的个人看法,欢迎大家一起讨论。来来来,坐好啦,先给大家说说我自己关于选择的故事。一、学习 Java 有前途么?我是 2005 年开始学习 Java 的,应该是相当早了(暴露年龄了),那时的我还没大学毕业,所以在学习前、学习中、学习后的所有阶段,「Java 是否有前途」的问题,一直让我惶惶不得终日,我当时也上网搜了很多次这个问题,看了几乎所有的观点,结果和现在一样,并没有一个统一的高赞答案。有说很有前途的,毕竟当时的 Python 还...
            3 1 1573
            分享
          • 从整体的角度可以分为单元测试、集成测试、系统测试、确认测试。下面内容来自网络相关资料的整理:1、单元测试(1)定义:单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。(2)单元测试任务包括:模块接口测试;模块局部数据结构测试;模块边界条件测试;模块中所有独立执行通路测试;模块的各条错误处理通路测试。模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义...
            0 0 1243
            分享
          •   背景  性能是网站和应用的支柱,网站性能高,用户体验会更好,同时,网站速度也是搜索引擎排名的一个因素。因此,好的网站性能直接影响我们的收益指标,因此有必要提高网站的性能,从而从技术角度拿到业务收益。  性能优化的指标  RAIL模型是Google给出的一套以用户为中心的性能模型,它提供了一种考虑性能的结构。 该模型将用户体验分解为关键操作(例如,点击、滚动、加载)并帮助您为每个操作定义性能目标。 RAIL分别代表:  · Response:响应  · Animation:动画  · Idle:空闲  · Load:加载 如下图所示:  响应  在 100 毫秒...
            0 1 338
            分享
      • 51testing软件测试圈微信