2016-08-19 59 views
0

我有一个CSv数据集配置,我在while循环中使用。我在一个模块中有这个,并在我的测试中多次使用这个相同的模块。使用CSV数据集配置和EOF条件的问题

我的第一个问题是,我已经设置了while循环与此条件:

${__javaScript("${data}"!="<EOF>")} 

“数据”是在我的CSV文件中的第一列。除了最后一次将$ {data}设置为“EOF”并对其执行所有测试的迭代之外,此工作正常。我希望它在此之前停止,而不是在所有测试都运行一次之后。

我的其他问题是,当我稍后再使用此模块时,$ {data}仍然设置为“EOF”,并且根本没有运行测试。

回答

1

为了避免这种<EOF>位只需将您的逻辑置于If Controller之下并使用"${data}" != "<EOF>"作为“条件”

While Controller + IF

请参阅Using the While Controller in JMeter指南详细解释这个和其他常见用例。


UPD。重复使用相同的CSV文件:

添加Beanshell Sampler 1日在控制器后的第2个在控制器之前和“脚本”区域使用下面的代码:

import org.apache.jmeter.services.FileServer; 
FileServer.getFileServer().closeFile("yourfile.csv"); 
vars.put("data", ""); 

以上脚本的“接近”原CSV文件,以便稍后可以在脚本中重复使用并“清除”${data}变量,因为它包含<EOF>值。

有关在JMeter测试中使用Beanshell脚本的详细信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component指南。

+0

有没有办法让我设置csv文件重新开始,所以我可以在以后的其他while循环中再次使用它? – user3871995

+0

检查水平线下方原始答案的更新。让我知道你是否需要一个示例测试计划或其他什么 –

0

如果你使用循环控制器,CSV行数是迭代次数,你可以避免这种情况。只是把这个代码进入BeanShell的采样:

import org.apache.commons.io.FileUtils; 

int lines = FileUtils.readLines(new File("/home/username/csv.file")).size(); 
vars.put("linesCount", String.valueOf(lines)); 

之后,你可以在回路控制器使用lineCount

如果您的data变量需要恢复到原始状态,您可以将默认值存储在其他变量中,并在循环结束时使用Beanshell pre/post proccesor将数据恢复到它。

编辑:

或者你可以插入如果你的控制器控制器虽然和处理所有子元素只有数据不等于EOF

${__javaScript("${data}"!="<EOF>")} 
+0

我认为第二个选项会更容易,但是这不会解决我的其他问题,以便在测试中再次使用while循环和csv文件 – user3871995

+0

为什么? csv是否在测试中发生变化? –

+0

csv是同一个文件,但while循环位于测试中稍后再次调用的模块中。当它被第二次调用时,$ {data}仍然在EOF – user3871995