JMeter 线程 运行 一次,而循环计数器设置为 'forever',吞吐量计时器恒定
JMeter threads run once while loop counter set to 'forever' with constant throughput timer
我在 JMeter 中有一个测试 memSQL 数据库的测试计划,它似乎 运行 每个线程只执行一次,而不是永远 运行。
- 它有 3 个线程组。
- 每个都有自己的 JDBC 请求元素(1 个用于删除,1 个用于插入,1 个用于 select)。
- 我希望所有请求都从 csv 文件中读取参数。我尝试使用整个测试计划的 1 个 CSV 数据集配置元素(共享模式设置为所有活动线程)和每个线程组 1 个(模式设置为当前线程组)进行测试。
- 用于删除和插入的 JDBC 请求元素具有为查询类型属性设置的准备好的更新语句。
- select 的一个请求元素具有为该字段设置的准备好的 select 语句值。
- 在我尝试过的所有情况下,CSV 数据集配置属性都设置为:在 EOF 时回收 - 真,在 EOF 时停止线程 - 假。
- 我在整个测试计划中使用了一个恒定的吞吐量计时器元素。它被设置为基于属性的所有活动线程(共享)。
- 如标题中所述 - 每个线程组都勾选了永远循环计数框。没有使用调度程序,错误时继续按钮是 selected(尽管没有任何)。
- 在摘要报告中,我没有从数据库中得到任何 java 异常。只有查询输出和延迟时间。
如前所述,我已经为所有线程组尝试了 1 个 csv 源文件。现在我创建了 3 个不同的 csv 文件,但问题仍然存在。我已尝试将所有线程加速时间设置为 0、0.1、1、2,但仍然没有成功。
查看我创建的摘要报告后,我总是看到相同数量的样本。我有 3 个线程组,每个线程组有 80 个线程,所以我总是得到 240 个 samepls。即使测试持续了 1、2、3 分钟等。我尝试通过关机和停止测试来结束测试,并且两者都得到了相同的数字。
我希望线程继续运行,似乎它们只完成一次工作,然后在测试继续时停止。这与恒定吞吐量计时器有什么关系吗?我在这里错过了什么?
TL;DR
似乎所有配置都正确,但是常量吞吐量计时器中的实际请求数太低了。另外,JMeter 尝试设置每分钟的吞吐量,因此使用该计时器进行的测试应该比 1 或 2 分钟长。
非常愚蠢的错误结论:检查您的吞吐量值,测试更长时间。希望这对其他人有帮助。
原因是,在服务器 运行 非 gui 版本的 jmeter 中,我创建了一个 shell 脚本来获取当前测试所需的每秒请求数,并将其插入为计时器元素中的适当字段输入计划时间 60。问题是我没有乘以 60,所以吞吐量非常低。如此之低,以至于对于几分钟的测试,我总是得到相同的样本数。
如果我要测试更长的时间,我会看到创建了更多样本,但由于 jmeter 延迟线程以模拟低吞吐量,我只看到了第一次迭代。
我在 JMeter 中有一个测试 memSQL 数据库的测试计划,它似乎 运行 每个线程只执行一次,而不是永远 运行。
- 它有 3 个线程组。
- 每个都有自己的 JDBC 请求元素(1 个用于删除,1 个用于插入,1 个用于 select)。
- 我希望所有请求都从 csv 文件中读取参数。我尝试使用整个测试计划的 1 个 CSV 数据集配置元素(共享模式设置为所有活动线程)和每个线程组 1 个(模式设置为当前线程组)进行测试。
- 用于删除和插入的 JDBC 请求元素具有为查询类型属性设置的准备好的更新语句。
- select 的一个请求元素具有为该字段设置的准备好的 select 语句值。
- 在我尝试过的所有情况下,CSV 数据集配置属性都设置为:在 EOF 时回收 - 真,在 EOF 时停止线程 - 假。
- 我在整个测试计划中使用了一个恒定的吞吐量计时器元素。它被设置为基于属性的所有活动线程(共享)。
- 如标题中所述 - 每个线程组都勾选了永远循环计数框。没有使用调度程序,错误时继续按钮是 selected(尽管没有任何)。
- 在摘要报告中,我没有从数据库中得到任何 java 异常。只有查询输出和延迟时间。
如前所述,我已经为所有线程组尝试了 1 个 csv 源文件。现在我创建了 3 个不同的 csv 文件,但问题仍然存在。我已尝试将所有线程加速时间设置为 0、0.1、1、2,但仍然没有成功。
查看我创建的摘要报告后,我总是看到相同数量的样本。我有 3 个线程组,每个线程组有 80 个线程,所以我总是得到 240 个 samepls。即使测试持续了 1、2、3 分钟等。我尝试通过关机和停止测试来结束测试,并且两者都得到了相同的数字。
我希望线程继续运行,似乎它们只完成一次工作,然后在测试继续时停止。这与恒定吞吐量计时器有什么关系吗?我在这里错过了什么?
TL;DR
似乎所有配置都正确,但是常量吞吐量计时器中的实际请求数太低了。另外,JMeter 尝试设置每分钟的吞吐量,因此使用该计时器进行的测试应该比 1 或 2 分钟长。
非常愚蠢的错误结论:检查您的吞吐量值,测试更长时间。希望这对其他人有帮助。
原因是,在服务器 运行 非 gui 版本的 jmeter 中,我创建了一个 shell 脚本来获取当前测试所需的每秒请求数,并将其插入为计时器元素中的适当字段输入计划时间 60。问题是我没有乘以 60,所以吞吐量非常低。如此之低,以至于对于几分钟的测试,我总是得到相同的样本数。
如果我要测试更长的时间,我会看到创建了更多样本,但由于 jmeter 延迟线程以模拟低吞吐量,我只看到了第一次迭代。