在 JMeter 中,如何在用户参数或 CSV 数据集配置中设置多个动态变量

In JMeter how do I set multiple dynamic variables in User Parameters or CSV Data Set Config

JMeter 的新手(也是很长一段时间的 Stack Overflow 侦听器,但第一次来电,所以请放轻松),如有任何帮助,我们将不胜感激。

我正在尝试设置一个 JMeter 测试,该测试使用多个动态生成的访问令牌来跨场景 运行。我目前有一组使用 CSV Data Set Config 的数据,其中包含用户电子邮件和密码的登录凭据,例如:

email1@email.com,password1
email2@email.com,password2

接下来我发送一个 HTTP POST request to the Login service which generates an accessToken. Then, I am using the JSON Extractor to grab the generated accessToken. After that I am using the BeanShell Assertion 来存储 accessToken property/variable。

我的问题似乎出在这最后一步,因为它只会存储最后生成的变量,而不是每个生成的 accessTokens。我希望能够 store/overwrite 为每个电子邮件密码组合获取 accessToken。我希望它像这样 modify/populate CSV 文件:

email1@email.com,password1,accessToken1
email2@email.com,password2,accessToken2

我也试过使用 Pre Processor > User Parameters

Screen shot of User Parameters

我想将 "userBearerToken" 变量 update/overwrite 与测试一起使用,但我找不到这样做的方法,或者目前是否可以这样做。

我发现很难说出我想问的内容,但基本上我想存储多个动态生成的变量(发生变化和超时的 accessTokens)并在其他测试中使用它们。我不关心哪个组件可以处理这个(CSV 或用户参数),但我需要能够存储这些变量及其相应的电子邮件密码凭据。

如果您想将 accessToken 值存储到 JMeter 属性 中以便在其他 Thread Group(s) 中使用,请注意属性对于整个 JVM 是全局的并且一直保留到JMeter 重新启动,因此如果您定义单个 accessToken 属性 - 每个 JMeter 线程(或迭代)将覆盖该值。

解决方案是使用当前线程(或迭代)编号作为前缀或后缀,这可以使用 __${__threadNum} function 或相关的 JMeter 变量来完成,具体取决于迭代的定义方式或两者。

示例设置:

  1. 在第一个线程组中:${__setProperty(access_token_${__threadNum},bar,)}
  2. 在第二个线程组中:${__P(access_token_${__threadNum},)}

演示:


如果你想将值保存到一个文件中,写入当前文件并不是最好的主意,因为你可以(而且很可能会)得到格式错误的文件,因为 race condition. So I would recommend using Sample Variables 属性 代替。

如果将下一行添加到 user.properties 文件:

sample_variables=邮箱、密码、accessToken

JMeter 会将名为 ${email}${password}${accessToken} 的变量及其值存储在 .jtl 结果文件中,该文件基本上是可以重复使用的 CSV 文件其他任何地方。

但是,如果您需要仅存储凭据和令牌,您可以使用 Flexible File Writer 插件并将其配置为将上述变量值保存到单独的文件中,相关配置如下简单如:

variable#0,variable#1,variable#2

您可以使用 JMeter Plugins Manager

安装 Flexible File Writer 插件