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

news2024/11/7 8:46:15

前言

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写的脚本")
  1. 确保保存了更改后,就可以像平常一样运行测试计划了。

三、实际使用

我在测试过程中的实际使用场景为:在某省级发改委项目中,我需要让每一次提交的数据的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的你共同进步。

作者 | 千川

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2228715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 2024-10-24 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-10-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Solidity项目1Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:…

从0到1,用Rust轻松制作电子书

我之前简单提到过用 Rust 做电子书,今天分享下如何用Rust做电子书。制作电子书其实用途广泛,不仅可以用于技术文档(对技术人来说非常方便),也可以制作用户手册、笔记、教程等,还可以应用于文学创作。 如果…

私有化视频平台EasyCVR视频汇聚平台接入RTMP协议推流为何无法播放?

私有化视频平台EasyCVR视频汇聚平台兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 有用户反馈,项目现场使用RTMP协议接入EasyCVR平台,但是视频却不…

51单片机应用开发(进阶)---外部中断(按键+数码管显示0-F)

实现目标 1、巩固数码管、外部中断知识 2、具体实现:按键K4(INT1)每按一次,数码管从0依次递增显示至F,再按则循环显示。 一、共阳数码管 1.1 共阳数码管结构 1.2 共阳数码管码表 共阳不带小数点0-F段码为&#xff…

【简道云 -注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度

文章目录 box-sizing: border-box; 的含义默认盒模型 (content-box)border-box 盒模型 在微信小程序中的应用示例 在微信小程序中,CSS 样式 box-sizing: border-box; 用于控制元素的盒模型如何计算宽度和高度。具体来说, box-sizing: border-box; 会改…

设计模式基础概念(行为模式):责任链模式(Chain Of Responsibility)

概述 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 该模式建议你将这些处理者连成一条链。 链上的每个处理者都有一个成员变量来保存对于…

从入门到了解C++系列-----类与对象(中)

首言 这是我对于在学习类与对象时的一些思考与总结。主要去讲解C自主实现的默认构造函数。 1. 6大默认成员函数 1.1 是什么 默认的成员函数,是由c 编译器自动生成的。我们即使不定义,也可以调用。有默认构造函数、默认拷贝构造函数、默认析构函数、赋值重…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

SCSI驱动与 UFS 驱动交互概况

SCSI子系统概况 SCSI(Small Computer System Interface)子系统是 Linux 中的一个模块化框架,用于提供与存储设备的通用接口。通过 SCSI 子系统,可以支持不同类型的存储协议(如 UFS、SATA、SAS)&#xff0c…

5. 数据库连接池实现

WebServer 类中的 sql_pool() 方法,用于初始化数据库连接池并设置用户数据。 void WebServer::sql_pool() {/* 初始化数据库连接池 */m_connPool connection_pool::GetInstance();m_connPool->init("localhost", m_user, m_passWord, m_databaseName,…

Unity BesHttp插件修改Error log的格式

实现代码 找到插件的 UnityOutput.cs 然后按照需求替换为下面的代码即可。如果提示 void ILogOutput.Flush() { } 接口不存在,删除这行代码即可。 using Best.HTTP.JSON.LitJson; using System; using System.Collections.Generic; using UnityEngine; using Syst…

Kubernetes实战——DevOps集成SpringBoot项目

目录 一、安装Gitlab 1、安装并配置Gitlab 1.1 、下载安装包 1.2、安装 1.3、修改配置文件 1.4、更新配置并重启 2、配置 2.1、修改密码 2.2、禁用注册功能 2.3、取消头像 2.4、修改中文配置 2.5、配置 webhook 3、卸载 二、安装镜像私服Harbor 1、下载安装包 2、…

【移动应用开发】访问网络

目录 一、运行截图 二、源代码 1. WebView的简单使用 ① activity_main.xml ② MainActivity.kt ③ AndroidManifest.xml 2. 使用OkHttp访问以下接口,获取Aspirin化合物的JSON格式数据 ① activity_okhttp.xml ② OKhttpActivity ③ 导入依赖 3. 使用GSO…

软件工程--需求分析与用例模型

面向对象分析(ObjectOrientedAnalysis,简称OOA) 分析和理解问题域,找出描述问题域所需的类和对象,分析它们的内部构成和外部关系,建立独立于实现的OOA模型,暂时忽略与系统实现有关的问题。 主要使用UML中的以下几种图…

Android中同步屏障(Sync Barrier)介绍

在 Android 中,“同步屏障”(Sync Barrier)是 MessageQueue 中的一种机制,允许系统临时忽略同步消息,以便优先处理异步消息。这在需要快速响应的任务(如触摸事件和动画更新)中尤为重要。 在 An…

MyBatis-Plus:简化 CRUD 操作的艺术

一、关于MyBatis-Plus 1.1 简介 MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。 ​ ‍ ‍ ‍ ​ ‍ 关于Mybatis 简介 MyBatis 是一款流行的 Java 持久层框架,旨在简化 Java 应用程序与数…

ECharts饼图-圆角环形图,附视频讲解与代码下载

引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详…

正则表达式匹配日期格式

前言 这里有sql文本,是从数据库中拷贝出来的,希望重新执行的时候createTime和updateTime都统一设置成当前日期。 利用正则表达式结合文本编辑器,就能全局替换了 (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) 替换结果如下

学习伊圣雨老师的 epoll 编程

(1)书里提出了疑问,epoll 函数的工作方式,区分为水平触发与边缘触发 : (2) 谢谢