Jmeter - 重置从表达式提取器生成的变量
Jmeter - reset variables generated from Expression extractor
我正在通过使用 JSON 和正则表达式提取器在脚本中生成一些变量。
我需要为我处理的每条测试记录重置这些,以确保每条记录都使用正确的提取值。
问题(如果是问题)是生成的值由许多数组元素或组组成。
示例:
Regular expression extractor generating Reference Name: identifier
This generates:
- Identifier
- Identifier_g
- Identifier_g0
- Identifier_g1
我可以在 beanshell 中的适当位置使用 vars.put("Identifier",null);
成功重置标识符,但这不会重置其他项目。
我进行了多次这样的提取,它们产生的结果数量可能会有所不同,因此上面的 'g' 值可能会改变。
关于如何重置这些(或者即使我需要)有什么建议吗?
只要提取器再次运行,它就会自动清除旧值。
如果您在不同的提取器中使用相同的变量名称,这只会是一个问题。
如果你可以重置一个变量 - 你可以重置所有变量,我唯一推荐的是使用 Groovy 而不是 Beanshell。原因在:
- Groovy 更符合 Java,您可以使用所有现代 Java 功能,而使用 Beanshell 则必须使用 Java 5 language level
- Groovy 有很多不错的 JDK enhancements 提供了一些 "syntax sugar" 基础 Java 类
- Groovy 性能比 well-behaved Groovy scripts can be compiled and cached 好得多,而 Beanshell 每次都被解释,因此 Groovy 脚本将执行得更快并且内存占用更少
参考文献:
最后是相关的Groovy代码,用于重置名称以Identifier
开头的所有变量
vars.getIterator().each {
def name = it.getKey()
if (name.startsWith('Identifier')) {
vars.put(name, null)
}
}
当你使用Regular expression
并且你将Template定义为$
例如它将取only Identifier_g1
值,这意味着匹配组1 的正则表达式,其他值未使用,因此在正常流程中您不需要关心它们。
组数不变,基本上您在 Regular expression
(\w+)=(\d+) 中创建的圆括号数将创建 2 个组,因此您必须删除直到 Identifier_g2 .
如果需要,您可以添加 JSR 223 元素以删除特定值。
您可以在 JSR223 Sampler
或 JSR223 PreProcessor
或 JSR223 PostProcessor
之间进行选择,具体取决于您希望执行的时间。请注意,Sampler 将包含在报告中,如果脚本失败,它将被标记为失败。
您的案例代码:
vars.remove("Identifier");
vars.remove("Identifier_g");
vars.remove("Identifier_g0");
vars.remove("Identifier_g1");
我正在通过使用 JSON 和正则表达式提取器在脚本中生成一些变量。
我需要为我处理的每条测试记录重置这些,以确保每条记录都使用正确的提取值。
问题(如果是问题)是生成的值由许多数组元素或组组成。
示例:
Regular expression extractor generating Reference Name: identifier
This generates:
- Identifier
- Identifier_g
- Identifier_g0
- Identifier_g1
我可以在 beanshell 中的适当位置使用 vars.put("Identifier",null);
成功重置标识符,但这不会重置其他项目。
我进行了多次这样的提取,它们产生的结果数量可能会有所不同,因此上面的 'g' 值可能会改变。
关于如何重置这些(或者即使我需要)有什么建议吗?
只要提取器再次运行,它就会自动清除旧值。
如果您在不同的提取器中使用相同的变量名称,这只会是一个问题。
如果你可以重置一个变量 - 你可以重置所有变量,我唯一推荐的是使用 Groovy 而不是 Beanshell。原因在:
- Groovy 更符合 Java,您可以使用所有现代 Java 功能,而使用 Beanshell 则必须使用 Java 5 language level
- Groovy 有很多不错的 JDK enhancements 提供了一些 "syntax sugar" 基础 Java 类
- Groovy 性能比 well-behaved Groovy scripts can be compiled and cached 好得多,而 Beanshell 每次都被解释,因此 Groovy 脚本将执行得更快并且内存占用更少
参考文献:
最后是相关的Groovy代码,用于重置名称以Identifier
vars.getIterator().each {
def name = it.getKey()
if (name.startsWith('Identifier')) {
vars.put(name, null)
}
}
当你使用Regular expression
并且你将Template定义为$
例如它将取only Identifier_g1
值,这意味着匹配组1 的正则表达式,其他值未使用,因此在正常流程中您不需要关心它们。
组数不变,基本上您在 Regular expression
(\w+)=(\d+) 中创建的圆括号数将创建 2 个组,因此您必须删除直到 Identifier_g2 .
如果需要,您可以添加 JSR 223 元素以删除特定值。
您可以在 JSR223 Sampler
或 JSR223 PreProcessor
或 JSR223 PostProcessor
之间进行选择,具体取决于您希望执行的时间。请注意,Sampler 将包含在报告中,如果脚本失败,它将被标记为失败。
您的案例代码:
vars.remove("Identifier");
vars.remove("Identifier_g");
vars.remove("Identifier_g0");
vars.remove("Identifier_g1");