百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

4种性能测试工具Jmeter进阶扩展用法,快看看你会几个?

bigegpt 2025-05-05 14:13 17 浏览

Jmeter是基于Java开发的性能测试工具,也可以用于接口测试,对比LR来说,Jmeter的操作简单并且是一款开源软件,主要用来做功能测试和性能测试(压力测试/负载测试)。

而且用Jmeter来测试Restful API,非常好用,下面为大家带来一些Jmeter的一些进阶扩展用法。

正则表达式提取器详解

正则表达式提取器又称作关联,可以把Response的值提取到变量中,提供给别的Http Request使用,在对应的需要获取关联的请求处右键添加后置处理器-正则表达式提取器来添加。

正则表达式的字段用法

引用名称:可以在别的请求中引用的名称。

正则表达式:用来匹配需要的内容的正则表达式写法"token":"(.+?)",左边界为"token":",右边界为",中间部分为需要获取的内容。

其中:

.代表匹配任意字符

+号表示匹配1次或多次

?表示0次或1次匹配

还有一些常见的写法比如“\d,\w,\s - 匹配数字、字符、空格、\D,\W,\S - 匹配非数字、非字符、非空格”,具体的自己找网站进行练习。

模板:$1$表示解析到的第几个值,如:$1$表示解析到的第1个值。

匹配数字:0代表随机取值,1代表全部取值,通常情况下填0。

缺省值:如果参数没有取得到值,那默认给一个值让它取。

引用:后续在其他请求中的使用方法:${token}。

验证:如果不确定写的正则表达式能不能匹配到数据,可以在查看结果树中进行查找,在对应的响应信息中输入正则表达式,勾选正则表达式,点击find按钮即可验证正则表达式是否能匹配到。

JSON提取器详解:JSON提取器用于提取json格式的内容,对于接口返回内容是JSON格式的提取起来比正则表达式要简单不少。

JSON提取器用法:选择需要获取内容的请求右键添加--后置处理器--JSON提取器。

字段详解

name of created variables:创建变量的名称,该名称后面调用时使用${变量名}引用。

JSONPath Expression:JSON表达式。

Match Numbers:匹配数字(0代表随机,1代表第一个,-1代表所有),可为空即默认第一个。

Default Value:未取到值的时候默认值。

Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”,使用场景需要获取的值有多个,后面需要对这一组数据进行操作。

JSON表达式的语法

获取第一层中的某个value值:$.data;

获取第二层List中某个key的value值:$data.token[0], 此处注意列表编号从0开始;

获取第三层的某个value值:$data.token[0].xxx[0]

获取特定条件的某个值,如data列表下,name=123的id。

name:如果是数值则不需要引号“”,如果是字符串则需要用引号把值引起来。

数值:$.data[?(@.pid==123)].id或者$.data[?(@.pid==${pid})].id

验证

使用Jmeter的查看结构树中的json path expression可以测试自己所写的JSON Extractor是否正常,写完JSON提取器后,点击test即可测试。

测试结果如下:

Beanshell取样器详解

在利用Jmeter进行接口测试或者性能测试的时候,我们可能需要处理一些复杂的请求,比如处理简单的加密函数,或者一些文件数据转换base64等等。

此时就需要利用Beanshell脚本了,BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法,所以它和Java是可以无缝衔接的。

变量

Jmeter中为脚本定义了下列变量:

SampleResult、ResponseCode、ResponseMessage、IsSuccess、Label、FileName、ctx、vars、props、log。

常使用的变量用法

log:打印日志,写入信息到jmeber.log文件。

SampleResult:获取SampleResult对象,能通过这个对象获取想要的信息。

ResponseCode:返回接口code。

ResponseMessage:获取msg。

vars.get(String key):从jmeter中获得变量值。

vars.put(String key,String value):数据存到jmeter变量中。

prev:获取前面的sample返回的信息。

引入Java文件

通过使用source("java文件路径")方法引入Java,然后调用方法和java一样,new一个class,再调用里面的add 方法。

引入jar包

需要把jar包放置在Jmeter安装目录中的\lib\ext下,然后重启Jmeter,或者在Test Plan的右侧面板最下方直接添加需要引用的jar包,如下图:

Beanshell取样器实战

由于工作日常中需要用到base64的转换,文件或者数据转换成base64格式之后再当作参数去发起请求,每次都是在网上在线base64转换,感觉很麻烦,于是用beanshell取样器写了一个脚本,这样就不用每次都在线转换了。

文本内容转换base64

代码示例:

import sun.misc.BASE64Decoder;

String data = new sun.misc.BASE64Encoder().encode("${textpath}".getBytes());

// ${textpath}:要加密的字符串参数,加密后的字符串保存在data参数中

vars.put("textbase64", data);

//将data数据存储到变量textbase64中

后续直接在用户定义的变量中传入对应的需要转换的内容后,即可在其他请求中使用${textbase64}来引用了。

文件转换base64

代码示例:

import java.io.File;

import java.io.IOException;

import java.util.Base64;

import org.apache.commons.io.FileUtils;

String file_name = "${filepath}";

//可以在用户定义的变量中直接定义文件的路径

String base64Str = Base64.getEncoder().encodeToString(FileUtils.readFileToByteArray(new File(file_name)));

vars.put("filebase64", base64Str);

//将base64Str数据存储到变量filebase64中

后续直接在用户定义的变量中传入对应的需要转换的内容后,即可在其他请求中使用${filebase64}来引用了。

base64转换文件

