扫码阅读
手机扫码阅读
i++需要多少QPS才能测出BUG
![](/theme/default/default/images/main/eye-open.png)
文章摘要
本文讨论了通过并发压测发现线程不安全BUG的问题,并尝试回答“线程不安全需要多少QPS压测才能发现BUG”的问题。作者指出,线程安全问题是并发缺陷的主要来源,并通过一系列文章分享Java线程安全问题。
用例设计思路
作者首先尝试在同一个JVM中测试i++的线程不安全性,但由于这种方式与实际接口测试差异较大,因此改为在一个简单的Springboot项目中通过接口实现。提出能否测出BUG并不是绝对的,而是一个概率问题,将通过发现比例值来表示测出BUG的难易程度。
服务端设计
作者弃用了moco_funtester框架,转而使用Springboot项目,并分享了controller部分的代码。代码模拟的接口平均响应时间为10ms,并执行了一个非线程安全的操作。
测试用例
在测试中,作者没有使用正规的测试框架,而是采用了异步线程池和粗略的sleep方法来控制QPS。测试用例包括了线程模型和QPS模型两种,分别模拟固定线程数请求接口和控制QPS的请求。
测试结果
线程模型和QPS模型的测试结果显示了设计QPS、实际QPS、误差数量和误差比例。结果表明,随着QPS的增加,误差数量和误差比例也随之增加。这些数据对于理解在什么程度的压力下可能揭露出潜在的线程不安全缺陷提供了参考。
作者通过测试,希望能够为发现潜在缺陷所需的压力水平提供参考,并在文末列举了相关的专题和社群资源。
想要了解更多,点击
查看原文
FunTester的其他文章
JsonPath验证类既Groovy重载操作符实践
在使用JsonPath工具类封装进行接口响应的验证过程中,由于使用原生的JsonPath的API获取到的值默认是object,如果需要转成其他类型需要多些一些代码。
Redis API——Set功能实践与性能测试【Go版】
之前说要写个 Go 语言版本的 Redis 操作 API 和性能测试
自动化测试框架
为了适应快速发展的行业生态系统的步伐,必须加快应用程序交付时间,而且必须不能以质量为代价。
随机方法性能差异
在之前的文章中我分享了三种从一个数组中随机取一?
XML文件解析实践(DOM解析)
昨天完成了基于DOM的XML文件解析类,今天赶紧实践了一下,不得不说,实践中的坑还是很多的。
加入社区微信群
与行业大咖零距离交流学习
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
软件研发质量管理体系建设
白皮书上线