【问题标题】:Retrieve All Embedded Resources is not downloading resources检索所有嵌入式资源未下载资源
【发布时间】:2019-01-26 12:45:32
【问题描述】:

我有一个非常简单的 Jmeter 测试计划,其中包含一个线程组并由基本配置元素支持。 我的 HTTP 请求采样器只指向应用程序的主页,该主页提供登录验证功能。

分享一些事实

  1. 当我在chrome中访问该页面并在chrome developer中查看加载时间时,同样在5秒内完成,嵌入式资源并行下载。

  2. 当我通过 jmeter 录制相同内容并开始重播时,需要 12 秒

  3. 接下来我禁用了所有非html资源,并在首页标记为下载嵌入资源。

  4. 当我启用复选框 Download all embedded resources with parallel download 复选框并且值设置为 6 时,jmeter 进入挂起状态。

  5. 我认为这可能是 Jmeter 设置的问题,然后我尝试了 www.w3schools.com 网站,我能够在主页上进行参考,并且在回放期间下载了所有嵌入式资源。

请帮助我了解我尝试编写脚本的页面是否涉及任何安全性,我们无法通过脚本下载并行资源或可能的更正。

应用程序可通过 https 协议访问。

堆转储

"Image Fetcher 0" Id=5734 TIMED_WAITING on java.util.Vector@567840bf
    at java.lang.Object.wait(Native Method)
    -  waiting on java.util.Vector@567840bf
    at sun.awt.image.ImageFetcher.nextImage(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

"ResDownload-Thread-5659" Id=5709 TIMED_WAITING on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at sun.misc.Unsafe.park(Native Method)
    -  waiting on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source)
    at java.util.concurrent.SynchronousQueue.poll(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    ...

"ResDownload-Thread-5521" Id=5704 TIMED_WAITING on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at sun.misc.Unsafe.park(Native Method)
    -  waiting on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source)
    at java.util.concurrent.SynchronousQueue.poll(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    ...

"ResDownload-Thread-5545" Id=5703 TIMED_WAITING on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at sun.misc.Unsafe.park(Native Method)
    -  waiting on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source)
    at java.util.concurrent.SynchronousQueue.poll(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    ...

"ResDownload-Thread-5555" Id=5702 TIMED_WAITING on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at sun.misc.Unsafe.park(Native Method)
    -  waiting on java.util.concurrent.SynchronousQueue$TransferStack@c26b878
    at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source)
    at java.util.concurrent.SynchronousQueue.poll(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

【问题讨论】:

    标签: jmeter jmeter-plugins jmeter-4.0


    【解决方案1】:
    1. 确保在浏览器开发者工具中勾选Disable cache 框:

      可能是您的浏览器没有发出实际请求并从磁盘或内存缓存返回嵌入式资源

    2. HTTP Cache Manager 添加到您的测试计划中,以模拟浏览器缓存。
    3. JMeter might fail to recognise certain resources like images embedded in CSS files 所以您可能遇到了 JMeter 错误。因此,您可以考虑使用 Parallel Controller 作为边缘情况的解决方法。

    【讨论】:

    • 我实现了第 1 步和第 2 步,但 Jmeter 在 100% CPU 和 90% 内存时挂起。我只剩下 3 个选择,这对我来说是 B 计划。我已经上传了堆转储快照以进行进一步的故障排除。
    • 我实现了第 3 步,它正在模拟浏览器的时间。虽然它解决了我的问题,但下载所有嵌入式资源失败的原因仍然是个谜。
    • 我正在使用#3 中提到的解决方案来解决问题
    【解决方案2】:

    如果您是从企业进行测试并因此拥有企业代理,那么您访问的网站可能需要一些规则来允许下载所有资源,因此您可能需要调整命令行选项:

    另外,请注意,您不应对您的应用程序可能正在使用的第三方网站(Google Analytics、跟踪器...)进行负载测试,因此请使用排除模式来忽略这一点。

    您说 JMeter 挂起,要调试,请使用 Help > Create a Thread Dump 并在您的问题中显示输出文件的内容。

    我的猜测是它正在尝试建立连接,因为它无法访问它挂起,所以你可以在HTTP Request的高级选项卡中设置:

    • 连接超时
    • 响应超时

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多