• 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   当下软件测试岗位越来越火,然后很多人对软件测试岗位,和技能都很迷糊,下面浅谈一下当下软件测试岗位和需掌握的技能。  一、什么是软件测试  很多小伙伴只知道软件测试这个岗位,不明白它到底是什么,软件测试到底是做什么呢?  测试(test)最早是出自古拉丁字,它有罐或者容器的含义。在一般的工业生产中,被当做一个常规的检查去做的。而软件测试的经典定义是:在规定条件下,对程序进行操作,以发现错误,对软件质量进行评估。  总结:软件测试的初衷就是为了发现软件自身存在的缺陷(BUG),而设定的一个岗位,不管从事软件测试任何一个岗位,初衷都应该以发现BUG为初衷的去测试。  二、国内现状  中国软件测试...
            0 0 1139
            分享
          •   本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程,来满足我们日常工作中对于压力测试环境搭建、压力测试执行过程的需求。  一、首先我们要准备四个东西,在搭建环境的时候需要使用到  1、Xshell、puTTy等终端连接工具(本文教程使用Xshell)  Xshell用于连接Linux CentOS 服务器,为我们提供操作服务器的可视化界面,如何连接服务器本文不做赘述,如果有需要请自行联网搜索,网上教程很多。连接成功如下:  2、Jmeter压缩安装包  Jmeter的压缩包需要自己去Jmeter的官网进行下载,由于是在centos环境下,...
            1 1 3500
            分享
          •   测试阶段  1、性能测试需求分析阶段  根据用户使用习惯和实际业务的性能需求,生成性能测试需求调查表  根据性能测试需求及系统重要业务调研,选取典型业务  了解业务模型及业务架构  2、性能测试设计阶段  编写性能测试用例  结合性能测试用例录制/修改/完善测试执行脚本  结合用户应用场景设计性能测试执行场景  3、性能测试执行阶段  利用LoadRunner性能测试工具中的Controller应用,按照并发用户数执行场景,并保存测试结果(Jmeter同理)  利用LoadRunner性能测试工具监控被测试环境下的服务器CPU,内存,磁盘等系统资源的使用情况  在需要的情况下利用第三方监控...
            0 0 758
            分享
          •        此文讲述了我和腾讯蜜汁缘分。       我在腾讯截至投递简历的前十几分钟填完了简历,以至于我报错岗位了。我想去的是测试开发,却报成了软件测试。       紧接着,我收到了笔试通知。在笔试的模拟测试中,共有2种类型的题目:不定项选择题26分,填空题24分。囊括的知识点很广,有linux,操作系统(页面替换题,进程线程),数据结构,计算机网络。       在正式笔试的时候,考的跟模拟题完全不一样!可能因为我是软件测试而不...
            0 0 2122
            分享
      • 51testing软件测试圈微信