java 调用 jmx_java使用jmeter生成jmx文件并运行

前提准备

我们使用jmeter发送POST请求

# url:

localhost:8088/mongo/insert

# method:

POST

# headers

{

"Content-Type" : "application/json"

}

# body

{

"name": "liuyiyang",

"password": "123456"

}

857187304057dcb9b893c5bcf9a4a81d.png

下载jmeter

我用的是5.3的版本

4d2dee2efb57cc711af92e6cdd351bbe.png

新建一个maven项目

我用的是spring boot项目

引入相关依赖

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

org.apache.commons

commons-lang3

3.9

org.projectlombok

lombok

1.18.12

org.springframework.boot

spring-boot-starter-log4j

1.3.8.RELEASE

org.apache.jmeter

ApacheJMeter_core

5.3

org.apache.jmeter

ApacheJMeter_java

5.3

org.apache.jmeter

ApacheJMeter_http

5.3

org.apache.httpcomponents

httpclient

4.5.6

编写JmterTest测试类

设置使用的jmeter

String jemterHome = "/Users/liufei/Downloads/apache-jmeter-5.3";

JMeterUtils.setJMeterHome(jemterHome);

JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir() + "/jmeter.properties");

创建测试计划

private static TestPlan getTestPlan() {

TestPlan testPlan = new TestPlan("Test Plan");

testPlan.setFunctionalMode(false);

testPlan.setSerialized(false);

testPlan.setTearDownOnShutdown(true);

testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());

testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());

testPlan.setProperty(new BooleanProperty(TestElement.ENABLED, true));

testPlan.setProperty(new StringProperty(TestElement.COMMENTS, ""));

testPlan.setTestPlanClasspath("");

Arguments arguments = new Arguments();

testPlan.setUserDefinedVariables(arguments);

return testPlan;

}

设置循环控制器

private static LoopController getLoopController() {

LoopController loopController = new LoopController();

loopController.setContinueForever(false);

loopController.setProperty(new StringProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName()));

loopController.setProperty(new StringProperty(TestElement.TEST_CLASS, LoopController.class.getName()));

loopController.setProperty(new StringProperty(TestElement.NAME, "循环控制器"));

loopController.setProperty(new StringProperty(TestElement.ENABLED, "true"));

loopController.setProperty(new StringProperty(LoopController.LOOPS, "1"));

return loopController;

}

创建线程组

/

/***

* 创建线程组

* @param loopController 循环控制器

* @param numThreads 线程数量

* @return

*/

private static ThreadGroup getThreadGroup(LoopController loopController, int numThreads) {

ThreadGroup threadGroup = new ThreadGroup();

threadGroup.setNumThreads(numThreads);

threadGroup.setRampUp(1);

threadGroup.setDelay(0);

threadGroup.setDuration(0);

threadGroup.setProperty(new StringProperty(ThreadGroup.ON_SAMPLE_ERROR, "continue"));

threadGroup.setScheduler(false);

threadGroup.setName("回放流量");

threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName());

threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName());

threadGroup.setProperty(new BooleanProperty(TestElement.ENABLED, true));

threadGroup.setProperty(new TestElementProperty(ThreadGroup.MAIN_CONTROLLER, loopController));

return threadGroup;

}

创建Http请求信息

/***

* 创建http请求信息

* @param url ip地址

* @param port 端口

* @param api url

* @param request 请求参数(请求体)

* @return

*/

