在日常的工作中我们经常会用到各种各样的moco
框架,我选用的就是二次开发moco API
,增加了一些新功能也做了一些封装。感觉自己用起来还是非常舒服的,几分钟可以构建一个简单的测试服务,用来测试性能框架各种功能。
在之前的性能测试Demo
中,我本机起了一个moco
服务,写了一个简单的GET
接口,用性能测试框架进行压力测试。结果喜人,单机配置「1G内存」的「FunTester」测试框架对本机的moco
服务QPS
打开了50000
。有图为证:
50000 QPS见证
在这个过程中,发现moco API
中已经有提供计数器的功能,就是com.github.dreamhead.moco.MocoRequestHit
类,提供moco
接口命中统计的功能。
这个类功能较为简单,提供的方法比较少,都是一些断言的功能。
首先分享一下基本语法:
代码语言:javascript复制 def monitor = getHitMonitor()
def server = getServer(12345, "${getMark()}.log", monitor)
monitor.verify(urlStartsWith("/b"), atLeast(2))`
其中monitor
是创建好的MocoRequestHit
对象,通过构造方法传入httpserver
中,然后在httpserver
运行中对其中的接口命中率进行断言。
断言语法如下:
代码语言:javascript复制 try {
monitor.verify(urlStartsWith("/m"), never())
monitor.verify(urlMatcher("/t"), once())
monitor.verify(urlOnly("/a"), times(1))
monitor.verify(urlEndWith("/b"), atLeast(2))
monitor.verify(urlContain("/"), atMost(10))
monitor.verify(urlEndWith("/"), between(12, 22))
monitor.verify(unexpected(), never())
} catch (e) {
logger.warn(e)
}
这里需要用try-catch
捕获异常,不然当前线程终止,无法执行后面的结束操作。
下面我手动翻译一下moco API
文档。
- never():从来没有被调用过;
- once():只被调用过一次;
- times(int i):该方法被调用过i次;
- atLeast(int i):该方法至少被调用过i次;
- atMost(int i):该方法最多被调用过i次;
- between(int i,int j):该方法被调用次数在
i
和j
之间; - unexpected():未命中;