【问题标题】:JMeter- user defined variable not changing its valueJMeter-用户定义的变量不改变其值
【发布时间】:2018-12-07 14:39:41
【问题描述】:

我有一个测试计划,其中包含一个线程组、一个 HttpRequest 采样器、JRS223PreProcessor 和一个 csv 数据集配置。我需要在运行时从 csv 读取第 2 列的当前值并在我的 JSR223 PreProcessor 中使用它。为此,我在测试计划中定义了一个变量:

名称 ${__CSVRead(C:/Users/marial/Desktop/csvs/csv_hotelCodeReq.txt,2)

在 JSR223 PreProcessor 中,我是这样处理的:

String name= new String(vars.get("name"));

我希望这个值在读取的每一行上都会发生变化,但事实并非如此,它总是采用遇到的第一个值。有谁知道为什么?

更具体地说,如果我有 csv 文件:

1,2,firstName1:lastName1

3,2,firstName2:lastName2

并且循环计数 = 2, users=1 比 name 的值是:

循环1:名字1:姓氏1

循环2:名字1:姓氏1

其他值被正确处理,所以它转到下一行。

【问题讨论】:

    标签: csv groovy jmeter jsr223


    【解决方案1】:

    根据User Defined Variables 文档:

    请注意,测试计划中的所有 UDV 元素(无论它们位于何处)都在开始时进行处理。

    因此,您的__CSVRead() function仅在测试启动期间评估一次

    解决方案是将函数移动到 JSR223 PreProcessor 的“参数”部分,您将能够在 Groovy 脚本中以 Parameters 的形式访问函数输出,例如:

    String name = Parameters
    

    演示:

    这样每次调用 JSR223 PreProcessor 时都会执行 __CSVRead() 函数。查看Apache Groovy - Why and How You Should Use It 文章以了解有关 JMeter 中的 Groovy 脚本的更多信息

    【讨论】:

    • 感谢您的回答,它有点用处,但并不是我想要的。如果我有 2 个线程,它就可以工作。但我正在寻找一种适用于 1 个线程(用户)和 2 个循环计数的解决方案。我试过这个,现在它总是用第二个名字,就我而言。但无论如何,我也能找到解决问题的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多