链路压测中如何记录每一个耗时的请求
前文回顾:性能测试中记录每一个耗时请求,做完了单接口耗时请求的记录功能,近期又迎来了一批多接口链路压测的需求。刚好趁着这个机会,多实现一些不同场景的链路压测需求,锻炼一波,也能提高自己写的 FunTester 测试框架的兼容性,可谓一石多鸟,何乐而不为。
非技术内容的分享简略一些。
业务需求
老师在首页看到资源列表后,对相应的列表进行收藏和取消收藏操作。
接口参数
收藏
取消收藏
测试方案
通过创建不用的用户对象,一个线程绑定一个用户对象,使用该对象进行收藏和取消收藏操作。把一次循环当做一个request
进行数据的统计,计算QPS
和RT
等数据,生成测试结果图像。此处参考:性能测试中图形化输出测试数据。
测试脚本
测试脚本使用Groovy
,方便在服务器上执行,基本跟Java
没有差别。
我用一个AtomicInteger
对象来控制每一个线程创建的用户对象不同,具体方法是 OkayBase okayBase = getBase(u.getAndIncrement())
。通过获取每个对象最后一次发出请求的HttpRequestBase
请求,获取请求的Mark
对象值requestid
,拼接到线程标记对象threadmark
中,这样就可以获取到耗时的请求了。具体的数据格式如下:1218_Fdev160809808115759_Fdev160809808182457
。
记录方案实现
首先对Base
类进行改造,增加 private HttpRequestBase last;
属性,然后在 public JSONObject getResponse(HttpRequestBase httpRequestBase)
方法中增加复制操作,如下:
然后增加last
相关操作:
这里用了一个非空判断,主要是为了防止空指针异常,有些Base
对象初始化并不是通过接口请求实现的。在进行批量Base
对象创建和初始化的时候用的是单线程,代码如下:
所以不存在线程安全的问题,故而采取了这种方案。
测试框架相关使用情况可以参考之前的视频讲解:
接口测试视频
Git 仓库
Gitee
地址 https://gitee.com/fanapi/testerGitHub
地址 https://github.com/JunManYuanLong/FunTester
FunTester,非著名测试开发,文章记录学习和感悟,欢迎关注,交流成长。
FunTester 热文精选
版权声明: 本文为 InfoQ 作者【FunTester】的原创文章。
原文链接:【http://xie.infoq.cn/article/53e73d14df5e830c636300c6c】。文章转载请联系作者。
评论