【问题标题】:Order of execution in JmeterJmeter中的执行顺序
【发布时间】:2021-08-01 18:58:08
【问题描述】:

我必须在 Jmeter 中测试 Post、Get、Delete API。它应该按顺序发生。我已将所有 3 个 API 添加到单个线程组中。它按顺序运行。我看了很多文档,虽然它是按顺序运行采样器的,但是当线程数增加时,并不能保证顺序。

所以,我创建了三个线程组并启用了顺序运行。 Post和Get没有问题。当 Delete API 调用时,它将删除该条目。当删除采样器再次运行时,数据库中将不存在该记录。删除应该在 Post 之后进行。

如何解决这个问题?还是在单个线程组中添加就可以了?

假设我有 3 个线程组,第一个用于 POST,下一个用于 Get,最后一个用于 Delete。我想只运行每个线程组一次。一旦它执行,下一个线程组应该开始。 一旦删除线程组运行,它应该再次调用第一个线程组。像这样,我想用 n 个线程运行循环 n 次。我可以这样做吗?

【问题讨论】:

    标签: jmeter load-testing jmeter-5.0 jmeter-4.0 jmeter-3.2


    【解决方案1】:

    保证顺序,每个线程(虚拟用户)倒过来执行Sampler,可以加__threadNum() function${__jm__Thread Group__idx}pre-defined variable跟踪这个

    如果您有不同线程组下的请求 - 无法保证顺序,您必须使用 Inter-Thread Communication Plugin 自己实现等待功能

    【讨论】:

    • 我正在使用单个数据进行测试。看你的形象。在很多地方,有多个删除请求按顺序执行。当第一个删除 api 执行时,数据从数据库中消失了。所以,下一个删除被执行,它会抛出一个 404
    • 如果您使用单个数据进行测试 - 请使用单个用户,否则您需要相应地parameterize your JMeter tests,以便每个虚拟用户将有自己的数据来创建/读取/删除。
    • 还有其他解决方法吗?我的意思是用一个数据来做到这一点?我可以使用任何控制器执行命令吗?
    • ? 如果您不懂英语,请尝试使用在线翻译工具
    • 参数化不适用于所有实时用例。假设我必须使用 100000 个具有 id 的 IoT 设备进行测试,我不能只是增加或放置一些随机 ID。必须创建模拟设备,这不是一件容易的事。也许,如果您从事“Hello World”项目,您可以这样做。
    【解决方案2】:

    在线程组内采样器总是按顺序运行。当您说线程数增加时,无法保证顺序到底发生了什么?

    编辑答案如下 您对多线程(多用户)场景感到困惑。如果您有超过 1 个线程,每个线程都将按照您给出的完全相同的顺序执行样本。

    当您移动到多用户场景时;没有两个线程将同步执行。这在技术上也是不可能的,因为您的数据库按顺序执行 DML 查询以避免错误数据和竞争条件。此外,您的服务器负载将导致一个线程 GET 操作运行慢于其他线程 POST 操作。如果您看到我在此编辑中附上的图片,那么您就会明白 Dmitri 和我想要表达的意思。

    仔细观察 Dmitri 所附屏幕截图中的红色块。它是同一个线程,所有操作都是按顺序进行的,并经过多次迭代。

    【讨论】:

    • 即使我增加了线程数,它也会按顺序运行。但是,没有这方面的支持文件。我读了很多文章。每个人都表示它按顺序运行,但这不是一项任务。我不能继续怀疑。
    • 我在 JMeter 中运行了多个负载测试,负载很重,并且从未在采样器上看到不同步执行。您可以继续进行测试
    • 我只用一个数据进行测试。请参阅以下评论中的图片。它没有按顺序运行
    • 更新了我的答案。
    • 谢谢拉胡尔。是的,我得到了总分。当您有一组有限的请求并且必须执行繁重的负载测试时,您可能会遇到同样的问题。我找到了解决这个问题的方法,很快就会发布。
    【解决方案3】:

    阅读 Rahul 和 Dmitri 的 cmets。如果您有每个线程组的唯一数据,您将不会遇到任何问题。如果您的输入数量有限,请尝试此解决方案。临界区控制器强制请求由单个线程执行,并采用命名锁。

    想了解更多,Read this article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多