基于响应字段的jmeter性能测试

Performance test with jmeter based on response field

我正在尝试 运行 在支持 ElasticSearch 的 JSON REST API 上进行一些性能测试,以尝试不同过滤器对 ElasticSearch 的影响。

我不想使用标准的 jmeter 输出,因为在线时间太杂乱了。

我的 API returns 基于 took 在 ElasticSearch 上花费的时间(我们使用的 java RestHighLevelClient 中的 tookInMillis)属性 的 org.elasticsearch.action.search.SearchResponse。这在 API 响应的 time_taken 属性 中返回。

这是一个示例响应

{
    "page_size": 1,
    "current_page": 1,
    "number_of_pages": 2495,
    "total_results": 2495,
    "additional_results_exist": false,
    "time_taken": 55,
    "results": [
        {       
                // object here, we don't really care
        },
        {            
                // object here, we don't really care
        }
    ],
    "request_id": "06e8001c-caf2-46f4-bf16-08c8d1ceb079"
}

因此,用例为:

我找到了几个参考资料,提到了 JSON 提取器、RegEx 提取器、beanshell,但我没有设法让任何东西工作。

所以,我会真的感谢最小的工作设置。

我使用的jmeter版本是5.4.3

如果您能提供来自 ElasticSearch 的响应,我们将真的感激不尽,因为我们不知道它看起来如何,因此我们无法想出一个合适的JSON Extractor 设置。

我不知道“time_taken”是什么,在 Elastic Search 中它叫做 took:

{
  "took": 1, <--------------- I assume you want this value
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 0,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [
      
    ]
  }
}

如果是这种情况,可以使用 JSON 配置如下的提取器获得:

如果您想使用 JMeter 侦听器,您可以使用 Dummy Sampler 创建一个“假”采样器,您可以在其中控制响应时间:

这样,“假”采样器的响应时间将来自 took ElasticSearch 响应 JMeter 将计算百分位数。

演示: