一、环境
1)Jmeter版本:apache-jmeter-5.2.1
2)JDK版本:JDK1.8
二、场景
通过Jmeter发送报文进行测试,目标场景为:发送报文前,对报文数据进行加密,且加密需要依赖原报文的参数(原报文是 xml 格式数据)
报文格式:<HeartBeat ID=”sign01”></HeartBeat> 加密方式:通过自定义加密方式,此处模拟带参数加密返回信息,返回数据为“报文ID值 Hello”
三、外部函数
package com.alfred.test; import com.alfred.util.Dom4jTool; import org.dom4j.Document; /** * @Author: alfred */ public class HelloWorld { public static String sayHello(String xml){ Document doc = Dom4jTool.xmlString2Doc(xml); String id = doc.getRootElement().attributeValue("ID"); return id+" Hello"; } }
四、Jmeter配置
1)在 Jmeter 测试计划中,新增如下项目
BeanShell 取样器:用于指定外部函数处理
HTTP 请求:HTTP 请求的参数设置
CSV 数据文件设置:报文的数据源
查看结果数、聚合报告:报文发送结果分析
2)在 “CSV 数据文件设置” 中设置数据变量名为 data,在 “HTTP 请求” 中,设置消息体数据为{myData}
3)在 “BeanShell 取样器” 中配置从源数据 ${data} 到目标数据 ${myData} 的转换,转换代码如下:
import com.alfred.test.HelloWorld; String myData=HelloWorld.sayHello("${data}"); vars.put("myData",myData)
4)将 “外部函数” 打包成 jar 包,和所依赖的其他 jar 包(例如:dom4j 的包)一起放到 jmeter 的 lib 目录下,重启 jmeter 即可。
5)最终发送的报文是 sign01 Hello