MOCK API 的定义

根据百度百科的定义,mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是mock对象,mock对象就是真实对象在调试期间的代替品。

在瀑布流开发模式中,如果前端开发人员需要进行页面对接,需要后端先完成API的开发工作,如果没有mock,那么前后端开发的进度会互相影响。

通过 Mock API事先编写好 API 的数据生成规则,由工具动态生成 API 的返回数据。开发人员通过访问 Mock API 来获得页面所需要的数据,就可以轻松地完成对接工作。

MOCK API 能用来解决什么?

1.依赖的接口尚未开发完成

在系统交互双方定义好接口之后,我们可以提前进行开发和测试,并不依赖上游系统的开发实现。

2.自定义返回测试结果(比如 HttpservletRequet、JDBC 对象等)

在测试时使用Mock,可以自由方便的构建配置接口对象的信息参数;

在测试过程中,需要第三方接口返回特定的数据以符合特定的测试场景,这种情况往往需要跨条线的沟通协调测试数据,成本高,效率低;利用Mock可以自定义返回测试结果,支持手动构造依赖接口的返回值。(这个功能将在后面重点提及)

3.自动化测试

在自动化测试概念和发展要求下,自动化测试的规模也逐渐增大到一定程度;

大型业务系统下测试接口多,测试用例也日益增多,依赖环境的稳定就成为了自动化测试执行的关键所在;

自动化测试过程中,经常会因为依赖的第三方环境不稳定,导致测试执行失败,长期以往的出现问题,导致测试人员对自动化的稳定运行失去维护的信心;

利用Mock技术,在测试过程中,只关注被测业务逻辑,mock掉依赖不相关的系统,这种情况下自动化测试运行失败,就一定是被测系统本身的业务逻辑问题,而不是第三方系统、数据的问题;

4.更多场景,欢迎看客老爷补充。

应用场景示例(自定义返回结果)

接下来我们从测试的层面举个场景:

我所在的项目是企业管理咨询,项目最经常需要的是根据企业详情判断返回不同的状态。涉及到的数据其实很多,但是为了方便举例,我计划写三个接口进行演示,第一个是登录,第二个是获取企业详情,简化了复杂的判断,直接用判断corpld(企业ID)来作为识别的凭证,第三个是设置企业状态,有注销和恢复两种状态。会根据企业的corpstatus进行判断。接下来带你一一设置:

登陆接口不必多讲,我们直接到第二个接口,新建一个期望,请求触发条件不写,在返回数据这里添加corpstatus可能值为1或者2。

第三个接口是设置企业状态(注销/恢复),这里需要两个请求参数,第一个是corpld企业ID,对应上个接口的corpld;第二个是corpstatus企业状态,这里引用了全局变量,用两对花括号表示。

还是进入mockapi新建期望,因为这里有两个状态(注销/恢复),所以需要写两个期望。当请求参数corpstatus=4条件触发时,返回参数content=注销成功;当请求参数corpstatus=2条件触发时,返回参数content=企业已恢复。

由于这三个接口都是应用在一个场景里面的,我们不妨用一个流程进行测试的,总共三个测试用例:

  1. 登陆
  2. 获取企业详情
  3. 设置企业状态(注销/恢复)

在测试前需要在第二个用例中要写好一个响应预处理,通过Javascript代码动态改变返回的结果,实现corpstatus=2或者4,从而对应上之前的全局变量。

然后就可以点击进行测试。从测试记录可以看到会根据corpstatus的不同返回了不同的信息。

这就是一个简略完整的一个场景用例设计。那如果没有mockapi的话,等着后端开发,corpstatus可能就拿不到,进度势必会被影响,为了模拟数据测试,这时候mockapi的优势就凸显了。

下面再讲一个使用mock自定义功能的项目场景:

之前所在公司子系统较多,我们为了减低集成和维护成本,采用了ESB的架构。ESB架构可以解决多个应用系统互联所面临的的复杂性。也是因为子系统较多导致整个业务系统的运转比较复杂,其中便涉及到和多个外部系统的对接及数据交互,比如仓储和物流,势必会跟EMS、顺丰等有数据交互。

当然,跟外部系统对接时系统间的联调测试必不可少,有些外部系统提供测试环境,有些甚至不提供。即便是提供测试环境的外部系统,一般也仅在开发联调阶段配合提供联调测试对接服务,一旦联调测试结束,也不再继续提供测试服务。

那么,当这些外部系统的联调测试环境不可用时,我们就需模拟这些外部系统来和自己的系统进行数据交互,以便支持完整业务测试流程的正常进行。

再具体到API开发层面的话,就是开发的API经常遇到在URL一样的情况下,需要根据请求头或者请求体的不同,返回不同测试结果。以前没用mockapi自定义的功能的话,解决的方式只有新建多个接口分别进行,十分麻烦。

