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

在日常的工作中我们经常会用到各种各样的moco框架,我选用的就是二次开发moco API,增加了一些新功能也做了一些封装。感觉自己用起来还是非常舒服的,几分钟可以构建一个简单的测试服务,用来测试性能框架各种功能。

在之前的性能测试Demo中,我本机起了一个moco服务,写了一个简单的GET接口,用性能测试框架进行压力测试。结果喜人,单机配置1G内存FunTester测试框架对本机的moco服务QPS打开了50000+。有图为证:

50000+QPS见证

在这个过程中,发现moco API中已经有提供计数器的功能,就是com.github.dreamhead.moco.MocoRequestHit类,提供moco接口命中统计的功能。

这个类功能较为简单,提供的方法比较少,都是一些断言的功能。

首先分享一下基本语法:

        def monitor = getHitMonitor()

        def server = getServer(12345, "${getMark()}.log", monitor)

        monitor.verify(urlStartsWith("/b"), atLeast(2))`

其中monitor是创建好的MocoRequestHit对象,通过构造方法传入httpserver中,然后在httpserver运行中对其中的接口命中率进行断言。

断言语法如下:

        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():未命中;

下面分享一下之前写过的moco API文档的文章:

moco API


FunTester腾讯云年度作者Boss直聘签约作者GDevOps官方合作媒体,非著名测试开发。