首页 > 解决方案 > 非 GUI 模式下的 JMeter 测试不可信

问题描述

GUI 上的测试脚本可以完美运行,但在非 GUI 模式下却不行。显示终端测试执行的图像

说明:我在测试计划中有 3 个线程组,其中第一个Thread Group创建 3 个.csv文件,并预计将 CSV 文件中的数据提供给second Thread Group.

对于少数测试运行,非 GUI 模式效果很好,但是,像这样 [终端显示测试运行] 的测试间歇性地根本不创建CSV文件,有时,第三个线程组根本不执行。

我注意到的问题是:

  1. 在非 GUI 测试期间,文件没有被创建,所以这就是下一个线程组无法获取和使用CSV文件中的变量的原因,而且

  2. 第二个可能是:我在 ${__setProperty(prop_folder_Path,${File_Path})} 中保存文件夹和文件路径并获取道具。 ${__property(prop_folder_Path)}在另一个线程组中 - >有时这个属性函数不起作用并且文件保存在/bin目录中

    有没有办法${__property(prop_folder_Path)}在 BeanShell POSTProcessor 中使用价值?

我相信任何在 GUI 中有效的东西在非 GUI 中也应该同样有效,对吗?

我刚刚注意到在非 GUI 中运行测试时,输出文件正在 /bin 文件夹中创建,如此处所示

任何解决此问题的建议。谢谢

标签: jmeterjmeter-pluginsjmeter-4.0

解决方案


我的期望是您的“.csv”文件创建以某种方式失败,因此第二个线程组由于缺少文件而无法运行。

JMeter 没有任何内置功能可以将某些内容写入文件,因此我认为您使用不起作用的JSR223 脚本实现了一些自定义逻辑。原因可能在于:

  1. 如果您从另一个文件夹运行 JMeter,可以在不同的位置创建 .csv 文件,请尝试使用完整路径以防万一。
  2. 非 GUI 模式往往比 GUI 模式快,因此可能是多线程问题的情况,即当多个线程试图同时将数据写入同一个文件并发生冲突或产生格式不正确的数据时。

在这两种情况下,答案都将存在于jmeter.log文件中,检查它是否有任何可疑条目并修复原因。


一般来说,使用文件在线程组之间传递数据并不是最好的主意,我建议改为在内存中进行,例如:

  1. 在第一个线程组中,使用__setProperty()函数将存储在 CSV 文件中的数据转换为 JMeter 属性,例如:

    ${__setProperty(foo,bar,)}
    
  2. 在第二个线程组中使用__P() 函数读取数据,如:

    ${__P(foo,)}
    

更多信息:编织一颗珍珠二:如何在不同线程组中使用变量


推荐阅读