专栏首页FunTestermoco API模拟框架视频讲解(中)

moco API模拟框架视频讲解(中)

上期讲过了moco API模拟框架视频讲解(上),本期分享内容是对于匹配到的请求进行响应。首先请求先被匹配到相应规则按照先匹配到的规则进行响应,先到先得,这一点比较重要。主要相应结果形式上分三类:stringJSonobjectobject,从功能上分为:固定响应、随机响应、循环响应、限制响应等。

moco API模拟框架视频讲解(中)

response代码

package com.fun.moco

import com.fun.base.bean.Result
import com.fun.moco.support.CycleHandle
import com.fun.moco.support.LimitHandle
import com.fun.moco.support.RandomHandler
import com.github.dreamhead.moco.ResponseHandler
import com.github.dreamhead.moco.procedure.LatencyProcedure
import com.google.common.collect.FluentIterable
import com.alibaba.fastjson.JSONObject

import java.util.concurrent.TimeUnit

import static com.github.dreamhead.moco.Moco.*
import static com.github.dreamhead.moco.internal.ApiUtils.textToResource
import static com.github.dreamhead.moco.util.Iterables.asIterable

/**
 * responsehandle获取
 * 这里的继承关系为了更方便调用mocorequest和mocoresponse的静态方法
 */
@SuppressWarnings("all")
class MocoResponse extends MocoRequest {

/**
 * 返回文本信息
 * @param content
 * @return
 */
    static ResponseHandler textRes(String content) {
        with content
    }

/**
 * 设置json格式的返回值
 * <p>
 *  json格式转成string返回
 * </p>
 * @param json
 * @return
 */
    static ResponseHandler jsonRes(JSONObject json) {
        with json.toString()
    }

/**
 * 返回对象
 * @param result
 * @return
 */
    static ResponseHandler obRes(Result result) {
        with result.toString()
    }

    static ResponseHandler success(Object result) {
        with Result.success(result).toString()
    }

    static ResponseHandler fail(Object result) {
        with Result.fail(result).toString()
    }

/**
 * 随机response
 * @param handlers
 * @return
 */
    static ResponseHandler randomRes(ResponseHandler handler, ResponseHandler... handlers) {
        random handler, handlers
    }

/**
 * 随机返回文本
 * @param contents
 * @return
 */
    static ResponseHandler cycleRes(String content, String... contents) {
        cycle content, contents
    }
/**
 * 随机返回文本
 * @param contents
 * @return
 */
    static ResponseHandler cycleRes(JSONObject content, JSONObject... contents) {
        cycle content.toString(), (String[]) contents.toList().stream().map {x -> x.toString()}.toArray()
    }


    /**
     * 随机response
     * @param handlers
     * @return
     */
    static ResponseHandler cycleRes(ResponseHandler handler, ResponseHandler... handlers) {
        cycle handler, handlers
    }

/**
 * 随机返回文本,会停留在最后一个文本内容
 * @param content
 * @param contents
 * @return
 */
    static ResponseHandler sequenceRes(String content, String... contents) {
        seq content, contents
    }
/**
 * 随机返回文本,会停留在最后一个文本内容
 * @param content
 * @param contents
 * @return
 */
    static ResponseHandler sequenceRes(JSONObject content, JSONObject... contents) {
        seq content.toString(), (String[]) contents.toList().stream().map {x -> x.toString()}.toArray()
    }

/**
 * 随机返回,最后会停留在最后一个handle
 * @param handler
 * @param handlers
 * @return
 */
    static ResponseHandler sequenceRes(ResponseHandler handler, ResponseHandler... handlers) {
        seq handler, handlers
    }

/**
 * 设置cookie,只支持一个cookie设置,因为header不允许相同的key重复
 * @param key
 * @param value
 * @return
 */
    static ResponseHandler setCookie(String key, String value) {
        cookie key, value
    }

/**
 * 设置header
 * @param key
 * @param value
 * @return
 */
    static ResponseHandler setHeader(String key, String value) {
        header key, value
    }

/**
 * 批量设置header
 * @param json
 * @return
 */
    static ResponseHandler[] setHeader(JSONObject json) {
        json.keySet().stream().map {x -> setHeader(x.toString(), json.getString(x))}.toArray() as ResponseHandler[]
    }

/**
 * 设置HTTP响应码,默认200
 * @param code
 * @return
 */
    static ResponseHandler setStatus(int code) {
        status code
    }

/**
 * 代理地址
 * @param url
 * @return
 */
    static ResponseHandler setProxy(String url) {
        proxy url
    }

/**
 * 延迟
 * @param duration 时间,单位:毫秒
 * @return
 */
    static LatencyProcedure delay(long duration) {
        latency duration, TimeUnit.MILLISECONDS
    }

/**
 * 随机
 * @param content
 * @param contents
 * @return
 */
    static ResponseHandler random(String content, String... contents) {
        RandomHandler.newSeq(FluentIterable.from(asIterable(content, contents)).transform(textToResource()))
    }

/**
 * 随机返回
 * @param json
 * @param jsons
 * @return
 */
    static ResponseHandler random(JSONObject json, JSONObject... jsons) {
        RandomHandler.newSeq(FluentIterable.from(asIterable(json.toString(), jsons.toList().stream().map {x -> x.toString()}.toArray() as String[])).transform(textToResource()))
    }

/**
 * 随机
 * @param handler
 * @param handlers
 * @return
 */
    static ResponseHandler random(ResponseHandler handler, ResponseHandler... handlers) {
        RandomHandler.newSeq(asIterable(handler, handlers))
    }

/**
 * 循环返回
 * @param content
 * @param contents
 * @return
 */
    static ResponseHandler cycle(String content, String... contents) {
        CycleHandle.newSeq(FluentIterable.from(asIterable(content, contents)).transform(textToResource()))
    }

/**
 * 循环返回
 * @param json
 * @param jsons
 * @return
 */
    static ResponseHandler cycle(JSONObject json, JSONObject... jsons) {
        CycleHandle.newSeq(FluentIterable.from(asIterable(json.toString(), jsons.toList().stream().map {x -> x.toString()}.toArray() as String[])).transform(textToResource()))
    }

/**
 * 循环返回
 * @param handler
 * @param handlers
 * @return
 */
    static ResponseHandler cycle(ResponseHandler handler, ResponseHandler... handlers) {
        CycleHandle.newSeq(asIterable(handler, handlers))
    }

/**
 * 限制访问频率,默认访问间隔1000ms
 * @param unlimited 不受限返回
 * @param limited 受限时候返回
 * @return
 */
    static ResponseHandler limit(String unlimited, String limited) {
        limit textRes(limited), textRes(limited)
    }

