Jmeter 中如何使用数组变量

2018-10-15
标签: JMETER
本文发布至今已有5年零185天,可能不再适用,请谨慎对待。

Jmeter JSR223 控件中的 vars 变量对象,使用 put 方法只能保存字符串变量,而这时如果希望方便的展开数组或者集合运算,就需要使用更高级的方法。本文讨论这些具体方法。

本文使用的 Jmeter 是 4.0 版本

本文目的

本文的目的是,在循环请求中,将每次请求得到的结果依次放入某数组,并且在全部请求完成后,可以访问该数组,得到所有结果。

保存对象

Jmeter 的 vars 和 props 用法 所介绍,可以使用 vars.putObject() 方法保存数组对象,同时用 vars.getObject() 方法获取对象。

可以这么设计 Jmeter 脚本:

Test Plan
  └─ Thread Group
      ├─ JSR223 Sampler
      │
      └─ Loop Controller
           ├─ Http Sampler
           ├─ Regular Expression Extractor
           └─ JSR223 PostProcessor

其中 Regular Expression Extractor 用于从响应中提取特定值,并保存在变量 SAVED_VAR 中,则我们可以使用 JSR223 Sampler 和 JSR233 PostProcessor 中 Groovy 脚本语言保存数组。

脚本编写

Groovy 脚本如下:

JSR223 Sampler 用于初始化对象

vars.putObject("SAVED_ARRAY",[]);

JSR223 PostProcessor 用于向数组的末尾追加元素

arr << vars.get("SAVED_VAR");
vars.putObject("SAVED_ARRAY", arr);

这样就可以将 SAVED_VAR 变量 push 到 SAVED_ARRAY 中,并保存下来,供后面的程序使用。

与数组相关的语法

Groovy 对数组操作的语法比较简洁,比如:

数组长度

取得数组内元素的个数

elem = arr.size();

读取元素

按照下标取得数组指定位置的元素,下面几种方法等效:

elem = arr[1];
elem = arr.get(1);
elem = arr.getAt(1);

下标支持负数,和 Python 类似:

elem = arr[-1];

写入元素

按照下标写入数组指定位置的元素,修改某个位置的成员,下面几种方法都可以:

arr[1] = elem;
arr.putAt(1, elem);
arr.set(1, elem);    //同时返回被替换的值

追加元素

向数组末尾添加(append)元素,扩充数组的大小。

arr << elem;

数组比较

比较两个数组对应位置元素全部相等

arr1=\[1,2,3\];
arr2=\[1,2,3\];
arr3=\[3,2,1\];

arr1arr2  //true
arr1arr3 //false

寻找元素

返回指定元素第一次出现的位置:

arr = [1, 2, 3];
arr.indexof(2); //1

返回第一次出现的、满足特定条件的元素:

arr = [1, 2, 3];
arr.find{ it>1 }; //2

筛选元素

找出满足条件的所有元素集合:

arr = [1, 2, 3];
arr.findAll{ it>1 }; //[2, 3]

聚合运算

聚合运算,输入一个列表,输出单个数值。

[1, 2, 3].sum();    //6
[1, 2, 3].max();        //3
["1", "2", "3"].sum();    //"123"
["1", "2", "3"].join(".");    //"1.2.3"

集合运算

Python 的集合运算相比 ,Groovy 也有集合运算,和 Python 不同的是,直接在列表对象上进行,而不需要另一种数据类型 set

判断元素的从属关系

1 in [1, 2, 3];    //true
[1, 2, 3].contains(1);  // true

判断集合的包含关系,即子集:

[1, 2, 3].containsAll([1, 3])  //true

取两个集合的交集

[1, 2, 3].intersect([3, 4, 5])  // [3]

取两个集合的并集

[1, 2, 3].plus([3, 4, 5])  // [1, 2, 3, 3, 4, 5]
[1, 2, 3] + [3, 4, 5]   // [1, 2, 3, 3, 4, 5]

取两个集合的差集

def array = [1, 2, 3];
array.removeAll([3, 4, 5])  // array = [1, 2]

注意, removeAll()plus() 的返回方法是不同的: removeAll() 直接在原数组上操作,返回值仅表示操作是否删除了元素,如果原来两个集合无交集,则不会删除元素,这是返回 false; plus() 则返回相加得到的新数组。

如果您对本站内容有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

标签: JMETER

欢迎转载本文,惟请保留 原文出处 ,且不得用于商业用途。
本站 是个人网站,若无特别说明,所刊文章均为原创,并采用 署名协议 CC-BY-NC 授权。