jmeter 参数随机逗号拼接

1.问题背景

在压测的过程中发现有将一组id作为参数的接口请求。这些id存储在数据库中,需要随机挑出几行值,用逗号拼接起来组成接口的一个参数。

例如数据库字段:

id
1
2
3
4

接口形式:
http://xxxx/getinfo?ids=1,2,4

2.解决方案

其实jmeter可以从数据库里取数据然后放到参数中,但这样做如果数据库服务器性能不佳,语句写的稍有问题种种可能反而会成为测试瓶颈,达不到想要的QPS。
于是就像把数据导出到csv里然后jmeter用一个变量将所有id全部缓存起来,再随机读取其中的几行拼接起来。
也就是在jmeter中放入一个全局变量,每次请求从变量里拿值
(目前仅在一个Thread Group下进行了测试)

主要就是写一个BeanShell PreProcessor 读取csv数据并设置成参数 供请求使用

import java.io.BufferedReader; 
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.FileUtils;
if(props.get("items") == null){
List items = FileUtils.readLines(new File("C:\\Users\\Administrator\\Documents\\work\\jmeter\\uids.csv"));
props.put("items", items);
}
List items = (List)props.get("items");
String uids = "";
for(int i = 0;i<=60;i++){
    Random rnd = new Random();
     int index = rnd.nextInt(items.size()-1)+1; 
    uids += items.get(index);
    if(i < 60){
        uids+=",";
    }
}
vars.put("uids",uids);

其中唯一一个注意的点就是props这个变量是全局的,这里设置了全局变量items,所有的BeanShell都可以获取到它,应该不仅限于一个ThreadGroup,如果多人编写起名不要太随意,以免冲突。

最后再把BeanShell里设置的uids参数设置到请求中


设置参数

你可能感兴趣的:(jmeter 参数随机逗号拼接)