给moco API添加random功能

使用moco API快速搭建测试挡板服务的时候,有一些接口需求是随机返回固定的几个响应体,可是moco API提供并未提供此功能,幸亏有先前增长limit功能的经验,此次很顺利解决了这个问题。java

handle代码以下:git

package com.fun.moco.support;


import com.fun.frame.SourceCode;
import com.github.dreamhead.moco.MocoConfig;
import com.github.dreamhead.moco.ResponseHandler;
import com.github.dreamhead.moco.handler.AbstractResponseHandler;
import com.github.dreamhead.moco.internal.SessionContext;
import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.FluentIterable.from;
import static com.google.common.collect.ImmutableList.copyOf;


/**
 * 随机的responsehandle
 */
public class RandomHandler extends AbstractResponseHandler {

    private final ImmutableList<ResponseHandler> handlers;

    private RandomHandler(final Iterable<ResponseHandler> handlers) {
        this.handlers = copyOf(handlers);
    }

    public static ResponseHandler newSeq(final Iterable<ResponseHandler> handlers) {
        checkArgument(Iterables.size(handlers) > 0, "Sequence contents should not be null");
        return new RandomHandler(handlers);
    }

    /**
     * getrandom随机获取一个响应
     *
     * @param context
     */
    @Override
    public void writeToResponse(final SessionContext context) {
        handlers.get(SourceCode.getRandomInt(handlers.size()) - 1).writeToResponse(context);
    }

    @Override
    public ResponseHandler apply(final MocoConfig config) {
        if (config.isFor(MocoConfig.RESPONSE_ID)) {
            return super.apply(config);
        }

        FluentIterable<ResponseHandler> transformedResources = from(copyOf(handlers)).transform(applyConfig(config));
        return new RandomHandler(transformedResources.toList());
    }

    private Function<ResponseHandler, ResponseHandler> applyConfig(final MocoConfig config) {
        return new Function<ResponseHandler, ResponseHandler>() {
            @Override
            public ResponseHandler apply(final ResponseHandler input) {
                return input.apply(config);
            }
        };
    }
}

封装好的使用方法:github

/**
 * 随机
 * @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))
    }

使用方法以下:编程

server.get(urlOnly("/find")).response(random("43242=342","e343=fdsf","3242"))

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给全部人的编程思惟
  8. 测试之JVM命令脑图
  9. 将json数据格式化输出到控制台
  10. 如何测试几率型业务接口
  11. “双花”BUG的测试分享

公众号地图 ☢️ 一块儿来~FunTester

相关文章
相关标签/搜索