在需要转换为文件的请求中添加后置处理器-BeanShell后置处理程序,对需要转换base64为文件的请求中添加正则表达式提取器,变量名称为“signedpdf”,在下方参数栏中传入该参数。

代码示例:

import java.io.File;

import java.io.IOException;

import java.util.Base64;

import org.apache.commons.io.FileUtils;

import java.io.FileWriter;

import java.io.IOException;

import org.json.*;

FileWriter file = new FileWriter("${base64file}",true);

//可以在用户定义的变量中定义的输出到文件的路径

BufferedWriter out = new BufferedWriter(file);

out.write(vars.get("signedPdf")+"\n");

//引号里的内容是响应里面需要转换为文件的base64内容

out.close();

file.close();

String file_name = "${base64file}";

FileUtils.writeByteArrayToFile(new File("D:/base64file/changedFile.pdf"), Base64.getDecoder().decode(FileUtils.readLines(new File(file_name)).get(0)));

//file文件格式按文件类型进行修改

设置全局变量

在日常工作中会遇到需要跨线程调用的情况,可以在beanshell中设置为全局变量,这样就可以跨线程调用了。

在需要做关联的地方获取变量后,紧接着添加一个BeanShell 后置处理程序。

输入${__setProperty(textbase64,${textbase64},)};

在其他线程组中使用${__property(textbase64)}即可引用该参数。

下载文件

在下载或者导出文件的http请求处右键添加后置处理器-BeanShell后置处理程序,使用Beanshell脚本来处理下载的资源到本地,可以结合参数化生成不同的文件名。

代码示例:

import java.io.*;

byte[] result = prev.getResponseData();

String file_name = "C:/Users/Administrator/Downloads/${__time(,)}.xls";

//结合参数化指定下载的文件名称和路径

File file = new File(file_name);

FileOutputStream out = new FileOutputStream(file);

out.write(result);

out.close();

总结

Jmeter中的Beanshell用法很强大,支持对象式的脚本语言特性,亦可嵌入到Java源代码中,能动态执行Java源代码并为其扩展了脚本语言的一些特性,所以用好Beanshell能为日常的测试工作提升很多实用性以及便利性,可以用来处理各种方便的操作,在这里只是冰山一角,更多的内容还需要我们坚持学习。

其实用好工具不是关键,关键的是要时刻保持一颗主动学习的心。

下面邀请大家进入【Python自动化测试学习交流群】进群方式如下:

关注我的头条号,私信:“头条”,即可邀请你进群学习交流~~

相关推荐

或者这些Joplin插件也可以帮助你的笔记应用再一次强大

写在前面距离上次分享《搭建私有全平台多端同步笔记,群晖NAS自建JoplinServer服务》已过去一段时间,大家是否开始使用起来了呢?如果你和我一样已经使用过Joplin有一段时间了,那或许你也会...

Three.JS教程4 threejs中的辅助类

一、辅助类简介Three.js提供了一些辅助类(Helpers)以帮助我们更容易地调试、可视化场景中的元素。ArrowHelepr:创建箭头辅助器;AxisHelper:创建坐标轴辅助器;BoxH...

第2章 还记得点、线、面吗(二)(第二章还能敲钟吗)

glbgltf模型(webvrmodel)-gltf模型下载定制,glb模型下载定制,三维项目电商网站在线三维展示,usdz格式,vr模型网,网页VR模型下载,三维模型下载,webgl网页模型下载我...

如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!

你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...

SpriteJS:图形库造轮子的那些事儿

从2017年到2020年,我花了大约4年的时间,从零到一,实现了一个可切换WebGL和Canvas2D渲染的,跨平台支持浏览器、SSR、小程序,基于DOM结构和支持响应式的,高...

平时积累的FPGA知识点(6)(fpga经典应用100例)

平时在FPGA群聊等积累的FPGA知识点,第六期:1万兆网接口,发三十万包,会出现掉几包的情况,为什么?原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。...

芯片逻辑调度框架设计 都需要那些那些软件工具

设计芯片逻辑调度框架通常需要使用以下软件工具:1.逻辑设计工具:例如Vivado、Quartus、SynopsysDesignCompiler等,用于设计和实现逻辑电路。2.仿真工具:例如Mo...

ZYNQ与DSP之间EMIF16通信(正点原子领航者zynq之fpga开发指南v3)

本文主要介绍说明XQ6657Z35-EVM高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。[基于TIKeyStone架构C6000系列TMS320C6...

好课推荐:从零开始大战FPGA(从零开始的冒险4399)

从零开始大战FPGA引子:本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“...

业界第一个真正意义上开源100 Gbps NIC Corundum介绍

来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中...

高层次综合:解锁FPGA广阔应用的最后一块拼图

我们为什么需要高层次综合高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++...

Xilinx文档编号及其内容索引(部分)

Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文...

Xilinx Vivado联合Modelsim软件仿真

引言:Xilinx公司Vivado开发软件自带仿真工具,可以实现一般性能的FPGA软件仿真测试,其测试执行效率以及性能都不如第三方专用仿真软件Modelsim强。本文我们介绍下如何进行Vivado20...

体育动画直播是怎么做出来的?从数据到虚拟赛场的科技魔法!

你是否见过这样的比赛直播?没有真实球员,却能看梅西带球突破?足球比赛变成动画版,但数据100%真实?电竞比赛用虚拟形象直播,选手操作实时同步?这就是体育动画直播——一种融合实时数据、游戏引擎和AI的...

Dialogue between CPC and political parties of neighboring countries held in Beijing

BEIJING,May26(Xinhua)--TheCommunistPartyofChina(CPC)inDialoguewithPoliticalPartiesof...