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":""}
参数描述:
类型
参数
描述
String
pom
pom.xml字符串
String
serviceName
部署服务名
String
implClass
接口实现类
String
intfCalss;
接口类例如:com.ITest
String
realServerIp
真实服务ip
String
realServerPort
真实服务端口
String
methodName
方法名称
String
returnRes
返回值
int
stat
mock状态 0关闭,1打开
创建接口返回结果:
{"errorCode":"0","ip":"","port":"","serviceName":""}
类型
参数
描述
String
errorCode
0成功,1失败,2服务被占用
String
serviceName
服务名称
String
ip
服务ip
String
port
服务端口
更新接口返回
[{"stat":true,"info":""}]
类型
参数
描述
String
stat
true/false
String
info
失败方法信息
例子:
创建
请求如下:
http://stp.corp.com/createScfMock?jsonData=[{"serviceName":"test","realServerName":"phone","creater":"hhh","implClass":"PhoneRecordService","intfCalss":"com.phone.IPhoneRecord","methods":[{"methodName":"getRec","returnRes":"11","stat":0}],"pom":"<dependency><groupId>com.spat</groupId><artifactId>com.spat.phone</artifactId><version>1.2.23-SNAPSHOT</version></dependency>","realServerIp":"0.0.0.0","realServerPort":"21010"}]
返回结果:
[{"errorCode":2,"info":"","ip":"192.168.183.14","port":"19999","serviceName":"hhtest"}]
更新
请求如下:
http://stp.corp.com/updateScfMock?jsonData=[{"serviceName":"hhbtest","realServerName":"wphone","creater":"name","implClass":"WPhoneRecord","intfCalss":"com.spat.wphone.IPhoneRecord","methods":[{"methodName":"getRecordList","returnRes":"11","stat":0}],"pom":"<dependency><groupId>com.spat</groupId><artifactId>com.spat.phone</artifactId><version>1.2.23-SNAPSHOT</version></dependency>","realServerIp":"0.0.0.0","realServerPort":"21010"}]
返回结果:
[{"stat":true,"info":""}] 通过无方法信息,失败会返回方法名称
后记:
一点点实践,希望对大家有所启发!
---------------------
版权声明:本文为CSDN博主「hhb200766」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hhb200766/article/details/81389947
MOCK服务小结的更多相关文章
- 基于node.js构建微服务中的mock服务
缘起 由于现在微服务越来越火了,越来越多的微服务融入到了日常开发当中.在开发微服务的时候,经常会遇到一个问题由于依赖于其他服务,导致你的进度受到阻碍.使你不得不先mock出你期望调用依赖服务的输出,来 ...
- 使用nodejs搭建api的mock服务
1. 介绍 公司的业务开发都是静态页面,开发前期总是避免不了获取api的问题.在vue中有一些mockjs的方案,方案都是注入性质的,和最终部署总是有差别,而且业务大部分还在zepto下,很难找到合适 ...
- 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置
浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...
- 前端使用Mock服务Json-server
前言 由于Jaguar服务目前还没有任何的API输出,一边写前端功能,一边写后端API显然不利于整体的项目进展.所以我计划先定义好接口,然后将所有的API都先部署在一个Mock服务器上,等前端界面和功 ...
- 在vue中使用express-mock搭建mock服务
首先安装 nodemon ,如果是全局安装,那么所有的项目都可以使用mock服务 npm install nodemon 再安装express-mockjs npm i -D express-mock ...
- Mock接口数据 = mock服务 + iptable配置
一.mock接口数据应用场景: 1.测试接口A,A接口代码中调用其他服务的B接口,由于开发排期.测试环境不通等原因,依赖接口不可用 2.测试异常情况,依赖接口B返回的数据格式不对.返回None.超时等 ...
- 在django中如何从零开始搭建一个mock服务
mock概念 mock 就是模拟接口返回的一系列数据,用自定义的数据替换接口实际需要返回的数据,通过自定义的数据来实现对下级接口模块的测试.这里分为两类测试:一类是前端对接口的mock,一类是后端单元 ...
- soapui中文操作手册(四)----MOCK服务
Web Service Mocking是武器库一个非常有用的工具.这是解决“如果没有Web服务如何创建针对性的Web服务测试”问题的办法.Web Service Mocking将在这里派上用场.它允许 ...
- 7-4 python 接口开发(提供mock服务)
1.登录接口开发(数据存在数据库中) 接口开发做mock(模拟功能) tools.py import pymysql def my_db(sql): conn = pymysql.connect(h ...
随机推荐
- C#中设置double类型数据的小数长度
如果double A=1.5321654:需要将其转换为3位小数,字符串的话A.tostring(".###")就可以,输出的是1.532: 也可以用A.ToString(&quo ...
- 通过自动回复机器人学Mybatis---基础版
第1章 案例简介 介绍要实现的案例情况,后面会通过这个案例来学习 Mybatis 第2章 实战第一部----黎明前的黑暗 在没有 Mybatis 的情况下,使用 Jsp + Servlet + Jdb ...
- P5357 【模板】AC自动机(二次加强版)
思路 这题可以同时作为AC自动机和SAM的模板啊喂 AC自动机 对T建出AC自动机,把S在上面匹配,然后记录每个点被经过的次数,最后统计一次即可(暴力跳fail的复杂度是不对的) SAM 对S建出SA ...
- Error creating bean with name 'xxxx' defined in URL
遇到这种情况,要检查一下以下配置: 1) service接口实现类上有没有加@Service注解,注解是不是引用的spring的类?不要导错包 2) 接口有没有写实现类,实现类是实现的对应接口么?比如 ...
- 前端知识体系:JavaScript基础-原型和原型链-instanceof的底层实现原理
instanceof的底层实现原理(参考文档) instanceof的实现实际上是调用JS的内部函数 [[HasInstance]] 来实现的,其实现原理是:只要右边变量的prototype在左边变量 ...
- localstorage ie11不支持
据我所知,localstorage在高版本的ie.谷歌.火狐下都是支持的,以前没在ie上看过,不清楚,今天我用ie11打开我vue编译后的html,竟然发现不支持localstorage了,用仿真的i ...
- docker学习---docker基础知识
目录 docker的基础 1.安装docker 2.使用镜像 3.镜像迁移|导入和导出 4.docker Hub介绍 5.搭建私有镜像仓库 5.1.docker开源的镜像分发工具--docker Re ...
- Codeforces Round #346 (Div. 2) C题
C. Tanya and Toys In Berland recently a new collection of toys went on sale. This collection consist ...
- DP基础(线性DP)总结
DP基础(线性DP)总结 前言:虽然确实有点基础......但凡事得脚踏实地地做,基础不牢,地动山摇,,,嗯! LIS(最长上升子序列) dp方程:dp[i]=max{dp[j]+1,a[j]< ...
- 「CF712E」Memory and Casinos「线段树」「概率」
题解 解法1:(官方做法) 一段区间的\(L\)定义为从最左边开始出发,最左不失败,一直到最右边胜利的概率,\(R\)定义为从最右边开始出发,最左不失败,又回到最右边胜利的概率 考虑一个区间\([l, ...