专栏首页FunTestermock延迟响应的接口

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)
    }

}

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何mock固定QPS的接口

    在做接口测试的时候,经常会遇到一些接口去调用其他服务接口,或者调用第三方接口。在进行压测的时候就会遇到问题,因为很难隔离掉其他服务和第三方接口的性能变化情况,虽...

    FunTester
  • android UiAutomator如何根据颜色判断控件的状态

    本人在用UiAutomator做测试的时候,经常会遇到一些控件因为不同的条件显示不同的颜色,在学习了UiAutomator图像处理之后,自己尝试写了一个方法来处...

    FunTester
  • 我的开发日记(六)

    今天继续完成测试用例的相关功能,因为我们这个平台内容比较多,一个测试用例可能关联的属性也比较多,具不完全统计大概有:环境、项目、服务、模块、接口、用例级别、创建...

    FunTester
  • 本额等息房贷计算器、计算表达式、数值转换

    汐楓
  • MF前传——探索者二号简介

        因为探索者一号供不应求,远超预期,并且我们自己设计制造的成本太高,所以没有再次生产。而是选择较高性价比的第三方STM32开发板作为MF学习板,是为探索者...

    大石头
  • 时间,时间戳

    将如上的时间2016-05-05 20:28:54转换成时间戳,具体的操作过程为:

    zhengzongwei
  • <dp>最小换钱币数&&纸牌博弈问题&&机器人走路到达指定位置问题

    大学里的混子
  • python——时间与时间戳之间的转换

    对于时间数据,如2016-05-05 20:28:54,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模...

    zhaozhiyong
  • python——时间与时间戳之间的转换

    对于时间数据,如2016-05-05 20:28:54,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模...

    zhaozhiyong
  • vue+element采坑记-Table的CURD操作之特殊情况记录

    今天大概的说一下我们在对table进行渲染数据的时候,常见的一些问题,以及可能不容易注意的细节。

    何处锦绣不灰堆

扫码关注云+社区

领取腾讯云代金券