使用Jmeter压测dubbo接口(不依赖dubbo插件)

1、dubbo 依赖

<dependencies>

<!-- Dubbo -->

<dependency>

<groupId>org.apache.dubbo</groupId>

<artifactId>dubbo</artifactId>

<version>2.7.8</version>

</dependency>

<!-- Zookeeper客户端 -->

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-framework</artifactId>

<version>4.3.0</version>

</dependency>

<!-- Zookeeper客户端的Dubbo支持 -->

<dependency>

<groupId>org.apache.dubbo</groupId>

<artifactId>dubbo-dependencies-zookeeper</artifactId>

<version>2.7.8</version>

<type>pom</type>

</dependency>

<!-- 其他依赖,如日志等 -->

</dependencies>

2、继承AbstractJavaSamplerClient

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

import org.apache.dubbo.config.ApplicationConfig;

import org.apache.dubbo.config.ReferenceConfig;

import org.apache.dubbo.rpc.service.GenericService;

public class DubboGenericSampler extends AbstractJavaSamplerClient {

private GenericService genericService;

@Override

public void setupTest(JavaSamplerContext context) {

// 在测试开始前初始化Dubbo客户端

ApplicationConfig application = new ApplicationConfig("jmeter-dubbo-client");

ReferenceConfig<GenericService> reference = new ReferenceConfig<>();

reference.setApplication(application);

reference.setRegistry("zookeeper://127.0.0.1:2181");

reference.setInterface("com.example.DemoService");

reference.setGeneric(true);

// 初始化泛化服务

genericService = reference.get();

}

@Override

public SampleResult sample(JavaSamplerContext context) {

SampleResult results = new SampleResult();

results.setSampleLabel("Dubbo Generic Call");

try {

// 调用Dubbo服务

Object result = genericService.$invoke("sayHello",

new String[]{"java.lang.String"},

new Object[]{"World"});

results.setSuccessful(true);

results.setResponseData(String.valueOf(result).getBytes());

results.setResponseMessage("Success");

} catch (Exception e) {

results.setSuccessful(false);

results.setResponseMessage("Error: " + e.getMessage());

e.printStackTrace();

}

return results;

}

@Override

public void teardownTest(JavaSamplerContext context) {

// 清理资源,例如关闭Dubbo连接等(如果需要的话)

// 注意:Dubbo的ReferenceConfig通常不需要显式关闭,但如果有其他资源需要清理,请在这里进行

}

}

3、打成jar包并跟jmeter结合

  1. 将JAR文件放入JMeter的lib/ext目录

将编译好的JAR文件放入JMeter安装目录下的lib/ext文件夹中。这样,当JMeter启动时,它会自动加载这个JAR文件,并使其中的Sampler可用。

  1. 重启JMeter

每次向lib/ext目录添加新的JAR文件后,都需要重启JMeter以确保它能够识别并加载新的Sampler。

  1. 在JMeter中添加Sampler

重启JMeter后,按照以下步骤在测试计划中添加你的Sampler:

右键点击测试计划或线程组,选择"添加" -> "取样器" -> "Java请求"(注意:虽然这里可能看不到你自定义Sampler的具体名称,但所有继承自AbstractJavaSamplerClient的Sampler都会通过"Java请求"这个通用选项添加)。

在打开的Java请求界面中,你会看到一个"类名"字段。在这个字段中,输入你的Sampler类的完全限定名(包括包名),例如com.example.jmeter.DubboGenericSampler。

点击"应用"或"确定"保存设置。

相关推荐
网安墨雨10 小时前
外包干了两年,我走出了安乐窝。。。
自动化测试·软件测试·职场和发展·压力测试
oh-pinpin10 小时前
【jmeter】-安装-单机安装部署(Windows和Linux)
测试工具·jmeter·压力测试
aloha_7891 天前
测试开发工程师面经准备(sxf)
java·python·leetcode·压力测试
程序员杰哥1 天前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
卓码软件测评1 天前
软件数据库测试:【数据库质量保障:从单元测试到性能优化】
运维·数据库·测试用例·压力测试
nanixiaowai1 天前
Jmeter+ant+Jenkins 接口自动化框架-让jmeter脚本自己跑起来
jmeter·自动化·jenkins
QT 小鲜肉2 天前
【个人成长笔记】在 Linux 系统下撰写老化测试脚本以实现自动压测效果(亲测有效)
linux·开发语言·笔记·单片机·压力测试
测试老哥2 天前
Jmeter+Maven+jenkins+eclipse 搭建自动化测试平台
自动化测试·软件测试·测试工具·jmeter·jenkins·maven·性能测试
nanixiaowai2 天前
Jmeter+ant+Jenkins 接口自动化框架-利用ant工具批量跑指定目录下的Jmeter 脚本
jmeter·自动化·jenkins