我基本上有这样的结构-How to implement nested loop in jmeter?。
外部循环按照它应该的方式工作。在我的例子中,外部循环执行3次,每次执行一个SQL查询。
内部循环的执行基于查询返回的行数,因此,如果第一个查询返回10行,则内部循环执行10次。这对于第一个外部循环和内部循环执行非常有效。问题是内部循环中的JMeter计数器对象在第二个查询中没有重置。
换句话说,如果外部循环中的第二个查询返回了5行数据,计数器仍将根据第一个查询从1计数到10。更糟糕的是,当它到达第三个查询的内部循环时,它将从6开始计数,一直计数到10,然后从1重新开始计数。
JMeter内部循环控制器拾取新的计数值并执行正确的次数,但是查询结果数据根据索引#(即1到#of_records)被写入新的DB,因此没有这个索引#,我不能正确地写出这个数据。
插入到顶层查询(ID,数据库名,方案名,sqltext,总计,平均持续时间,最大持续时间,平均读取数,最大读取数,平均写入数,最大写入数,平均CPU时间,最大CPU时间)VALUES(“${p_max_id_1}","${*V(P_数据库名称 *${p_cnt_tq})}","${*V(P_模式名称 *${p_cnt_tq})}","${V(P_SqlText${p_cnt_tq})}"",${*V(P_执行计数 *${p_cnt_tq})}","${*V(P_平均持续时间 *${p_cnt_tq})}","${*V(P_最大持续时间 *${p_cnt_tq})}","${*V(P_平均读取数 *${p_cnt_tq})}","${*V(P_最大读取数 *${p_cnt_tq})}","${*V(P_平均写入次数 *${p_cnt_tq})}"、${*V(P_最大写入次数 *${p_cnt_tq})}"、${*V(P_平均CPU时间 *${p_cnt_tq})}"、${_*V(P_最大CPU时间 *${p_cnt_tq})}”);
虽然这看起来很容易解决,但我还没有找到一种方法在内部循环中创建一个计数器,从1计数到每个外部循环返回的#_of_rows。有没有其他人遇到并解决了这个难题?
enter image description here
1条答案
按热度按时间os8fio9y1#
为什么你称它为“谜题”,为什么你期望计数器“重置”?你试过阅读文档吗?
允许用户创建一个计数器,该计数器可以在线程组中的任何位置引用。计数器配置允许用户配置起始点、最大值和增量。计数器将从起始点循环到最大值,然后从起始点重新开始,如此继续,直到测试结束。
您勾选了
Reset counter on each Thread Group Iteration
框,但“外部”循环控制器的迭代不是线程组迭代一般来说,我不明白为什么你需要这个计数器,循环控制器暴露了一个特殊的JMeter变量,它返回当前的迭代次数。
JMeter会将循环索引公开为一个名为
__jm__<Name of your element>__idx
的变量。它是从零开始的,但您可以使用__intSum() function轻松地将其加1