FunTester 如何对 N 个接口按比例压测

FunTester · 2020年04月01日 · 563 次阅读

随着微服务盛行,公司的服务端项目也越来越多。单一的接口性能测试并不能准确反映某个服务的总体处理能力,在服务功能划分比较清晰的架构下,对于某一服务的总体性能测试也相对变得简单。下面分享一个对于某个模块对应的服务的 N 个接口按照固定比例(来源于线上监控)进行性能测试,基于自己写的性能测试框架第二版

场景:该服务 3 个接口,比例为 1:2:3。

这里为了保证请求不被线程共享,我使用了自己的重写的 request 深度拷贝的方法拷贝 HttpRequestBase 对象,这里一定要去做处理,不然线程共享会导致 mark 请求标记失败,一定要多注意一下Serializable接口的实现,不然会导致拷贝MarkRequest对象拷贝失败,request 标记会混乱,还有一种办法就是重写MarkRequestclone()方法也行,如果是使用 Groovy 语言,建议选择后者。

public static void main(String[] args) {
    def argsUtil = new ArgsUtil(args)
    def thread = argsUtil.getIntOrdefault(0, 2)
    def times = argsUtil.getIntOrdefault(1, 5)
    def split = argsUtil.getStringOrdefault(3, "1:2:3").split(":")

    def base = getBase()
    def flow = new Flow(base)
    flow.kSearch("测试")
    def request1 = FanLibrary.getLastRequest()
    flow.getPlatformK(12)
    def request2 = FanLibrary.getLastRequest()
    flow.getPaperType()
    def request3 = FanLibrary.getLastRequest()


    MarkRequest mark = new MarkRequest() {

        private static final long serialVersionUID = -2751325651625435073L;

        String m;

        @Override
        public String mark(HttpRequestBase request) {
            request.removeHeaders("requestid");
            m = m == null ? RString.getStringWithoutNum(4) : m
            String value = "fun_" + m + CONNECTOR + Time.getTimeStamp();
            request.addHeader("requestid", value);
            return value;
        }

    };


    def requests = []
    split[0].times {
        requests << new RequestThreadTime(request1, times)
    }
    split[1].times {
        requests << new RequestThreadTime(request2, times)
    }
    split[2].times {
        requests << new RequestThreadTime(request3, times)
    }
    List<HttpRequestBase> res = []
    thread.times {
        res << requests
    }

    new Concurrent(res, "对于模块**按照比例${split}压测线程数${thread}次数${times}").start()

    allOver();
}

  • 郑重声明:文章首发于公众号 “FunTester”,禁止第三方(腾讯云除外)转载、发表。

技术类文章精选

非技术文章精选

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册