举个例子,在API文档建立后,在进行测试时,我的要求是在URL一样的情况下,根据不同的请求头部返回不同结果。

1.当标签头部
Contest-type=application/json
Clientld=purchase.consemer
OperationCode= medicine.purchase.consemer.List

那么返回参数
Floor=2
Room=2
Cabinet=2

2.当标签头部
Contest-type=application/json1
Clientld=purchase.consemer1
OperationCode= medicine.purchase.consemer.List1

那么返回参数
Floor=3
Room=3
Cabinet=3

使用 eolinker 进行自定义 MOCK API?
eolinker 是一款接口管理工具,提供API管理、测试功能,本次我们使用它来进行 Mock API,官网地址:https://www.eolinker.com

1.先建立好文档

2.建立期望进行测试

3.写完后测试后返回的数据与我们的想要的一致

4.第二种情况类似,就不赘述了

本篇文章主要从测试层面和角度去介绍 MOCK API,下篇我会从开发的层面去介绍 MOCK API 的实际应用。希望对大家有所帮助。eolinker官网:https://www.eolinker.com

MOCK API 的定义及实践(使用eolinker实现)的更多相关文章

  1. 如何通过Mock API提高APP开发效率?

    APP开发过程中,如果可以在客户端的正常项目代码中,自然地(不影响最终apk)添加一种模拟服务器数据返回的功能,这样就可以很方便的在不依赖服务器的情况下展开客户端的开发. Mock API提供了这一问 ...

  2. Mock API是如何在开发中发光发热的?

    在长期的服务过程中,我们经常会遇到前来咨询的用户与我们反馈以下这种情况:咨询者是一个前端人员,在项目开发的过程中需要与后端进行对接,遇到后端还没完成数据输出的情况下,他只好写静态模拟数据,在遇到大型项 ...

  3. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  4. Python+Flask搭建mock api server

    Python+Flask搭建mock api server 前言: 近期由于工作需要,需要一个Mock Server调用接口直接返回API结果: 假如可以先通过接口文档的定义,自己模拟出服务器返回结果 ...

  5. 2018.6.19 Java核心API与高级编程实践复习总结

    Java 核心编程API与高级编程实践 第一章 异常 1.1 异常概述 在程序运行中,经常会出现一些意外情况,这些意外会导致程序出错或者崩溃而影响程序的正常执行,在java语言中,将这些程序意外称为异 ...

  6. php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

    2016年12月29日13:45:27    关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充   说道接口设计第一反应就是r ...

  7. Retrofit/OkHttp API接口加固技术实践(下)

    作者/Tamic http://blog.csdn.net/sk719887916/article/details/65448628 imageMogr2/auto-orient/strip%7Cim ...

  8. shit Rap & mock api

    shit Rap & mock api https://thx.github.io/RAP/study.html https://github.com/thx/RAP/wiki/quick_g ...

  9. [翻译] API测试的最佳实践 - 介绍

    API测试的最佳实践 - 介绍 在上一篇“是什么让API测试很叼”一文中,我们讨论API与其他形式的软件测试的差异.部分是因为API之间的通信压根就没考虑让你能读懂,纯粹是为了方便计算机之间的交互而设 ...

随机推荐

  1. mysql 30大优化策略

    mysql 30大优化策略 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 wher ...

  2. Maven项目管理工具

    Maven项目管理工具 白面郎君 Svn eclipse maven量级 1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目 ...

  3. C语言 > 字符串和字符串函数

    输入 gets() 函数 : 1.gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区. 2.可以用来输入带空格的字符串. 3.可以无限读取, ...

  4. webpack,配置,上手,例子

    1.webpack是什么? 2.为什么要用webpack? 3.怎么用webpack? webpack是什么? 答:webpack是前端模块化应用和开发的打包工具,解决前端模块依赖的工具.打包所有的脚 ...

  5. linux下c编程 基础

    1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理 ...

  6. 一个基于RBAC的通用权限设计清单

    RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三元组 ...

  7. SSM-SpringMVC-16:SpringMVC中小论注解式开发之访问方式篇

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 访问方式可以指定,打个比方,你通过get方式进入登陆页面,通过post发送ajax数据库校验或者post提交 ...

  8. C++雾中风景9:emplace_back与可变长模板

    C++11的版本在vector容器添加了emplace_back方法,相对于原先的push_back方法能够在一定程度上提升vector容器的表现性能.所以我们从STL源码角度来切入,看看这两种方法有 ...

  9. Spring中bean的注入方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入.依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Spring ...

  10. docker+mysql+zabix-server环境搭建

    本次使用docker搭建zabbix的组合是mysql+docker+zabix-server 测试环境为:1.操作系统版本为:centos7.5 2.docker版本为:1.13.1 3 mysql ...