高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

ngrinder unique方式取参数

目录

ngrinder 参数化取值的时候,不如LR便捷。

在做unique取参的时候,LR简单的设置即可,ngrinder就要相对麻烦一些。

Alt text


比如有80W条数据,要求每次取的数据都不一样。

思路:

  1. 获取线程号
  2. 给每个线程分配一定范围的数据,比如每个线程1W条数据-线程号*10000
  3. 设置迭代运行

获取线程号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

//vuser唯一编号,从0开始
int vuserNO ;
//用户总数
int totalVusers ;

//根据运行时配置计算唯一编号,调试时只有1个用户,返回值0
void initNumbers(int iteration) {
int intAgents = 0
int intProcs = 0
int intThreads = 0
if (grinder.getProperties() != null) {
intAgents = Integer.parseInt(grinder.properties.get("grinder.agents").toString())
intProcs = Integer.parseInt(grinder.properties.get("grinder.processes").toString())
intThreads = Integer.parseInt(grinder.properties.get("grinder.threads").toString())
}
int agent_no = grinder.agentNumber
int proc_no = grinder.processNumber
int thread_no = grinder.threadNumber

totalVusers = intAgents * intProcs * intThreads
vuserNO = agent_no * intProcs * intThreads + proc_no * intThreads + thread_no + intAgents * intProcs * intThreads * iteration
}

读数据文件:

1
2
3
4
public static List<String> NoList ;
public static def NoRowNumber ;

NoList = new File("./resources/id.txt").readLines();

每个线程分配一定范围的数据:

1
2
3
4
5
6
7
int rowNo;//文件行
initNumbers(0) //计算唯一编号
rowNo=vuserNO*10000;//每个线程分1W条数据
//取数据
String list=NoList.get(rowNo);
//每次加一
rowNo++;

场景中设置迭代:
Alt text