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的你共同进步。

作者 | 千川
相关推荐
tester Jeffky21 小时前
全面解析 JMeter 后置处理器:概念、工作原理与应用场景
jmeter
惜.己21 小时前
Jmeter中的定时器
测试工具·jmeter·1024程序员节
回家吃月饼21 小时前
jmeter5.6.3安装教程
jmeter·压力测试
神即道 道法自然 如来21 小时前
JMeter如何配置分布式?
jmeter
Cat_Xu1 天前
【TEST】Apache JMeter + Influxdb + Grafana
jmeter·grafana
tester Jeffky2 天前
全面解析 JMeter 前置处理器:概念、工作原理与应用场景
jmeter
hopetomorrow3 天前
学习路之压力测试--jmeter安装教程
学习·jmeter·压力测试
tester Jeffky3 天前
JMeter 性能测试计划深度解析:构建与配置的树形结构指南
jmeter
tester Jeffky3 天前
深入探索JMeter逻辑控制器:构建复杂测试场景的利器
jmeter
tester Jeffky4 天前
深入探索JMeter的执行器时间线:从CLArgsParser到JmeterEngine
jmeter