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

Stress Test hit an HTTP error 400 during stress test with 600 threads

我正在为我的 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 种类型的测试,没有 return 出现所有错误。

  1. 100 位用户有 60 秒的加速期。全部成功。

  2. 200 位用户有 60 秒的加速期。全部成功。

  3. 300 位用户有 60 秒的加速期。全部成功。

  4. 400 位用户有 60 秒的加速期。全部成功。

  5. 500 位用户有 60 秒的加速期。全部成功。

  6. 600 位用户有 60 秒的加速期。大多数 /api/register 响应数据为空,导致 /api/verify_tac return 出现错误。从 /api/verify_tac 请求数据 return 错误是

{ "temp_token": "未找到", “战术”:“123456” }

如何测试第 6 个 return 有错误,而所有其他 5 个没有 return 错误。他们有相同的参数。

这是否意味着我的 api 请求过载?或者天气我的测试参数是错误的?

如果对于 600 个用户的响应 body 为空 - 那么我的预期是您的应用程序只是过载并且无法处理 600 个用户。

您可以添加一个侦听器 Simple Data Writer 配置如下:

这样您将能够看到失败请求的请求和响应详细信息。如果取消选中 Errors 框,JMeter 将存储所有请求的请求和响应详细信息。这样你就可以看到之前请求的响应消息,headers,body等,并确定失败原因。

还可以:

  1. 监控被测应用程序的基本资源使用情况(如CPU、RAM、磁盘、网络、Swap 使用情况等),可以使用 JMeter PerfMon Plugin
  2. 检查您的应用程序日志是否有任何可疑条目
  3. Re-run 使用 .NET 分析器工具进行测试,例如 YourKit,这样您将能够看到最“昂贵”的功能,并确定应用程序在哪里花费最多的时间以及什么是问题的根本原因