Jmeter 检索所有嵌入资源不是下载资源

Jmeter 检索所有嵌入资源不是下载资源,jmeter,jmeter-plugins,jmeter-4.0,Jmeter,Jmeter Plugins,Jmeter 4.0,我有一个非常简单的Jmeter测试计划,其中包含一个线程组,并由基本配置元素支持。 我的HTTP请求采样器只指向应用程序的主页,它提供了登录身份验证功能 没有什么可以分享的事实 当我在chrome中访问页面并在chrome developer中查看加载时间时,通过并行下载嵌入式资源,同样的过程在5秒内完成 当我通过jmeter录制相同的内容并开始重新播放时,需要12秒 接下来,我禁用了所有非html资源,并标记了主页以下载嵌入式资源 当我启用复选框Download all embedded re

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

没有什么可以分享的事实

  • 当我在chrome中访问页面并在chrome developer中查看加载时间时,通过并行下载嵌入式资源,同样的过程在5秒内完成

  • 当我通过jmeter录制相同的内容并开始重新播放时,需要12秒

  • 接下来,我禁用了所有非html资源,并标记了主页以下载嵌入式资源

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

  • 我认为这可能是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)
    

    如果您在enterprise中进行测试,因此有一个enterprise proxy,那么您访问的网站可能需要一些规则来允许下载所有资源,因此您可能需要调整命令行选项:

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

    您说JMeter挂起,要进行调试,请使用“帮助”>“创建线程转储”并在问题中显示输出文件的内容

    我猜它正在尝试建立连接,因为它没有访问权限,所以挂起,所以您可以在的高级选项卡中设置:

    • 连接超时
    • 响应超时

  • 确保在浏览器开发人员工具中勾选“禁用缓存”:

    在这种情况下,您的浏览器可能不会发出实际请求并从磁盘或内存缓存返回嵌入式资源

  • 添加到测试计划中以模拟浏览器缓存
  • JMeter所以您可能正遭受JMeter错误的困扰。因此,您可以考虑使用,即作为边缘情况的解决方案。<李>
    我实现了第1步和第2步,但是Jmeter挂起时有100%的CPU和90%的内存。我只有三个选择,这是我的B计划。我已经上传了堆转储快照以进行进一步的故障排除。我执行了步骤3,它模拟了浏览器的时间。虽然它解决了我的问题,但下载所有嵌入式资源失败的原因仍然是一个谜。我用#3中提到的解决方案来解决这个问题