首页 > 其他分享 >mock延迟响应的接口

mock延迟响应的接口

时间:2023-07-09 21:32:09浏览次数:44  
标签:ResponseHandler 接口 handler time moco com mock 延迟

在使用moco API做接口模拟的过程中,遇到一个模拟接口响应时间的问题。有些情况下是需要进行延迟响应的,比如我想mock一个响应时间超过5s的接口,以观察端上会如何处理这种情况。

moco API本身是提供一个延迟的API,但是经过尝试之后发现,这个API只是用来异步请求接口的,并不能支持延迟响应这个需求,所以我又拓展了这个功能。

使用Demo

        HttpServer server = getServer(8088)

        server.get(urlOnly("/aba")).response(delay(textRes("faun"), 5000))

        server.response("haha")

        MocoServer drive = run(server)


        waitForKey("fan")

        drive.stop()

封装方法


/**
 * 延迟响应
 * @param handler
 * @param time 时间,单位ms,存在理论BUG,不能低于50ms
 * @return
 */
    static ResponseHandler delay(ResponseHandler handler, int time) {
        DelayHandler.newSeq(handler, time)
    }

/**
 * 延迟响应,默认1000ms
 * @param handler
 * @return
 */
    static ResponseHandler delay(ResponseHandler handler) {
        DelayHandler.newSeq(handler, 1000)
    }

ResponseHandler实现类

package com.fun.moco.support


import com.github.dreamhead.moco.ResponseHandler
import com.github.dreamhead.moco.handler.AbstractResponseHandler
import com.github.dreamhead.moco.internal.SessionContext

import java.util.concurrent.TimeUnit

import static com.google.common.base.Preconditions.checkArgument

/**
 * 延迟响应API拓展ResponseHandler
 */
class DelayHandler extends AbstractResponseHandler {

    /**
     * 延迟时间
     */
    private final int time

    private final ResponseHandler handler

    private DelayHandler(ResponseHandler handler, int time) {
        this.time = time
        this.handler = handler
    }

    public static ResponseHandler newSeq(final ResponseHandler handler, int time) {
        checkArgument(handler != null, "responsehandler 不能为空!");
        return new DelayHandler(handler, time);
    }

/**
 *
 * @param context
 */
    @Override
    void writeToResponse(SessionContext context) {
        com.github.dreamhead.moco.util.Idles.idle(time, TimeUnit.MILLISECONDS)
        handler.writeToResponse(context)
    }

}

标签:ResponseHandler,接口,handler,time,moco,com,mock,延迟
From: https://blog.51cto.com/FunTester/6669652

相关文章

  • TypeScript系列 3.接口和对象类型
    本系列知识部分基于小满ZS的TypeScript系列教程。我也会补充一些视频没有的内容。interface介绍interface即接口,在ts中用于描述对象的“形状”。js是鸭子类型,鸭子类型的通俗说法是:“如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。”只要一个对象包含interface中......
  • Mysql8.0配置Mysql主从复制GTID复制和延迟从库应用
    一、Mysql主从复制1、Mysql主从复制的作用和原理  1)主从复制的作用  防止单节点数据库故障数据丢失 增强数据的安全性和可靠性 2)原理  主Mysql开启二进制日志 从数据库监听主Mysql二进制日志变化 从复制二进制日志到本地 读取复制的二进制日志执行二进制日......
  • 关于接口和抽象类
    接口(Interface)和抽象类(AbstractClass)用于实现代码的抽象和封装。定义方式:接口是一种纯粹的抽象概念,只定义了方法的签名,没有实现;抽象类是一个可以包含抽象方法和具体方法的类。实现方式:一个类可以实现多个接口;一个类只能继承一个抽象类。方法:接口中的方法默认是公共的抽......
  • 在 Spring Boot 中使用 Dataway 配置数据查询接口
     Dataway介绍Dataway是基于DataQL服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过Dataway提供的UI界面完成。UI会以Jar包方式提供并集成到应用中并和应用共享同......
  • 通过在本地项目中添加服务引用访问外部WebService项目接口
    访问外部WebService项目接口的第二种方式就是通过在本地项目中添加服务引用。以下学习验证过程,通过在本地建立一个winfrom项目,通过按钮点击,触发调用接口,执行代码处理逻辑,并在文本显示区域显示最终拿回的数据。(1)在Visualstudio新建一个winfrom项目: (2)右键项目,添加服务应用,填......
  • luffy 查询所有课程接口、课程详情接口、课程详情后台之所有章节接口
    目录1查询所有课程接口1.1视图类1.2序列化类1.3表模型2课程详情接口3课程详情后台之所有章节接口3.1视图类3.2序列化类4所有课程前台,课程详情前台4.1课程列表页4.2课程详情页面5视频托管1查询所有课程接口#查询所有课程接口 -带过滤:按分类过滤-带排序:价格,......
  • 提升开发效率,轻松管理接口就用 Apipost
    API管理的难点在哪?相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。开发人员在Swagger定义好文档后,接口调试的时候还需要去Postman再定义一遍。......
  • 通过前端Ajax访问WebService形式的接口
    WebService是早期提供Web服务的一种形式(现在最新的方式是WebApi),其无关于编程语言,有java形式的WebService,也有C#形式的WebService。我们在项目中,需要和其他外部系统进行接口对接时,常使用WebService或WebApi,这取决于对方提供服务接口的使用的是那种技术。我们可以在本地模拟访问......
  • 摄像头的视频传输接口
    一、视频传输的主要路劲视频原图像一般都来自摄像头,如果要将摄像头的产生视频进行显示、存储、处理等操作,就需要将摄像头的视频传输到处理器,在有处理器进行二次处理。从摄像头的结构组成可知,摄像头需要用感光芯片将光信号转换成电信号,然后用AD采集器将电信号转换成数字......
  • 学会使用 Postman 环境变量,让接口测试更加高效
    在 Postman 中,用Environments来管理环境变量。我们在开发的过程中,往往会用到多个环境:开发环境,测试环境,UAT环境,生产环境等。我们要调用不同环境的API时,只需切换Postman的Environment即可。下面,我们来具体说下Postman环境变量的使用方法。知识扩展:Postman环境设置介绍......