4种性能测试工具Jmeter进阶扩展用法,快看看你会几个?
bigegpt 2025-05-05 14:13 7 浏览
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自动化测试学习交流群】进群方式如下:
关注我的头条号,私信:“头条”,即可邀请你进群学习交流~~
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)