扫码阅读
手机扫码阅读

i++需要多少QPS才能测出BUG

214 2024-04-03

文章摘要

本文讨论了通过并发压测发现线程不安全BUG的问题,并尝试回答“线程不安全需要多少QPS压测才能发现BUG”的问题。作者指出,线程安全问题是并发缺陷的主要来源,并通过一系列文章分享Java线程安全问题。

用例设计思路

作者首先尝试在同一个JVM中测试i++的线程不安全性,但由于这种方式与实际接口测试差异较大,因此改为在一个简单的Springboot项目中通过接口实现。提出能否测出BUG并不是绝对的,而是一个概率问题,将通过发现比例值来表示测出BUG的难易程度。

服务端设计

作者弃用了moco_funtester框架,转而使用Springboot项目,并分享了controller部分的代码。代码模拟的接口平均响应时间为10ms,并执行了一个非线程安全的操作。

测试用例

在测试中,作者没有使用正规的测试框架,而是采用了异步线程池和粗略的sleep方法来控制QPS。测试用例包括了线程模型和QPS模型两种,分别模拟固定线程数请求接口和控制QPS的请求。

测试结果

线程模型和QPS模型的测试结果显示了设计QPS、实际QPS、误差数量和误差比例。结果表明,随着QPS的增加,误差数量和误差比例也随之增加。这些数据对于理解在什么程度的压力下可能揭露出潜在的线程不安全缺陷提供了参考。

作者通过测试,希望能够为发现潜在缺陷所需的压力水平提供参考,并在文末列举了相关的专题和社群资源。

想要了解更多,点击 查看原文