压力测试在 600 个线程的压力测试期间遇到 HTTP 错误 400

Posted

技术标签:

【中文标题】压力测试在 600 个线程的压力测试期间遇到 HTTP 错误 400【英文标题】:Stress Test hit an HTTP error 400 during stress test with 600 threads 【发布时间】:2022-01-11 13:28:21 【问题描述】:

我正在为我的两个端点的 API 做压力测试。第一个是 /api/register,第二个是 /api/verify_tac/

/api/register 上的请求正文是


    "provider_id": "lifecare.com.my",
    "user_id": $random,
    "secure_word": "Aa123456",
    "id_type": "0",
    "id_number": "$id_number",
    "full_name": "test",
    "gender": "F",
    "dob": "2009/11/11",
    "phone_number": $random,
    "nationality": "MY"

其中 $random 和 $id_number 是来自 csv 数据配置的列表。

verify_tac 的请求正文是


     "temp_token": "$temp_token",
     "tac":"123456"
 

$temp_token 是来自 /api/register 响应正文的响应摘录。

为了测试。我已经完成了 5 种类型的测试,没有返回所有错误。

    100 个用户,60 秒的加速期。一切顺利。

    200 名用户,60 秒加速期。一切顺利。

    300 名用户,60 秒加速期。一切顺利。

    400 名用户,60 秒加速期。一切顺利。

    500 名用户,60 秒加速期。一切顺利。

    600 名用户,60 秒加速期。大多数 /api/register 响应数据为空,导致 /api/verify_tac 返回错误。从 /api/verify_tac 请求返回错误的数据是

“temp_token”:“未找到”, “tac”:“123456”

如何测试编号 6 会返回错误,而所有其他 5 不会返回错误。它们具有相同的参数。

这是否意味着我的 api 请求超载?还是我的测试参数有误?

【问题讨论】:

您可能需要调试这种情况。您可以通过测试temp_token 的值在您的代码中识别这一点,当找不到它时放置一个断点,并找出它为什么是“NotFound”。 【参考方案1】:

如果 600 个用户的响应正文为空 - 那么我的预期是您的应用程序只是过载而无法处理 600 个用户。

你可以添加一个像Simple Data Writer这样的监听器,配置如下:

通过这种方式,您将能够查看失败请求的请求和响应详细信息。如果您取消勾选Errors 框,JMeter 将存储所有请求的请求和响应详细信息。这样您就可以看到先前请求的响应消息、标头、正文等,并确定失败的原因。

另外最好:

    监控被测应用程序的基本资源使用情况(如CPU、RAM、磁盘、网络、交换使用等),可以使用JMeter PerfMon Plugin来完成 检查您的应用程序日志中是否有任何可疑条目 使用 .NET 的分析器工具(如 YourKit)重新运行测试,这样您将能够看到最“昂贵”的功能并确定应用程序花费最多时间的地方以及问题的根本原因是什么

【讨论】:

以上是关于压力测试在 600 个线程的压力测试期间遇到 HTTP 错误 400的主要内容,如果未能解决你的问题,请参考以下文章

jmeter压力测试原则

ngrinder 压力测试脚本groovy 实战

辛丑春节的这场“压力测试”

jmeter模拟对网站做压力测试

使用Jmeter进行压力测试

jmeter压力测试