zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    什么是ROR
    Struts2中使用Session的两种方法
    js的时间操作方法
    产生4位包含大小字母与数字的验证码
    Java关键字this、super使用总结
    java 反射的实例
    Java语言中定义常量注意事项
    java 静态方法和实例方法的区别
    多线程的例子
    java 中的内省机制
  • 原文地址:https://www.cnblogs.com/zhoading/p/11337600.html
Copyright © 2011-2022 走看看