51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 482|回复: 0
打印 上一主题 下一主题

如何使用JMeter进行多服务器远程测试?

[复制链接]
  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-6-25 11:41:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    JMeter是Apache软件基金会的开源项目,主要来做功能和性能测试,用Java编写。
      我们一般都会用JMeter在本地进行测试,但是受到单个电脑的性能影响,往往达不到性能测试的要求,无法有效的模拟高并发的场景,那么这个时候,我们就可以借由JMeter提供的Romote Test来进行远程的测试。
      其工作方式入下图:

      我们可以在多台电脑上,启动JMeter的Romote Testing模式,然后用某一台服务器作为Master端通过RMI控制Slave端来执行我们的测试脚本。当JMeter Slave端执行完测试脚本后,会将执行结果发送回Master控制端进行汇总,得出整体的测试报表。
      JMeter的Romote Test模式的好处就是可以用一台终端、一个测试计划在多台服务器端同时对目标服务器进行测试,并且将测试的结果回报给统一的控制终端进行汇总,方便高并发的测试需求。
      下面介绍下JMeter这种远程测试的使用方法。
      Step 1: 在Slave端安装JMeter
      JMeter可以从官网下载,下载地址:https://jmeter.apache.org/download_jmeter.cgi
      由于JMeter的运行需要Java环境,所以,服务器端也必须安装Java。
      注意:为了Remote Testing模式能正常工作,尽量保证Slave端和Master端的JMeter和Java版本一致。
      Step 2: Slave端运行JMeter
      在JMeter的bin目录下,执行下面命令,就可以以服务的方式启动JMeter的Slave端:
      jmeter-server

      JMeter Slave端,默认会启动RMI(Remote Method Invoke)机制,RMI的默认端口为1029,可以在文件jmeter.properties中进行修改。
      另外,从JMeter 4.0开始,RMI默认会使用SSL连接,为了能让Slave端和Master端正常通讯,我们需要生成对应的keys和certificates。在JMeter的bin目录下,自带JKS(Java KeyStore)文件生成命令。
      在JMeter的bin目录下运行如下的命令,并按照提示符输入相应的内容:
      >bin % ./create-rmi-keystore.sh
      What is your first and last name?
        [Unknown]:  rmi
      What is the name of your organizational unit?
        [Unknown]:  unit
      What is the name of your organization?
        [Unknown]:  org
      What is the name of your City or Locality?
        [Unknown]:  city
      What is the name of your State or Province?
        [Unknown]:  prov
      What is the two-letter country code for this unit?
        [Unknown]:  cn
      Is CN=rmi, OU=unit, O=org, L=city, ST=prov, C=cn correct?
        [no]:  yes
      Enter key password for <rmi>
          (RETURN if same as keystore password):  
      Re-enter new password:
      Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'


      注意:提示符里面的内容,第一条的名字和最后的密码需要记录下来,其他的内容可以任意填写。
      例如,我这里的第一条填写的name是rmi,最后的密码设置为changeit,如果你这里填了其他的值,那么,你需要将你的值写到jmeter.properties文件中,分别对应两个属性:
      server.rmi.ssl.keystore.alias
      server.rmi.ssl.truststore.password


      最后,我们还需要按照提示,将生成的rmi_keystore.jks文件复制到需要连接的JMeter的bin目录下。如果放到其他目录下,我们需要在jmeter.properties文件中通过server.rmi.ssl.keystore.file指定.jks文件的目录。
      Step 3: Master控制Slave执行测试脚本
      在Slave端启动成功后,我们就可以尝试在Master端进行连接控制。
      首先,我们需要将远程JMeter服务器(Slave端)的IPort添加到本地JMeter中,方式是修改本地bin目录下的jmeter.properties文件,在其中找到remote_hosts,将自己的远程JMeter的host和端口添加到这里,如果有多个,使用,分隔。
      remote_hosts=<server ip>:1199

      配置完成后,我们就可以运行命令来执行我们的测试计划:
      ./jmeter.sh -n -t test.jmx -r

      -r: 会控制在remote_hosts中配置的所有Slave端来执行我们的测试计划test.jmx;
      你也可以直接在命令行中来指定想要控制的远程JMeter的具体IPort,命令如下:
      ./jmeter.sh -n -t test.jmx -R<IP>:1099

      问题和解决方案
      这里可能会出现很多问题,下面列出一些我踩过的坑:
      1. Master报连接被拒绝,这个时候你需要检查防火墙设置,是否屏蔽了端口;
      2. Slave端启动时,你会发现每次的端口都是随机的,这个可能会造成每次都需要去修改防火墙的端口策略,我们可以通过修改jmeter.properties中的server.rmi.localport来设置一个固定端口号;
      3. 某些特殊情况,也会出现客户端无法连接的问题,比如,有些服务器是有双网卡的,这个时候,我们可能就需要指定JMeter启动的服务器端的IP,配置的方式是修改bin/jmeter-server文件,将其中注释的一行修改如下:
      RMI_HOST_DEF=-Djava.rmi.server.hostname=1.2.3.4

      这里的1.2.3.4为你要指定的网卡的IP。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-3 09:09 , Processed in 0.065436 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表