JMeter - 通过多个CSV文件根据用户凭据访问特定端点

时间:2017-11-08 17:18:20

标签: jmeter performance-testing load-testing blazemeter ruby-jmeter

我的JMeter测试:

  • 使用登录凭据迭代CSV文件(logins.csv),并使用其唯一标识符用户CsvDataSetConfig
  • 登录
  • 根据登录凭据(来自logins.csv的唯一标识符),识别并加载<user_identifier>_invoices.csv格式的第二个文件,然后该文件具有查看该用户发票的必要路径。

简化测试设置:

ThreadGroup
> CsvDataSetConfig - file: logins.csv, variables: user_identifier,email,password, sharing_mode: all threads
> `SignIn` TransactionController using email and password from above CSV file to login via series of HTTP Requests
> UserParameters - USER_IDENTIFIER,INVOICE_CSV_FOR_USER
> BeanShellSampler
  props.setProperty("USER_IDENTIFIER", vars.get("user_identifier"));
  props.setProperty("INVOICE_CSV_FOR_USER","${__P(USER_IDENTIFIER)}_invoices.csv");
> WhileController - condition: ${__javaScript("${invoice-id}" != "<EOF>",)}
  > CsvDataSetConfig - file: ${__P(INVOICE_CSV_FOR_USER,)}, variables: invoice-id, sharing_mode: current thread
  > `ViewInvoice` TransactionController with HTTP Request to url `../${invoice-id}`

# logins.csv
c7beaa99c6d99fa7754fc2213f9b17b8,foo@example.com,password321
9c8466bee65e39c9d3cf715e42933c3b,bar@example.com,password456

# c7beaa99c6d99fa7754fc2213f9b17b8_invoices.csv
f54eca1cbbba4a97c1dc459e0ba64970
0024f2cdf28dd7ebf3606988fd229afd

# 9c8466bee65e39c9d3cf715e42933c3b_invoices.csv
64f725fdeb2980b28bdf5e02076a55cd
60ac45a12ea3d6b59c2cb82f27da1722

问题:

  • 在本地JMeter中,查看对发布网址的请求,其中包含错误invoice-id的商家。所以似乎线程之间没有正确处理参数。
  • 在BlazeMeter中,看到while控制器的内容永远不会被击中。

我已经尝试过循环控制器,每个_invoices.csv文件有50行,但是没有任何地方。我也是最初开始的 用户定义的变量而不是用户参数,但后者似乎是我应该用于此用例的。

1 个答案:

答案 0 :(得分:0)

线程同时运行并共享JMeter属性。

在测试计划中,每个线程都设置属性USER_IDENTIFIER。因此,这个和其他属性可以/将被不同的线程覆盖并产生不一致。

我建议您保存(并获取)不由线程共享的变量:

 vars.put("USER_IDENTIFIER", vars.get("user_identifier"));

 vars.put("INVOICE_CSV_FOR_USER"," ${USER_IDENTIFIER}_invoices.csv");

关于beanshell,JMeter对change to JSR223的建议

  

从JMeter 3.1开始,我们建议从BeanShell切换到JSR223测试元素(有关更多详细信息,请参阅下面的JSR223部分),并从__Beanshell函数切换到__groovy函数。