当前位置: 首页 > 知识库问答 >
问题:

用Java从JMeter远程测试中获取结果

闾丘选
2023-03-14

我试图直接从我的Java代码运行JMeter测试。应该通过JMeter服务器产生负载。在代码中,我使用连接到服务器上运行的JMeter守护进程的ClientJMeterEngine实例。这工作到目前为止,我可以开始和运行我的测试。我目前不明白的是如何从测试运行完成后获得结果。我当前的代码如下所示:

// create ClientJMeterEngine instance
ClientJMeterEngine jmeter = new ClientJMeterEngine("myHost:4000");
// load test
File file = new File("C:/myTest.jmx");
// configure test
HashTree testPlanTree = SaveService.loadTree(file); 
jmeter.configure(testPlanTree); 
// run test
jmeter.runTest();
2016/03/15 09:24:35 ERROR - jmeter.samplers.BatchSampleSender: testEnded(host) java.rmi.ConnectException: Connection refused to host: myHost; nested exception is:
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:631)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:228)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:214)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:238)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:190)
    at com.sun.proxy.$Proxy1.processBatch(Unknown Source)

客户端线程必须保持运行状态,以便客户端上的ResultCollector能够从服务器接收结果。我现在通过在客户机Java代码中“忙着等待”来实现这一点。现在的问题是知道服务器上的测试执行何时结束,这样我也可以完成客户端线程。ResultCollector确实具有识别测试已完成的功能,但没有用于此的公共方法。解决方案是扩展ResultCollector并重写testEnded方法:该方法将公共布尔变量“TestFinished”设置为true。

虽然这感觉有点“陈腐”。有人有更好的解决办法吗?

共有1个答案

蒯宇定
2023-03-14

我也遇到了同样的问题,并尝试了您的解决方案,即重写ResultCollector类的testEnded()方法。我的测试无休止地等待来自远程JMeter从服务器的响应。

实际问题是远程服务器-从服务器-从服务器在早期成功地响应了来自主服务器的请求。然而,连接在某个时候断开,测试结束时没有收到从机的任何报告。Slave无法启动新的TCP连接,并且无法在准备好测试报告后发送结果,因为它的主机名(IP)没有正确设置/发送到Master。

因此,解决方案是在命令行或jmeter.properties中使用正确的参数启动从机。

PS如果在GUI中运行测试,也可以使用以下参数运行Master:

D:\jmeter_new\apache-jmeter-3.1\bin>jmeterw-djava.rmi.server.hostname=ip_of_master

 类似资料:
  • 我正在LinuxCLI模式下对两台从机进行远程测试。我已经在主机和从机上设置了如下的rmi端口。我可以从主从机远程登录到端口8080/1099,反之亦然。防火墙已为这些端口打开。 jmeter.properties:client.rmi.localport=1099 jmeter.properties:server.rmi.localport=8080 我在主节点和从节点上启动了 jmeter 服

  • 我对JMeter很陌生,但我遇到了一个问题--如果我在远程节点中使用JMeter,我无法获得JMeter日志。 我正在启动JMeter by Maven插件,命令如下所示: 在远程节点上,我通过以下命令启动jmeter服务器: ./jmeter-djava.rmi.server.hostname=-dserver_port=1099-s 在我们的产品的日志和JMeter的日志中,我看到测试是正确的

  • 我正在一个网络接口上使用1台主机(192.168.0.1)和7台带有3个VM(192.168.0.2到192.168.00.4)的从机执行JMeter远程测试,其他4个VM(92.168.0.5到192.168.8.8)位于不同的网络接口上。 我的JMeter脚本位于主机器 - 192.168.0.1 我尝试使用以下命令执行测试 然而,测试从未开始。屏幕刚刚挂起,15分钟后我不得不停止测试。我只使

  • 我按照以下教程为Jeter设置了一个分布式测试环境: https://www.perfmatrix.com/configuration-process-for-distributed-testing-in-jmeter-5-3/ 我已经设法启动了远程(从属)服务器,然后在非GUI模式下从主计算机触发测试。 但它不想完成处决…这是什么原因? (我两台机器都在用Jeter 5.4版,而且在同一个网络,

  • 在JMeter分布式测试中使用非GUI模式时,如何更改所有从机的堆大小? 我想从主机器触发这个。C:\jeter\bin\jmeter.bat-n-t C:\test.jmx-Juser=10000-R192.168.0.19,192.168.0.29…… 我可以在这里传递一些参数,以便从主机器更改所有从机器的堆大小吗?

  • 我尝试使用我的计算机作为客户端/主服务器和EC2实例作为从属开始远程测试,我实现了所有这些要点: < li >禁用主服务器和从服务器上的防火墙。 < li >我在主机和从机上安装了相同版本的java和JMeter。 我已经将所有通信设置为通过端口4000。 我的主服务器配置: 远程主机=10.xx.xx.xxx 服务器端口=4000 server.rmi.port=4000 server.rmi.