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

时间:2018-11-13 23:35:48

标签: jmeter performance-testing load-testing

JMeter的新手(长时间的Stack Overflow侦听器,但是第一次调用者很长时间,所以对我来说请放心),因此将不胜感激。

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

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

接下来,我向登录服务发送HTTP POST request,该服务生成一个accessToken。然后,我使用JSON Extractor来获取生成的accessToken。之后,我使用BeanShell Assertion存储accessToken属性/变量。

我的问题似乎就在这最后一步,因为它只会存储最后生成的变量,而不是每个生成的accessTokens。我希望能够存储/覆盖每个电子邮件密码组合的抓取的accessToken。我希望它像这样修改/填充CSV文件:

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

我也尝试使用Pre Processor > User Parameters

Screen shot of User Parameters

我想在测试中同时更新/覆盖“ userBearerToken”变量,但是我找不到解决办法,或者即使目前可以这样做。

我发现很难说出我要问的内容,但基本上我想存储多个动态生成的变量(更改并超时的accessTokens)并将其用于其他测试。我不在乎哪个组件(CSV或用户参数)可以处理此问题,但是我需要能够将这些变量及其相应的电子邮件密码凭据存储起来。

1 个答案:

答案 0 :(得分:0)

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

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

示例设置:

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

演示:

enter image description here


如果您想将值保存到写入当前文件的文件中,则不是最好的主意,因为race condition的形式会导致文件格式错误(很可能会)。因此,我建议改为使用Sample Variables属性。

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

sample_variables =电子邮件,密码,accessToken

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

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

variable#0,variable#1,variable#2

enter image description here

您可以使用JMeter Plugins Manager

安装Flexible File Writer插件。

enter image description here