当前位置: 首页 > news >正文

Jmeter基于Java请求的二次开发(结合java代码测Dubbo接口)

本文具体可参考另一篇:Dubbon接口测试

主要功能:提供一个Java代码的执行sampler,可以通过编写javaSampler在执行jmeter本身不支持协议的性能测试

步骤一:编写工程时,引入jmeter的lib\ext目录下的jar包:

ApacheJMeter_components.jar

ApacheJMeter_core.jar

ApacheJMeter_java.jar

jorphan.jar

logkit.jar

avalon-framework-4.1.4.jar

以及引入服务提供者的代码jar包和依赖,没有的话让开发提供,如:user-service-provider-1.0-SNAPSHOT.jar (可参考dubbo环境搭建中的代码部分)

在这里插入图片描述

步骤二:二次开发代码

目录

在这里插入图片描述

模拟消费端,初始化数据,连接zookeeper

src/main/java/InitData.java

import com.alibaba.dubbo.config.*;
import com.alibaba.dubbo.config.utils.ReferenceConfigCache;
import gmall.bean.UserService;

public class InitData {
    public static UserService getUserService(){
        ApplicationConfig application = new ApplicationConfig();
        application.setName("order-service-consumer");
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("127.0.0.1:2181");
        //如果服务端没有设置分组参数,调用的时候也不需要设置分组
//        registryConfig.setGroup("dubbo_test");
        //指定dubbo使用的注册中心版本
        registryConfig.setProtocol("zookeeper");
//        设置连接zookeeper的客户端
        registryConfig.setClient("zkclient");
        ReferenceConfig<UserService> referenceConfig = new ReferenceConfig<UserService>();
        referenceConfig.setInterface(UserService.class);
        referenceConfig.setTimeout(5000);
        referenceConfig.setRetries(3);
        referenceConfig.setVersion("*");
        referenceConfig.setStub("gmall.bean.UserServiceStub");
        ConsumerConfig consumerConfig = new ConsumerConfig();
        consumerConfig.setCheck(false);
        consumerConfig.setTimeout(5000);
        MonitorConfig monitorConfig = new MonitorConfig();
        monitorConfig.setProtocol("registry");
        referenceConfig.setApplication(application);
        referenceConfig.setRegistry(registryConfig);
        referenceConfig.setConsumer(consumerConfig);
        referenceConfig.setMonitor(monitorConfig);
        //缓存referenceConfig,防止出现多个连接
        ReferenceConfigCache cache = ReferenceConfigCache.getCache();
        UserService userService = referenceConfig.get();
        return userService;
    }
}

调用服务端,运行相关测试用例

src/main/java/TestDubboSampler.java

import com.alibaba.dubbo.common.json.JSON;
import gmall.bean.UserAddress;
import gmall.bean.UserService;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

public class TestDubboSampler extends AbstractJavaSamplerClient {
    UserService userService;

    //初始化数据
    @Override
    public void setupTest(JavaSamplerContext context) {
        userService = InitData.getUserService();
        super.setupTest(context);
    }

    //设置入参
    @Override
    public Arguments getDefaultParameters() {
        Arguments args = new Arguments();
        args.addArgument("userId","2");
        return args;
    }

    //执行用例
    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        //获取入参
        String user_id = javaSamplerContext.getParameter("userId");
        UserAddress userAddress = userService.getUserAddressList(user_id).get(0);
        //可查得出start_time至end_time的时间
        long start = System.currentTimeMillis();
        SampleResult result = SampleResult.createTestSample(start,System.currentTimeMillis());
        //等同于
        /*
        SampleResult result = new SampleResult();
        //开始统计响应时间
        result.sampleStart();
        //结束统计响应时间
        result.sampleEnd();
        */

        result.setSampleLabel("Dubbo-test");
        result.setDataEncoding("utf-8");
        result.setResponseCodeOK();;
        //查看结果树的响应数据
        result.setResponseData(userAddress.toString(),"utf-8");
        //响应成功
        result.setSuccessful(true);
        return result;
    }

    //调试
    public static void main(String[] args) {
        TestDubboSampler tds = new TestDubboSampler();
        Arguments argument = new Arguments();
        argument.addArgument("userId", "2");
        JavaSamplerContext jsc = new JavaSamplerContext(argument);
        tds.setupTest(jsc);
        tds.runTest(jsc);
    }

}

步骤三:编辑相关测试代码,完成后,将编译好的代码打成jar包,放置在 /jmeter的lib/ext下

由于JmeterDubboTest中使用到了自己编写的gmall-interface,所以在打包前需要将gmall-interface-1.0-SNAPSHOT.jar上传到私有库中(JmeterDubboTest中依赖得下载地址),或者安装到自己的本地依赖下载仓库

1、将gmall-interface依赖下载到自己本地:

在控制台中运行以下语句

mvn install:install-file -Dfile="D:/Workspace/MyIdeaProjects/Dubbo-example-test/gmall-interface/target/gmall-interface-1.0-SNAPSHOT.jar" '-DgroupId=org.example' '-DartifactId=gmall-interface' '-Dversion=2.0-SNAPSHOT' '-Dpackaging=jar'

运行后可在本地仓库查看到gmall-interface,证明本地上传成功:

在这里插入图片描述

2、对JmeterDubboTest进行打包:mvn clean package

在这里插入图片描述

3、将JmeterDubboTest-1.0-SNAPSHOT.jar、gmall-interface-1.0-SNAPSHOT.jar 放置在 /jmeter的lib/ext下

在这里插入图片描述

步骤四:打开Jmeter,选择 TestDubboSampler,填写相关参数:userId 2 ,运行并查看结果树(注:服务端必须是可以调用成功的,意味着zookeeper、服务提供端都需要可连通)

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 内容互动性的提升策略:Kompas.ai的智能工具
  • oracle--merge into :匹配则更新不匹配则插入
  • 富格林:曝光正确摆脱欺诈方略
  • 华为 2024 届实习校园招聘-硬件通⽤/单板开发——第九套
  • 初级银行从业资格证知识点(二)
  • C++ | Leetcode C++题解之第49题字母异位词分组
  • web学习笔记(二十一)
  • 智慧公厕让社区生活更美好
  • Eureka服务搭建
  • Lua速成(2)
  • R3F(React Three Fiber)基础篇
  • 单机取证-信息安全管理与评估-2022年国赛真题-环境+wp
  • Redis哨兵模式与Redis缓存穿透、击穿和雪崩
  • python——全局解释器锁(GIL)
  • 武汉市服务业领军企业认定条件、流程及申报政策奖励补贴标准
  • 我的第一篇技术博客 —— 梦的开始
  • 变分自编码器VAE的直观理解与原理推导 及 问题记录
  • 【python】准点跑路人必备小程序~ 不信你用不到
  • 10个常见的使用场景,助你从 Vue2 丝滑过渡到 Vue3 !
  • Java线程安全的时间类
  • 驱动开发:内核枚举IoTimer定时器
  • sumo的简单使用
  • 【C++】C++入门
  • Docker精通:微服务
  • HCIA-LTE学习总结03~04
  • Python Apex Legends 武器自动识别与压枪 全过程记录
  • 『Android』Toolbar+DrawerLayout+NavigationView实现类似QQ侧边栏效果
  • 10.13面试整理
  • 下一代 IDE 工具 JetBrains Fleet 正式公测
  • Node.js3---nodejs的内置模块之url模块
  • 什么样的小程序才能留住客户?
  • EXCEL表格-系统时间及进度自动记录工具制作