1

My JMeter test:

  • Iterate over a CSV file (logins.csv) with login credentials, and their unique identifier user a CsvDataSetConfig
  • Sign in
  • Based on the login credentials (unique identifier from logins.csv), identify and load a second file in the format of <user_identifier>_invoices.csv which then has the necessary path to view an invoice for that user.

Simplified test setup:

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

Problem:

  • In local JMeter, seeing requests to invoice urls being made with incorrect invoice-id for the business. So seems the parameters are not being treat correctly between threads.
  • In BlazeMeter, seeing the content of the while controller never being hit.

I've tried loop controllers, having 50 rows per _invoices.csv file, but not got anywhere with that either. I also originally started off with User Defined Variables rather than User Parameters, but the latter seems to be what I should be using for this use case.

Ori Marko
  • 56,308
  • 23
  • 131
  • 233

1 Answers1

0

Threads are running at the same time and sharing JMeter properties.

In your test plan each thread sets the property USER_IDENTIFIER. So this and other property can/will be overriden by different thread(s) and create inconsistency.

I suggest you save (and get) in variables which aren't shared by threads:

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

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

Also about beanshell, JMeter advice to change to JSR223

Since JMeter 3.1, we advise switching from BeanShell to JSR223 Test Elements (see JSR223 section below for more details), and switching from __Beanshell function to __groovy function.

Ori Marko
  • 56,308
  • 23
  • 131
  • 233