    static ResponseHandler limit(JSONObject unlimited, JSONObject limited) {
        limit jsonResponse(limited), jsonResponse(limited)
    }

    static ResponseHandler limit(ResponseHandler unlimited, ResponseHandler limited) {
        limit unlimited, limited, 1000
    }


/**
 *
 * 限制访问频率
 * @param unlimited 不受限返回
 * @param limited 受限时候返回
 * @param interval 访问间隔
 * @return
 */
    static ResponseHandler limit(String unlimited, String limited, int interval) {
        limit textRes(unlimited), textRes(limited), interval
    }

    static ResponseHandler limit(JSONObject unlimited, JSONObject limited, int interval) {
        limit unlimited.toString(), limited.toString(), interval
    }

    static ResponseHandler limit(ResponseHandler unlimited, ResponseHandler limited, int interval) {
        LimitHandle.newSeq(unlimited, limited, interval)
    }
}


  • 郑重声明:“FunTester”首发,欢迎关注交流,禁止第三方转载。更多原创文章:FunTester十八张原创专辑,合作请联系Fhaohaizi@163.com

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • moco API模拟框架视频讲解(上)

    本来之前是写过moco API这个系列的文章的。之所以录制这个视频教程呢?主要是因为最近想做一些接口的自动化、功能、还有性能方面的实践的视频,专辑如下:接口测试...

    FunTester
  • 给moco API添加limit功能

    在使用moco API的时候,发现文档中的一些功能并不能满足构建测试服务的需求,需要自己开发一些功能。之前两篇主要讲了moco本身的补充,本篇说说moco文档之...

    FunTester
  • 性能测试框架多线程基类和执行类--视频讲解

    讲完了自动化测试的相关内容,接下来开喷性能测试了。首先分享了我的思路:通过一个继承Thread的基类(虚拟类)来规范一些通用的行为和功能,这一部分比较浅,然后通...

    FunTester
  • moco API模拟框架视频讲解(上)

    本来之前是写过moco API这个系列的文章的。之所以录制这个视频教程呢?主要是因为最近想做一些接口的自动化、功能、还有性能方面的实践的视频,专辑如下:接口测试...

    FunTester
  • 支付的时候的参数校验

    用户7657330
  • 给moco API添加limit功能

    在使用moco API的时候,发现文档中的一些功能并不能满足构建测试服务的需求,需要自己开发一些功能。之前两篇主要讲了moco本身的补充,本篇说说moco文档之...

    FunTester
  • 关于c#中委托使用小结

      委托对与我们编程人员来说,一点都不陌生,在实际工作过程中,或多或少都应该是接触过

    小小许
  • OpenFlow的伴侣协议:OF-CONFIG

    1 简介 在OpenFlow协议的规范中,控制器需要和配置好的交换机进行通信。而交换机在正常工作之前需要对其特性以及资源进行配置,才能正常工作。而这些配置超出了...

    SDNLAB
  • Redis为什么这么快?

    | 作者 吴显坚,腾讯云数据库高级工程师,参与过360开源项目Pika的研发工作,现从事redis数据库研发工作。 ---- Redis服务器是一个事件驱动程...

    腾讯云数据库 TencentDB
  • 瑞波币市值超越以太币,成第二大加密货币;韩国1月5日始全面禁止未成年人交易加密货币

    海豚区块链 媒体 | 咨询 |培训 新年伊始,瑞波币借着喜庆时刻一路飙升,市值超越以太币成第二大加密货币,截至目前比特币仍是第一大数字货币。韩国自1月5日始全面...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券