ITPub博客

首页 > 数据库 > 数据库开发技术 > 如何对N个接口按比例压测

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

原创 数据库开发技术 作者:FunTester 时间:2020-01-12 09:59:44 0 删除 编辑

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

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

这里为了保证请求不被线程共享,我使用了自己的重写的request深度拷贝的方法拷贝HttpRequestBase对象,这里一定要去做处理,不然线程共享会导致mark请求标记失败,一定要多注意一下Serializable接口的实现,不然会导致拷贝MarkRequest对象拷贝失败,request标记会混乱,还有一种办法就是重写MarkRequest的clone()方法也行,如果是使用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”,禁止第三方(腾讯云除外)转载、发表。

技术类文章精选

非技术文章精选


原文作者:FunTester;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-07-07

  • 博文量
    1037
  • 访问量
    420822