之前画了两张框架的架构图:FunTester测试框架架构图初探
和FunTester测试项目架构图初探,反响不错,最近又对moco API
产生了兴趣复习一下,顺便做了一个总结。
其中大部分功能都是我在moco API
的基础上封装而来的,简化了使用方法,增强了功能。少量是我自己做了补充,有兴趣的可以参考之前的文章:
- 解决moco框架API在post请求json参数情况下query失效的问题
- 给moco API添加limit功能
- 给moco API添加random功能
- 解决moco框架API在cycle方法缺失的问题
- 如何mock固定QPS的接口
- mock延迟响应的接口
- moco固定QPS接口升级补偿机制
- moco框架接口命中率统计实践
FunTester moco框架架构图是对moco api
的一个总结,一共分为三类功能:RequestMatcher
、ResponseHandler
和HttpServer
。
RequestMatcher
这个对象主要是负责匹配请求的,功能作用在当请求进来以后,通过拦截匹配的请求,再进行响应。
拦截分三类:URL匹配、参数匹配和组合匹配。
URL匹配
- urlOnly:URL全量匹配
- urlStartsWith:URL前缀匹配
- urlEndWith:URL后缀匹配
- urlContain:URL包含匹配
- urlMatcher:URL正则匹配
这里有个隐藏的请求方法匹配,也就是GET
和POST
一类,除此以外还提供了put
和delete
方法。
参数匹配
参数匹配有一个正交图:一方面判断参数的来源,一方面判断参数的属性。
参数来源
- args:GET接口参数
- params:POST接口JSON参数
- form:POST接口表单参数
- header:请求头参数
- cookie:cookie参数
参数属性
- exist:参数是否存在
- eq:参数值是否与期望相等
组合匹配
这里提供了三个组合匹配的功能both、or和not。
- both:同时满足所有条件
- or:满足一种条件
- not:不满足所有条件
ResponseHandler
由RequestMatcher
对请求进行拦截,接下来就由ResponseHandler
对请求进行响应,响应划分成四种:基础响应、功能响应、设置响应和拓展响应。
基础响应
- textRes:响应内容是文本
- jsonRes:响应内容是JSON
- obRes:响应内容是对象
这三种基本响应是接下来高级响应的基础。
功能响应
- cycleRes:循环响应,将配置的多个响应内容当做一个环形链表,每一次请求都响应上一个请求响应的下一个内容。
- sequenceRes:次序响应,将配置多个响应当做一个有序数组,依次响应,最终会停在最后一个响应上,接下来所有响应都是最后一个响应,类似于库存卖票。
- random:随机响应,每次从配置的多个相应内容中随机返回一个内容响应。
设置响应
- setStatus:设置HTTPcode码
- setHeader:设置header
- setCookie:设置cookie
- setProxy:设置代理URL,会将代理URL响应内容返回给请求
拓展响应
- delay:延迟响应
- QPS:固定QPS
- limit:限制请求频率
- cycle:循环请求,改方法同功能响应但是可响应内容更多。
HttpServer
这个设置项比较少,除了设置请求方法以外,通盘有只有一类设置项MocoMonitor,包括port和log在moco API
体系里都是MocoMonitor的具体实现类。
这里有两个需要注意:
- proxy:设置代理,这个是跳转的,跟
ResponseHandler
里面的代理不一样。 - mount:设置挂载,可以参考五行代码构建静态博客中的应用。
最后一个MocoRequestHit
就是用来统计各个接口的命中次数,可以用来做接口请求次数的验证。
Runner比较特殊,用来启动服务和停止服务的,一个Runner
可以启动多个HttpServer
,中途可以灵活控制。