上期讲过了moco API模拟框架视频讲解(上),本期分享内容是对于匹配到的请求进行响应。首先请求先被匹配到相应规则按照先匹配到的规则进行响应,先到先得,这一点比较重要。主要相应结果形式上分三类:string
、JSonobject
、object
,从功能上分为:固定响应、随机响应、循环响应、限制响应等。
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) } }
Fhaohaizi@163.com
。本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-05-17
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句