目录
一、测试分析
使用jmeter进行tcp传输数据进行测试
- 如果每次发送的tcp报文,可直接创建tcp测试计划进行测试
- 如每次发送的tcp报文每次不一样, 则可能需要自定义函数去实现每次发送的报文不同
二、自定义jmeter函数(Java)
- 创建一个maven项目
- 需要的引入pom依赖
<dependencies> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.4.1</version> </dependency> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_java</artifactId> <version>5.4.1</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.45.Final</version> </dependency> </dependencies> - 建立的包名需要以functions为结尾, 否则jmeter识别不了
- 自定义的class类需实现AbstractFunction类接口, 实现此接口会重写4个方法
-
import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jmeter.functions.AbstractFunction; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; import java.util.Calendar; import java.util.Collection; import java.util.LinkedList; import java.util.List; /** * @Description 生成jmeter请求tcp发送消息, 包名需以functions结尾 * 年龄计数器, 根据出生年份获取年龄函数 * @Author bool * @Date 2022/09/29 **/ public class AgeCounter extends AbstractFunction { // 自定义函数参数列表说明 // 定义完成后由getArgumentDesc()返回 private static final List<String> args = new LinkedList<>(); static { // 通过add方法可以添一个参数 // 需添加多个参数时,多次调用即可添加多个参数 args.add("名字"); args.add("出生年"); } // 自定义的变量用于自定义函数调用时接收传入的参数 public String name; public String birthYear; /** * 自定义函数的主体部份 * @param sampleResult * @param sampler * @return String */ @Override public String execute(SampleResult sampleResult, Sampler sampler) { Calendar calendar = Calendar.getInstance(); int i = calendar.get(Calendar.YEAR) - Integer.parseInt(birthYear); return name + "今年" + i + "周岁"; } /** * 该方法用来接收用户调用函数时传入的参数 * @param collection 参数集合 */ @Override public void setParameters(Collection<CompoundVariable> collection) { //下面为固定写法 Object[] values = collection.toArray(); //强制将数组元素提取为string并赋值给name和age name = ((CompoundVariable)values[0]).execute(); birthYear = ((CompoundVariable)values[1]).execute(); } /** * 获取jmeter自定函数名称方法 * @return String */ @Override public String getReferenceKey() { // 函数名称,按默认使用双下划线开头 return "__AgeCounter"; } /** * 该方法用来定义函数参数, 并且会将参数描述显示在jmeter界面中 * @return List<String> */ @Override public List<String> getArgumentDesc() { return args; } }
-
- 上述代码如果每次传参, 每年才会出现不一样的返回值, 可以根据自己实际业务来定义函数逻辑, 比如加个时间戳什么的, 每次返回结果可能就不一样了.
- 代码编写后, 执行maven打包命令, 打成jar包, 放到jmeter的/lib/ext目录下, 除了ApacheJMeter_core, ApacheJMeter_java的其他引入的pom依赖jar包都放到jmeter的/lib下
- 启动jmeter即可
三、测试jmeter自定义函数
- 打开函数助手

- 在函数下拉框找自己定义的函数

- 生成之后就会出现自己想要的结果了
四、创建jmeter tcp测试计划
- 创建测试计划, 然后再基础上创建线程组

- 接下来创建tcp取样器, 在发送的文本写函数名称和参数即可


- 在tcp取样器下面创建常数吞吐量定时器, 可以根据自己业务实际情况设置, 比如想1s一次请求,可以设置1分钟执行60次, 别的定时器也可以, 根据自己实际业务调整即可

本文详细介绍了如何使用JMeter进行TCP动态报文的压力测试,包括自定义JMeter函数(Java实现)、测试函数逻辑、创建TCP测试计划及配置线程组和取样器。通过自定义函数实现每次发送不同的TCP报文,确保测试的准确性。
3891

被折叠的 条评论
为什么被折叠?



