Jmeter基础篇(19)JSR223预处理器

前言

JSR223预处理器是Apache JMeter中的一个组件,它允许用户使用任何支持Java Scripting API (JSR 223) 的脚本语言来执行预处理任务。这个功能非常强大,因为它让测试人员能够利用如Groovy、JavaScript(Nashorn引擎)、BeanShell等脚本来增强JMeter测试计划的能力。

一、JSR223的使用场景

● 动态生成数据:比如在性能测试中需要动态生成请求参数。

● 复杂逻辑处理:当内置的JMeter元件无法满足需求时,可以通过编写脚本来实现更复杂的逻辑。

● 外部系统集成:通过脚本与数据库或其他外部系统交互,获取或更新数据。

二、如何配置JSR223预处理器

  1. 打开JMeter测试计划,并找到想要添加预处理器的地方(一般在Sampler之前)。

  2. 右键点击所选位置 -> Add -> Pre Processors -> JSR223 PreProcessor。

  3. 在打开的JSR223预处理器界面中,您可以设置如下选项:
    ○ Name: 给预处理器命名。
    ○ Script Language: 选择希望使用的脚本语言,默认为groovy。
    ○ Parameters: 如果脚本需要接受参数的话,可以在这里定义。
    ○ Script: 这里输入实际要运行的脚本代码。

  4. 编写脚本。例如,如果想用Groovy来设置一个变量,你可以这样写:

    // 设置名为myVar的JMeter变量
    vars.put("myVar", "这是一段使用Groovy script写的脚本")

  5. 确保保存了更改后,就可以像平常一样运行测试计划了。

三、实际使用

我在测试过程中的实际使用场景为:在某省级发改委项目中,我需要让每一次提交的数据的ID都保持不同,防止插入数据时由于主键重复发生报错,于是借助JSR223预处理器的能力,实现每一次请求过程中动态更换json中的ID信息。具体脚本内容如下:

复制代码
import groovy.json.JsonSlurper
import groovy.json.JsonOutput

// 读取原始的Body Data
def jsonStr = """
{
    "formId":"5d649dcfcb670b4d9619094e21a8f479",
    "catalog_id":"",
    "id":"6717674560b21ae3c1691e04",
    "projectName":"xxxName",
    "projectType":"10",
    "projectLevel":"xxx测试项目",
    "projectAddress":"xxx测试项目",
    "projectQymc":"xxx测试企业20241012",
    "projectTitle":"xxx测试项目",
}
"""

// 解析JSON
def json = new JsonSlurper().parseText(jsonStr)

// 获取当前时间(毫秒)
def currentTimeMillis = System.currentTimeMillis()

// 生成6位随机数
def randomNum = (Math.random() * 900000 + 100000) as int

// 拼接字符串
def suffix = "${currentTimeMillis}${randomNum}"

// 遍历所有字段并替换"formId"
json.each { key, value ->
    if (value instanceof String && value.contains("6717674560b21ae3c1691e04")) {
        json[key] = value.replaceAll("6717674560b21ae3c1691e04", "6717674560b21ae3c1691e04${suffix}")
    }
}

// 将修改后的JSON转换回字符串
def updatedJsonStr = JsonOutput.toJson(json)

// 设置新的Body Data
sampler.getArguments().removeArgument(0)
sampler.addNonEncodedArgument("", updatedJsonStr, "")

通过这种方式,可以尽可能保障每一次调用过程中,json中的formId内容是不同的,防止出现由于主键重复而导致的报错。脚本的具体摆放位置如下:


复制代码
测试开发工程师一只,也在不断的学习阶段,平时的小经验不定期分享。
希望看我写的文字的人,可以少走弯路 祝工作学习顺利。
博主经验有限,若有不足,欢迎交流,共同改进~
愿与同在CSDN的你共同进步。

作者 | 千川
相关推荐
网络安全指导员8 小时前
如何在JMeter中配置断言,将非200状态码视为测试成功
网络·学习·jmeter·安全·web安全·架构
侧耳倾听1119 小时前
性能测试之jmeter的基本使用
jmeter
WIN赢10 小时前
Jmeter的压测使用
jmeter
海姐软件测试2 天前
Postman参数化设置如何设置?
开发语言·jmeter
lifewange2 天前
Jmeter面试题
jmeter
一棵树长得超出它自己2 天前
jmeter if控制器在loop控制器执行结束后执行
前端·jmeter
zzhz9254 天前
Jmeter(性能指标、指标插件、测试问题、面试题、讲解稿)
java·jvm·jmeter
熙客4 天前
Jmeter-负载测试
jmeter·压力测试
ylatin4 天前
jmeter web压力测试 压测
jmeter·压力测试
zzhz9254 天前
Jmeter操作(数据库)
数据库·jmeter