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#单例模式
/// <summary> /// 双检锁实现单例 /// </summary> public sealed class SingletonDoubleCheck { //s_ ...
- JS继承的原理、方式和应用
概要: 一.继承的原理 二.继承的几种方式 三.继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展.继承的过程,就是从一般到特殊的过程.要了解JS继承必须首先要了解 ...
- Appium Desired Capabilities-Android Only
Android Only These Capabilities are available only on Android-baseddrivers (like UiAutomator2for exa ...
- MNPR--造福人类的人值得被感激
https://artineering.io/research/MNPR/ https://mnpr.artineering.io https://pdfs.semanticscholar.org/0 ...
- Codeforces Round #586 (Div. 1 + Div. 2) A. Cards
链接: https://codeforces.com/contest/1220/problem/A 题意: When Serezha was three years old, he was given ...
- [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)
一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...
- 【vue】@click绑定的函数,如何同时传入事件对象和自定义参数
知识很久不用的话,果然是容易忘的... 记记笔记,希望能加深点印象吧. [仅仅传入事件对象] html: <div id="app"> <button @clic ...
- P5057 [CQOI2006]简单题 前缀异或差分/树状数组
好思路,好思路... 思路:前缀异或差分 提交:1次 题解:区间修改,单点查询,树状数组,如思路$qwq$ #include<cstdio> #include<iostream> ...
- 富文本编辑器复制粘贴word
tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...
- BZOJ 2100: [Usaco2010 Dec]Apple Delivery spfa
由于是无向图,所以可以枚举两个终点,跑两次最短路来更新答案. #include <queue> #include <cstdio> #include <cstring&g ...