jmeter压测TCP动态报文

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

目录

一、测试分析

二、自定义jmeter函数(Java)

三、测试jmeter自定义函数

四、创建jmeter tcp测试计划


一、测试分析

使用jmeter进行tcp传输数据进行测试

  1. 如果每次发送的tcp报文,可直接创建tcp测试计划进行测试
  2. 如每次发送的tcp报文每次不一样, 则可能需要自定义函数去实现每次发送的报文不同

二、自定义jmeter函数(Java)

  1. 创建一个maven项目
  2. 需要的引入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>
  3. 建立的包名需要以functions为结尾, 否则jmeter识别不了
  4. 自定义的class类需实现AbstractFunction类接口, 实现此接口会重写4个方法
    1. 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;
          }
      }
  5. 上述代码如果每次传参, 每年才会出现不一样的返回值, 可以根据自己实际业务来定义函数逻辑, 比如加个时间戳什么的, 每次返回结果可能就不一样了.
  6. 代码编写后, 执行maven打包命令, 打成jar包, 放到jmeter的/lib/ext目录下, 除了ApacheJMeter_core, ApacheJMeter_java的其他引入的pom依赖jar包都放到jmeter的/lib下
  7. 启动jmeter即可

三、测试jmeter自定义函数

  1. 打开函数助手
  2. 在函数下拉框找自己定义的函数
  3. 生成之后就会出现自己想要的结果了 

四、创建jmeter tcp测试计划

  1. 创建测试计划, 然后再基础上创建线程组
  2. 接下来创建tcp取样器, 在发送的文本写函数名称和参数即可

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值