写点什么

链路压测中各接口性能统计

用户头像
FunTester
关注
发布于: 1 小时前

在之前的文章中很多次提到了链路压测,在链路压测的统计结果中,只统计了链路的执行的耗时和相对应的QPS,但是缺乏统计链路中各个接口的请求耗时,特别在针对接口响应时间的变化曲线统计,今天就补上这一块的内容。


旧文回顾:


思路

由于没有在性能测试框架中对链路压测中的,每个 HTTP 和其他协议请求的响应时间记录,所以统计响应结果的需要对日志进行分类统计。


  • 读取日志中关于接口响应时间和 requestID 的内容。

  • 根据不同的 URL 区分不同接口,存入不同的list中。

  • 使用StatisticsUtil类的统计画图功能完成数据展示。

日志信息

这里分享一部分日志,日志的格式千差万别,在读取日志中关于接口响应时间的代码需要使用者自己完成。需要提前将日志文件清空或者临时指定其他日志文件,需要正确预估日志量和log4j 2的配置,最后所有日志都在一个文件中,省得麻烦。



WARN-> 创建订单号:f1615455162cXCQXINFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:1181 ms, requestId:Fun20210311173240XNwfINFO-> 请求uri:https://****/api/public/v1/order/create,耗时:1336 ms, requestId:Fun20210311173240NBiRINFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:853 ms, requestId:Fun20210311173241jBqrINFO-> 请求uri:https://****/api/public/v1/order/create,耗时:895 ms, requestId:Fun20210311173241lYiSWARN-> 创建订单号:f1615455160YBAgEWARN-> 创建订单号:f1615455161Ia2GCINFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:1163 ms, requestId:Fun20210311173240aNZOINFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:1600 ms, requestId:Fun20210311173240SScOINFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:1289 ms, requestId:Fun20210311173240UPSBINFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:35 ms, requestId:Fun20210311173242QENpINFO-> 请求uri:https://****/api/public/v1/order/create,耗时:44 ms, requestId:Fun20210311173242LcGaWARN-> 创建订单号:f1615455162qrVq0INFO-> 请求uri:https://****/api/public/v1/order/refund,耗时:40 ms, requestId:Fun20210311173242fxJgINFO-> 请求uri:https://****/api/public/v1/order/create,耗时:31 ms, requestId:Fun20210311173242XWelWARN-> 创建订单号:f1615455162baA6BINFO-> 请求uri:https://****/api/public/v1/order/create,耗时:27 ms, requestId:Fun20210311173242LnwAWARN-> 创建订单号:f1615455162SajUw
复制代码


可以看出,这里的请求日志除了两个接口的响应时间以外,就是WARN打印的订单号,需要的日志内容格式比较统一。

脚本

脚本依然用Groovy编写,因为实在太好用了。


      def lines = RWUtil.readTxtFileByLine(getLongFile("link.log"), "public/v1/order", true)        def create = []        def refund = []        lines.each {            def first = (Regex.findFirst(it, /\d+ ms/) - " ms") as int            if (it.contains(OrderApi.CREATE)) create << first            else if (it.contains(OrderApi.REFUND)) refund << first            else println it        }        println StatisticsUtil.statistics(create, "创建订单接口", 200)        println StatisticsUtil.statistics(refund, "退款", 200)
复制代码


这里的线程数 200 需要自己传参,用来生成标题的,无其他实际用途。

控制台输出

由于字体原因,这里只能放图了。





FunTester腾讯云年度作者Boss直聘签约作者,非著名测试开发 er,欢迎关注。


发布于: 1 小时前阅读数: 2
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
链路压测中各接口性能统计