帮你MOCK服务的平台

前言:

说到mock,大家会想到单测中的mock,测试同学会想到httpmock服务等。

mock的作用:程序运行过程中,设定过滤规则及返回值,来满足固定的数据解析,

解决不容易构造或者获取的数据对象。

mock有哪些工具:

前端js端拦截mock.js

web端的mock工具apiary、swagger、alibaba-rap等

Java阵营中主要的Mock测试工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微软的.Net阵营中主要是Nmock,.NetMock

WEB应用MOCK:

web端的mock相对成熟,以http请求拦截为主,进行请求的数据的返回,从上面可以看到有2种方式本地拦截和proxy拦截

单一方式缺点:

1、本地拦截,无法模拟请求时延等特殊场景,本地数据维护复杂

2、proxy拦截,所有测试case环境需要做host处理,域名切换问题

组合方式优势:

1、使用者不需要host指定

2、可以模拟复杂场景(数据返回,时延,超时等)

3、模拟数据入口统一复用性高

组合的方式缺点:

1、controll层返回页面时,mock页面,业务改动即需变更,无法验证到真正生成页面逻辑,这种mock对测试没有价值

2、返回数据格式多样时,mock多种数据格式,服务接口复杂,使用成本较高,不利于业务快速迭代

web端的mock能解决80%的业务场景,但是真正的数据交互过程不能得到验证。

所以在web之外能不能做深度的mock服务,来满足自动化测试过程中业务逻辑的验证,减少web端mock服务的复杂性。

RPC服务的mock

RPC服务自动mock,如何帮助测试或开发同学快速mock一个scf服务?

首先,通过mock我们可以解决两大类问题:

一、第3方服务依赖:

1、一些服务写场景的覆盖(测试回归阶段,如被测服务调用写操作会产生脏数据的问题,mock掉依赖的imc写接口,返回已有信息,同时完成被测服务的整个逻辑验证)

2、服务深度依赖的问题(被测试服务A,A依赖B,B依赖CD,mock掉B解决了深度依赖的问题)

二、外部服务复杂,MOCK自身部分接口:

3、数据流转状态的模拟 (如担保支付调用微信返回状态)

stp帮你一键生成mock服务

stp工具提供:

1、界面操作创建mock服务

2、接口操作批量创建mock服务

3、服务接口数据在线维护,实时生效

4、mock服务提供下载,根据环境情况进行部署

具体流程如下:

接口使用方式:

接口定义:

createScfMock

updateScfMock

参数内容:

{"implClass":"","intfCalss":"","methods":[{"methodName":"","returnRes":"","stat":0}],"pom":"","realServerIp":"","realServerPort":"","serviceName":""}

参数描述:

创建接口返回结果:

{"errorCode":"0","ip":"","port":"","serviceName":""}

更新接口返回

[{"stat":true,"info":""}]

例子:

创建

请求如下:

http://stp.corp.com/createScfMock?jsonData=[{"serviceName":"test","realServerName":"wphone","creater":"houhuibin","implClass":"WPhoneRecordService","intfCalss":"com.spat.wphone.IWPhoneRecord","methods":[{"methodName":"getRec","returnRes":"11","stat":0}],"pom":"com.spatcom.spat.wphone1.2.23-SNAPSHOT","realServerIp":"0.0.0.0","realServerPort":"21010"}]

返回结果:

[{"errorCode":2,"info":"","ip":"192.168.183.14","port":"19999","serviceName":"hhbtest"}]

更新

请求如下:

http://stp.corp.com/updateScfMock?jsonData=[{"serviceName":"hhbtest","realServerName":"wphone","creater":"name","implClass":"WPhoneRecord","intfCalss":"com.spat.wphone.IWPhoneRecord","methods":[{"methodName":"getRecordList","returnRes":"11","stat":0}],"pom":"com.spatcom.spat.wphone1.2.23-SNAPSHOT","realServerIp":"0.0.0.0","realServerPort":"21010"}]

返回结果:

[{"stat":true,"info":""}] 通过无方法信息,失败会返回方法名称

后记:

一点点实践,希望对大家有所启发!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180803G0Q5CB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券