JMeter运行后如何清除所有属性?含未知名称属性批量清理
嘿,刚好我之前在JMeter里折腾过属性清理的需求,来给你详细说说这两个问题的解决办法:
1. 运行后清除所有属性
如果确实需要清除所有属性(包括JMeter自带的默认属性,比如jmeter.home、user.dir这类),最直接的方式是用JSR223元件执行props.clear()方法。
具体操作:
- 在你的测试计划末尾添加一个JSR223 Listener(它会在整个测试运行结束后自动执行)
- 选择语言为
Groovy(性能最优,语法也灵活) - 在脚本框里输入:
props.clear()
⚠️ 注意:这个操作会清空所有属性,包括JMeter的系统级属性,如果你只是想清理自己添加的属性,不要用这个方法,看下面的第二个方案。
2. 清除运行过程中新增的未知名称属性
要做到这一点,核心思路是先记录测试启动时的初始属性集合,再在需要清理时对比并删除新增的属性。
步骤如下:
第一步:记录初始属性集合
在测试计划的最开头(所有其他元件之前)添加一个JSR223 Test Element:
- 选择语言
Groovy - 输入脚本:
// 把启动时的所有属性名称保存到一个全局集合里 def initialPropertyNames = new HashSet<>(props.stringPropertyNames()) props.put("initialPropertyNames", initialPropertyNames)
这段代码会把JMeter启动时加载的所有默认属性(来自配置文件、命令行参数等)的名称存起来,作为对比基准。
第二步:清理新增属性
在测试结束时(或者你需要清理的时机),添加一个JSR223 Listener(或者JSR223 Sampler,如果你想在运行中途清理):
- 选择语言
Groovy - 输入脚本:
// 取出之前保存的初始属性集合 def initialPropertyNames = props.get("initialPropertyNames") // 获取当前所有属性名称 def currentPropertyNames = new HashSet<>(props.stringPropertyNames()) // 找出所有运行过程中新增的属性(不在初始集合里的) currentPropertyNames.removeAll(initialPropertyNames) // 逐个删除这些新增属性 currentPropertyNames.each { propName -> props.remove(propName) } // 最后可以删掉我们自己存的那个基准集合(可选) props.remove("initialPropertyNames")
这样就能精准删除所有你在测试运行过程中添加的属性,不会影响JMeter的默认属性。
额外提示
- 一定要用
Groovy语言,BeanShell性能差且语法限制多,Groovy对集合操作的支持更友好。 - 如果是多线程测试,这个方法是安全的,因为
props是全局属性集合,而我们的清理逻辑在测试结束时执行一次即可,不会有线程冲突问题。
内容的提问来源于stack exchange,提问作者Ahmed Gehad
相关产品推荐
相关产品推荐

