【问题标题】:second request is not running as many times as first request when ifcontroller is used使用 ifcontroller 时,第二个请求的运行次数不及第一个请求的次数
【发布时间】:2015-12-09 16:51:52
【问题描述】:

我正在使用 jmeter 发送两个 http 请求,一个用于我的 Web 应用程序的登录页面,另一个在成功登录后发送到另一个页面。我添加了添加第二个 http 请求的 ifcontroller 元素。当我使用 100 个请求且加速周期低于 1​​0 秒的测试计划测试时,我看到在聚合报告面板中,第一个请求向 Web 应用程序发出了 100 个请求,但第二个请求只发出了 75 个请求。第二个请求计数并不总是相同,它每次都在变化,但我从来没有像第一个请求那样将计数设为 100。当我将加速周期增加到 10 秒时,只有我可以看到第一个和第二个请求计数为 100。这是否意味着 jmeter 客户端无法为第二个请求启动足够的线程数。

我在 4 核机器上使用 4GB 内存。如果我向我的电脑添加更多内存,情况会有所改善,因为在上述情况下,我只能在 1 秒内发送 10 个请求,我想在一秒内发送更多请求。

【问题讨论】:

    标签: tomcat jmeter


    【解决方案1】:

    根据控制器的条件,可能是第二个请求依赖于第一个请求成功的情况,即如果您使用${JMeterThread.last_sample_ok} 变量作为条件,则第二个采样器将仅在第一个采样器成功时触发,因此如果登录失败 -你不会看到第二个请求。有关详细信息,请参阅How to Use JMeter's 'IF' Controller and get Pie

    关于吞吐量,只要您遵循几个简单的步骤,即可:

    • non-GUI mode 中运行 JMeter
    • 禁用所有监听器
    • 明智而高效地使用断言、前置/后置处理器、定时器

    应该可以从 4 核 / 4Gb RAM 机器模拟数百个并发线程。只要确保您提供足够的线程(虚拟用户)和迭代。

    【讨论】:

    • 谢谢,我会检查这个。同时,我在 ifController 中使用 (${JMeterThread.last_sample_ok}==true) && (${__property(ThreadValue,,)} == ${__threadNum}) 条件并选中 Evaluate for All 选项。未选中将条件解释为变量表达式选项。在登录页面附加的 BSFPostProcessor 节点中,脚本编写为 ${__setProperty(ThreadValue,${__threadNum},)}。希望这很好。
    • 我认为问题解决了。我观察到的是,当我删除 ifController 元素中的第二个条件,即 (${__property(ThreadValue,,)} == ${__threadNum}) 和用 BSF PostProcessor 编写的脚本时,我能够发送超过 100 个请求在一秒钟内。我的猜测是,第二个条件是导致单线程以同步方式发送两个请求。这就是为什么,发送 100 个请求需要更多时间。无论如何,ifController 中的第一个条件确保只有在第一个请求成功时才会发送第二个请求。
    猜你喜欢
    • 2015-10-05
    • 2020-05-02
    • 2020-05-31
    • 1970-01-01
    • 2022-01-21
    • 2015-11-06
    • 2018-06-05
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多