Use request value from list of values in JMeter

纵饮孤独 提交于 2019-12-04 10:06:00

问题


I'm sure I've already done this in the past but somehow I cannot figure out how ;-) So, here's my problem:

I'm trying to create a JUnit test plan in which a HTTP request is modified each iteration by altering a specific parameter. So, for example in five iterations I want the following HTTP requests to be made:

http://localhost:8080/test/foo.html?id=1
http://localhost:8080/test/foo.html?id=2
http://localhost:8080/test/foo.html?id=3
http://localhost:8080/test/foo.html?id=4
...

I want to configure the identifier values globally for the test plan and use them within the HTTP request samplerer like this:

Path: /test/foo.html?id=${categoryId}

The question now: How do I configure the identifiers values globally (I do not want to use StringFromFile) and how do I reference them in the sampler?


回答1:


There are several ways you can do this.

  • If you're only incrementing, you can use a counter element
  • You can use any number of functions to calculate the value
  • You can read from a CSV file, which is the same effect as "StringFromFile" but easier to customize and manipulate

Given you have an array of values you could:

  • Try the pre-processor "User Parameters", creating one entry for each user/loop
  • Use a Beanshell script to create the array, select one at random and populate your variable

You reference them exactly as you have listed: ${varName}




回答2:


Concerning implementing ${__StringFromArrayAtRandomIndex('3', '2', '54', '42')}.

Suppose you can easily implement your scenario using e.g. BeanShell Sampler / BeanShell PostProcessor with a bit of code.

E.g.:

  • Set your source variable (via e.g. User Defined Variables):

    Name        Value          
    categories  3,2,54,42,37
    

    (i.e. use comma as delimiter, no spaces before and after comma).

  • Use add BeanShell Sampler/PostProcessor with the following code:

    import java.util.Random;
    
    String[] categories = (vars.get("categories")).split(",");
    
    int idx = new Random().nextInt(categories.length);
    String category = (categories[idx]);
    
    vars.put("categoryId", category);
    
  • Refer further in the script randomly picked form list value as ${categoryId}.



回答3:


To obtain a random variable value from a list, first declare as User variables the list or available values, with a prefix and a incremental index:

country_1     Spain 
country_2     France  
country_3     Portugal  
country_4     Italy 
country_5     England

Then you can obtain a random value from the list concatenating the prefix with a random index in the interval:

${__V(country_${__Random(1,6,)})}  --> "Spain", "France", "Portugal", etc...

Take a look to this answer for complete explanation.




回答4:


The Simplest solution without variables can be done using vars.getIteration():

/test/foo.html?id=${__groovy(vars.getIteration())}


来源:https://stackoverflow.com/questions/6341600/use-request-value-from-list-of-values-in-jmeter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!