JMeter安装和使用
软件安装
安装JDK
配置JAVA_HOME:C:\Program Files\Java\jdk1.8.0_202
Path路径添加: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
测试JDK: java -version
安装JMeter
从官网下载,解压后双击 bin/jmeter.bat 启动
Websocket接口测试
1. 安装插件
测试Websocket需要安装插件,重启后,多出的websocket相关的采样器如下:
- Websocket Open Connection: 创建链接
- WebSocket Single Read Sampler:只接受消息
- WebSocket Single Write Sampler:只发送消息
- WebSocket Ping/Pong Frame Filter:保持链接不断开(如果长时间通信,需要用这个Fileter过滤掉ping/pong消息)
- WebSocket Close:关闭链接
2. 查看接口参数
可以看到,参数交互流程为:接受 - 发送 - 接受 - 接受 - 发送 - 接受 (一直接受直到结束)
3. 创建采样器
先添加线程组,再添加各个采样器:
创建链接,设置ip+port等
接受消息(发送消息)需要设置 use existing connection,这样才可以继续使用上面的链接
在发送消息之前,可以自定义变量(这一步也可以不用,即发送的消息直接写死)
发送消息
ping/pong帧过滤(短时间通信可以不用,长时间通信需要用,否则报错)
JSR223可以用JS等语言定义变量,BeanShell Sampler则是用Java语言,如下,从返回数据中取值:
注意:这里需要用json包,所以需要下载org.json.jar包,然后放到
\apache-jmeter-5.6\lib\ext
目录下
while逻辑控制器定义终止条件
最后添加View Results Tree等结果报告,即可使用。
4. 其他问题
为什么要添加ping/pong帧过滤
不添加会报错:the server returns the following errors: (1)Sampler error: unexpected frame type (ping). (2)Ping frame with application data 'T悅o'
返回结果是unicode编码,如何转成中文
unicode数据:
\u4f60\u597d\ud83d\udc4b\uff01\u6211\u662f\u4eb
解决方法:添加BeanShell PostProcessor
代码如下:
//获取响应代码Unicode编码的
String s=new String(prev.getResponseData(),"UTF-8");
//---------------下一步骤为转码过程---------------
char aChar;
int len= s.length();
StringBuffer outBuffer=new StringBuffer(len);
for(int x =0; x <len;){
aChar= s.charAt(x++);
if(aChar=='\\'){
aChar= s.charAt(x++);
if(aChar=='u'){
int value =0;
for(int i=0;i<4;i++){
aChar= s.charAt(x++);
switch(aChar){
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
value=(value <<4)+aChar-'0';
break;
case'a':
case'b':
case'c':
case'd':
case'e':
case'f':
value=(value <<4)+10+aChar-'a';
break;
case'A':
case'B':
case'C':
case'D':
case'E':
case'F':
value=(value <<4)+10+aChar-'A';
break;
default:
throw new IllegalArgumentException(
"Malformed \\uxxxx encoding.");}}
outBuffer.append((char) value);}else{
if(aChar=='t')
aChar='\t';
else if(aChar=='r')
aChar='\r';
else if(aChar=='n')
aChar='\n';
else if(aChar=='f')
aChar='\f';
outBuffer.append(aChar);}}else
outBuffer.append(aChar);}
//-----------------以上内容为转码过程---------------------------
//将转成中文的响应结果在查看结果树中显示
prev.setResponseData(outBuffer.toString(),"utf-8"); //再次设置utf-8编码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】