当前位置: 首页 > news >正文

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写的脚本")
  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.lryc.cn/news/472821.html

相关文章:

  • 通过js控制css变量
  • Docker:容器化和虚拟化
  • OpenSSL
  • CSS 常见选择器
  • Linux使用Dockerfile部署Tomcat以及jdk
  • LC20. 有效的括号
  • 基于springboot企业微信SCRM管理系统源码带本地搭建教程
  • 【MTMSA】不确定缺失模态下基于情态翻译的多模态情感分析
  • 【php常用公共函数】php获取指定时间段中有那几年并输出年份的起始时间和结束时间
  • CTF-PWN: 什么是_IO_FILE?
  • 前端八股文第二篇
  • springboot汽车保修服务管理系统-计算机毕业设计源码00052
  • 分布式架构搭建博客网站
  • python-opencv给图片或视频去水印
  • 免费送源码:Java+ssm+Springboot Springboot手办定制销售系统 计算机毕业设计原创定制
  • 卡夫卡的使用
  • mac|maven项目在idea中连接redis
  • Python基础学习------第一天
  • MySQL的SQL语句之触发器和存储过程的应用
  • 【MD5】密码加密之加盐算法
  • 服务器虚拟化
  • 贪心算法理论基础和习题【算法学习day.17】
  • 爬虫ip技术未来发展趋势
  • 推荐一款功能强大的文字处理工具:Atlantis Word Processor
  • 语言≠思维,大模型学不了推理:一篇Nature让AI社区炸锅了
  • Ubuntu 安装 npm
  • Go:package
  • 大数据之微服务注册、发现与熔断方案
  • 最新出炉!2024年邮件营销平台综合盘点
  • Qgis 开发初级 《ToolBox》