本来之前是写过​​moco API​​​这个系列的文章的。之所以录制这个视频教程呢?主要是因为最近想做一些接口的自动化、功能、还有性能方面的实践的视频,专辑如下:​​接口测试视频教程​​。由于这个被测接口的例子不太好找,找到了接口呢,也不太好找它的接口文档。特别是性能测试时,就是找别人的进行接口进行性能测试总是不太好,而且有一定的风险。所以我就是想自己搭一个服务,然后自己去对这些服务的接口进行一些测试,其中主要还是性能测试实践。

之前的​​moco API​​​的文章主要讲了就是自己对​​moco API​​​的一些功能的拓展,还有就是一些基本的应用。并没有很系统的讲​​moco API​​​的每一个方法,还有就是封装之后的一些使用规范。所以在讲接口测试实践的之前,而打算分三期讲一下​​moco API​​模拟测试框架的一些讲解和实践,为接下来的接口测试的实践作一些铺垫。

本期分享主要讲​​moco API​​的匹配请求的功能封装,主要分几类:url(完全匹配,正则匹配,start/end匹配等)、参数匹配(get、post,是否存在)、header、cookie等。

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


request代码

代码使用​​Groovy专辑​​​写的,大家完全可以当​​Java​​看。

package com.fun.moco
import com.fun.base.bean.Resultimport com.fun.moco.support.CycleHandleimport com.fun.moco.support.LimitHandleimport com.fun.moco.support.RandomHandlerimport com.github.dreamhead.moco.ResponseHandlerimport com.github.dreamhead.moco.procedure.LatencyProcedureimport com.google.common.collect.FluentIterableimport com.alibaba.fastjson.JSONObject
import java.util.concurrent.TimeUnit
import static com.github.dreamhead.moco.Moco.*import static com.github.dreamhead.moco.internal.ApiUtils.textToResourceimport 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)


热文精选

moco API模拟框架视频讲解(上)_接口测试