先打个广告:欢迎关注我的公众号,参与 文史大挑战 趣味题目。使用方法见 这篇文章 。
正文开始:
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()
则返回相加得到的新数组。
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
精彩评论
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/jmeter-vars-array/ ,且不得用于商业用途。