moco框架接口命中率统计实践

2021-05-31 11:01:23 浏览数 (1)

在日常的工作中我们经常会用到各种各样的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):该方法被调用次数在ij之间;
  • unexpected():未命中;

0 人点赞