如何使用Jmeter进行删除接口压力测试

问题

在使用 JMeter 进行压力测试时,由于在执行删除操作后,相关数据将被清除,这导致在高并发场景下后续的删除调用可能会出现错误,所以如何进行高并发的类似删除操作的压力测试?

解决方案

步骤 1: 添加 HTTP 请求并获取响应

1.创建一个 HTTP 请求:在 JMeter 中,添加一个 HTTP 请求(例如,获取商品的接口)。
2. 设置请求的 URL 和方法:配置请求的 URL 和方法(如 GET)。
3. 添加响应断言(可选):以确保请求成功。

步骤 2: 使用 JSONPath 提取 ID

  1. 添加 JSON 提取器:

    • 在 HTTP 请求下,右键点击并选择 添加 > 后置处理器 > JSON 提取器
  2. 配置 JSON 提取器:

    • 名称:为提取器命名(例如 Extract IDs)。
    • JSONPath 表达式:输入以下 JSONPath 表达式来提取所有的 id
      $.data.list[*].id
      
    • 变量名称:设置变量名(例如 idList),这个变量将包含所有提取到的 id 值。
    • 匹配数字:可以设置为 -1,表示提取所有匹配的值。

步骤 3: 使用提取的 ID 进行删除请求

  1. 添加新的 HTTP 请求:用于执行删除操作。
  2. 设置请求的 URL 和方法:例如,DELETE 请求。
  3. 构建请求体或路径:

商品删除接口为 /admin/goods/delete

  • 注意,idList 中的值将以逗号分隔(如 id1,id2,id3),因此您可能需要使用 Beanshell 预处理器JSR223 预处理器 将其转换为适合您 API 的格式(例如:逐个调用)。

例子:使用 JSR223 预处理器处理 ID 列表

如果删除接口只接受一个 ID,您可以通过以下步骤来循环调用每个 ID:

  1. 添加 JSR223 预处理器:在删除请求之前添加一个 JSR223 预处理器。
  2. 使用以下 Groovy 代码:
    def ids = vars.get("idList").split(",")
    for (id in ids) {
        // 使用当前 id 调用删除接口
        // 这里可以调用具体的删除逻辑
        log.info("准备删除 ID: " + id)
        // 例如:可以通过 JMeter 的方法发起 DELETE 请求
    }
    

步骤 4: 运行测试

运行 JMeter 测试计划,确保一切设置正确。提取的 id 将用于删除请求,并在每次请求中成功删除相应的资源。