如何使用 while 控制器和 csv 数据集配置元素来迭代整个 csv 文件,而不管遇到错误?

问题描述 投票:0回答:1

在 Jmeter 中,我有一个 CSV 数据集配置,指向一个 csv 文件,其中包含一列和多个表名。我想迭代整个列表直到文件末尾并为列表中的每个表执行数据库查询。我取得了成功,但只有一个问题: 当 JDBC 请求采样器对不存在的表(无论出于何种原因)执行 SQL 查询时,while 循环会中断,并且文件中的其余行不会生成所需的查询。

我有一个没有设置条件的 while 控制器,在它下面有一个 CSV 数据集配置,我指向一个 csv 文件,该文件仅在一列下存储了很多名称:TableName。

我还有一个 JDBC 请求元素,它使用 {query} 变量中的任何值进行查询。 该查询变量由预处理器填充:

// Read the value from the CSV Data Set Config
def tableName = vars.get("tableName");
log.info("Target table name:" + tableName)

// Replace the placeholder in the query with the table name from the current iteration of the CSV file
String query = "SELECT count(*) FROM " + tableName + ";" ;

vars.put("query", query);

log.info("Target query:" + query )

我有一个后处理器,它可以帮助我将 JDBC 请求元素中的表名和计数存储到 LinkedList 中,然后在循环外部打印该 LinkedList。

我的问题是,如果列表中的表之一不存在,则 JDBC 请求采样器会记录错误并且 while 循环被破坏:

错误示例: 错误:关系“schema.tablename”不存在, 位置:22

所以我需要一种方法来循环遍历所有 CSV 文件的内容直到文件末尾,并且当 While 循环中的 JDBC 请求遇到错误时不停止。

任何帮助将不胜感激。

jmeter performance-testing
1个回答
0
投票

最简单的解决方案是将 While 控制器替换为 Loop 控制器

您可以使用以下 __groovy() 函数作为循环计数:

${__groovy(new File('/path/to/your/file.csv').readLines().size(),)}

这样,循环控制器将迭代与 CSV 文件中的行数一样多的次数,而不是更多,也不少于。

还要仔细检查您的线程组设置,并确保“采样器错误后要采取的操作”设置为

Continue

© www.soinside.com 2019 - 2024. All rights reserved.