private static HTTPSamplerProxy getHttpSamplerProxy(String url, String port, String api, String request) {

HTTPSamplerProxy httpSamplerProxy = new HTTPSamplerProxy();

Arguments HTTPsamplerArguments = new Arguments();

HTTPArgument httpArgument = new HTTPArgument();

httpArgument.setProperty(new BooleanProperty("HTTPArgument.always_encode", false));

httpArgument.setProperty(new StringProperty("Argument.value", request));

httpArgument.setProperty(new StringProperty("Argument.metadata", "="));

ArrayList list1 = new ArrayList<>();

list1.add(new TestElementProperty("", httpArgument));

HTTPsamplerArguments.setProperty(new CollectionProperty("Arguments.arguments", list1));

httpSamplerProxy.setProperty(new TestElementProperty("HTTPsampler.Arguments", HTTPsamplerArguments));

httpSamplerProxy.setProperty(new StringProperty("HTTPSampler.domain", url));

httpSamplerProxy.setProperty(new StringProperty("HTTPSampler.port", port));

httpSamplerProxy.setProperty(new StringProperty("HTTPSampler.protocol", "http"));

httpSamplerProxy.setProperty(new StringProperty("HTTPSampler.path", api));

httpSamplerProxy.setProperty(new StringProperty("HTTPSampler.method", "POST"));

// JMETER_ENCODING这个是我定义的常量,设置的编码是UTF-8,后面还有其他地方用到这个常量

httpSamplerProxy.setProperty(new StringProperty("HTTPSampler.contentEncoding", JMETER_ENCODING));

httpSamplerProxy.setProperty(new BooleanProperty("HTTPSampler.follow_redirects", true));

httpSamplerProxy.setProperty(new BooleanProperty("HTTPSampler.postBodyRaw", true));

httpSamplerProxy.setProperty(new BooleanProperty("HTTPSampler.auto_redirects", false));

httpSamplerProxy.setProperty(new BooleanProperty("HTTPSampler.use_keepalive", true));

httpSamplerProxy.setProperty(new

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Java中的JMX(Java Management Extensions)技术来采集当前环境的设备连接和拓扑信息。 JMXJava语言的一种技术,可用于监测和管理应用程序、设备、系统和网络。 要使用JMX收集信息,你需要执行以下步骤: 1. 在应用程序中启用JMX功能。这可以通过在程序的启动脚本中添加特定的JMX参数来实现。 2. 使用JMX客户端连接到应用程序并查询相关信息。可以使用工具(例如jconsole)或编写自己的JMX客户端代码来实现。 3. 使用Java代码将收集的信息转换为JSON格式。可以使用第三方库(如Gson)或内置的Java API(例如org.json)来实现。 以下是一个简单的示例代码,展示了如何使用JMX客户端收集信息并将其转换为JSON格式: ``` import java.io.IOException; import java.util.Set; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import com.google.gson.Gson; public class JmxClient { public static void main(String[] args) throws IOException { // Connect to the JMX server JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"); JMXConnector jmxConnector = JMXConnectorFactory.connect(url); MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); // Query MBeans ### 回答2: 要实现采集当前环境的设备的连线和拓扑信息并生成树状的JSON代码,可以使用Java编程语言结合一些相关的库和技术。 首先,需要采集当前环境的设备信息。可以使用Java的网络编程库来获取设备的IP地址、MAC地址和其他相关的网络信息。例如,可以使用Java的InetAddress类获取本机和其他设备的IP地址,使用NetworkInterface类获取设备的MAC地址。 接下来,需要获取设备之间的连线信息。可以通过扫描网络中的设备或者使用其他的网络发现技术,例如使用Java的Socket类向其他设备发送请求,然后解析响应来获取设备之间的连接关系。可以使用递归算法来遍历网络中的所有设备,并将连线关系保存在一个数据结构中。 然后,需要将设备的连线和拓扑信息转换为树状结构的JSON代码。可以使用Java的JSON库,例如Jackson或者Gson,将设备和连接关系转换为JSON对象。可以使用Java的Map和List等数据结构来表示设备和连接信息,然后使用JSON库将其序列化为JSON字符串。 最后,可以将生成的JSON代码保存到文件中或者通过网络发送给其他的应用程序进行处理和展示。可以使用Java文件操作API将JSON字符串写入文件,或者使用Java的网络编程库将其发送给其他设备或应用程序。 综上所述,使用Java编程语言和相关的库和技术可以实现采集当前环境的设备的连线和拓扑信息生成树状的JSON代码。具体的实现过程需要根据实际情况进行调整和完善。 ### 回答3: 要实现采集当前环境的设备的连线和拓扑信息生成树状的JSON代码,可以使用Java的工具类库和数据结构来实现。以下是一个可能的实现思路: 首先,需要使用Java的网络编程功能来获取当前设备的连线信息。可以使用Java的Socket类来建立网络连接并进行数据收发,通过建立TCP连接,获取到网络设备的信息。 然后,可以使用Java的数据结构中的图(Graph)或树(Tree)来表示设备的拓扑关系。可以创建一个设备类(Device),其中包含设备的名称、IP地址等属性,并使用一个集合(如ArrayList)来存储相互连接的设备。 接下来,可以使用递归算法来遍历设备的拓扑关系,生成树状的拓扑信息。从一个根节点开始遍历,递归地访问所有连接设备,并将其添加到相应的父节点下面。 最后,可以使用Java的JSON库(如Jackson、Gson等)来将设备拓扑信息转换为JSON格式的字符串。可以创建一个根节点,将设备类的属性作为JSON对象的键值对,并将连接设备的集合作为子节点添加。再将整个树状结构转换为JSON字符串输出。 通过将上述步骤结合起来,我们就可以实现采集当前环境的设备连线和拓扑信息生成树状的JSON代码,并且使用Java编程语言来进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值