首页 > 解决方案 > JSON 提取器 - 提取数据 - 不能应用于原语

问题描述

我正在使用 JMeter 5.1.1 并尝试进行负载测试。我添加了 JSON Extractor 以从 GET 请求中提取用户上下文,如下所示,

创建变量的名称:

schoolId; 
teacherAccountId; 
teacherProfileId; 
teacherUserName; 
schoolLogoId;

JSON路径表达式:

$.[?(@.type == 'SCHOOL')].id; 
$.[?(@.type == 'SCHOOL')].accountId; 
$.[?(@.type == 'SCHOOL')].profileId; 
$.[?(@.type == 'SCHOOL')].username; 
$.[?(@.type == 'SCHOOL')].icon.id;

当我执行 800 个用户线程时,客户端会出现以下错误。

它将为所有分配的变量(teacherProfileId; teacherUserName; schoolLogoId;)运行一个循环

然后在从服务器端给出错误之后 - java.lang.OutOfMemoryError: Java heap space Dumping heap to java_pid23134.hprof...

我能为此做些什么?JSON 提取器配置有什么问题吗?

注意 - 我已经将 JVM 堆大小增加到 4G

 Error processing JSON content in JSON Extractor -Extract user data from user context, message: Filter: [?]['teacherAccountId'] can not be applied to primitives. Current context is: org.apache.http.conn.ConnectTimeoutException: connect timed out
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
        at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:336)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374)

....

标签: javajmeterperformance-testing

解决方案


您没有得到任何有效的 JSON 作为响应并调查

在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect 处连接超时

看起来您的应用程序过载,因此您没有收到正确的响应。

与JMeter脚本无关,需要报性能错误。如果时间允许,您可以增强您的报告以包含:

  1. 可以毫无问题地访问应用程序的最大用户数(考虑使用合理的启动期逐步加入这 800 个用户)
  2. 饱和点- 知道这个阶段的最大吞吐量是多少以及用户数量是多少(您可以使用 ie Hits/s vs Active Threadslistener检查它
  3. 应用程序是否有足够的空间来运行 CPU、内存等,因为错误可能是由于缺乏必要的资源引起的。您可以使用JMeter PerfMon Plugin检查它
  4. 检查您的应用程序日志是否有任何可疑条目
  5. 负载减少时应用程序是否恢复

推荐阅读