jmeter学习(三十)以non-gui模式进行分布式测试

小C 小C     2022-09-09     387

关键词:

由于Jmeter是一个纯Java的应用,用GUI模式运行压力测试时,对客户端的资源消耗是相当惊人的,所以在进行正式的压测时一定要使用non-gui模式运行,如果并发数很高或者客户端的硬件资源比较一般的话,还可以以server模式用多个client进行分布式测试。一直有朋友问我这个分布式测试要怎么用,我就结合官方文档和自己的实际经验来谈一谈。

首先请先确保你的系统中环境都准备好了,否则在执行下文中的一些操作时可能会有一些异常抛出导致脚本执行失败

前置工作

    • Linux & MacOS X
      • vim ~/.profile
      • 在文件末尾增加以下代码:
        export JMETER_HOME=/yourpath/apache-jmeter-x.y
        #yourpath是你的Jmeter解压目录
        #x.y是Jmeter版本,当然你也可以重命名此目录

         

      • 运行以下命令使配置生效
        source ~/.profile

         

      • 在命令行输入 jemeter -v,如果打印出Jmeter的版本信息,说明环境配置成功
    • Windows
      • 计算机-属性-高级系统设置-环境变量
      • 点击新建,变量名输入:JMETER_HOME,变量值输入你的Jmeter解压路径
      • 点击确定,然后编辑path,在变量值末尾加上%JMETER_HOME%\bin
      • 设置好之后,验证一下配置是否成功,打开DOS窗口输入 jemeter -v,如果打印出Jmeter的版本信息,说明环境配置成功

必须要了解的一些信息

既然是要通过non-gui模式运行,那么我们就不得不去了解下在non-gui模式下jmeter命令的参数,下面是Jmeter官方文档中列出来的一些参数,中文注释部分为我加入的解释

复制代码
 -h, --help
                print usage information and exit
         #打印帮助信息 
        -v, --version
                print the version information and exit
          #打印版本信息
        -p, --propfile {argument}
                the jmeter property file to use
          #运行时指定property文件,默认是使用JMETER_HOME/bin目录下的jmeter.properties,如果用户自定义有其它的配置,在这里加上
          #用法如下: -p user.properties
        -q, --addprop {argument}
                additional property file(s)
          #其它配置文件,如JVM参数等等
        -t, --testfile {argument}
                the jmeter test(.jmx) file to run
          #要运行的jmeter脚本
        -j, --jmeterlogfile {argument}
                the jmeter log file
          #指定记录jmeter log的文件,默认为jmeter.log
        -l, --logfile {argument}
                the file to log samples to
          #记录采样器Log的文件
        -n, --nongui
                run JMeter in nongui mode
          #以nongui模式运行jmeter
        -s, --server
                run the JMeter server
          #运行JMeter server
        -H, --proxyHost {argument}
                Set a proxy server for JMeter to use
          #代理服务器地址
        -P, --proxyPort {argument}
                Set proxy server port for JMeter to use
          #代理服务器端口
        -u, --username {argument}
                Set username for proxy server that JMeter is to use
          #代理服务器的用户名
        -a, --password {argument}
                Set password for proxy server that JMeter is to use
          #代理服务器用户名对应的密码
        -J, --jmeterproperty {argument}={value}
                Define additional JMeter properties
          #定义额外的Jmeter属性
        -G, --globalproperty (argument)[=(value)]
                Define Global properties (sent to servers)
                e.g. -Gport=123
                 or -Gglobal.properties
          #定义发送给server的全局属性
         #如:-Gport=123 或者-Gglobal.properties(指定监听server的端口)
        -D, --systemproperty {argument}={value}
                Define additional System properties
          #定义系统属性
        -S, --systemPropertyFile {filename}
                a property file to be added as System properties
         #通过指定的property文件定义系统属性
        -L, --loglevel {argument}={value}
                Define loglevel: [category=]level 
                e.g. jorphan=INFO or jmeter.util=DEBUG
          #定义日志等级
        -r, --runremote (non-GUI only)
                Start remote servers (as defined by the jmeter property remote_hosts)
          #启动远程server(在jmeter property中定义好的remote_hosts),公在non-gui模式下此参数才生效
        -R, --remotestart  server1,... (non-GUI only)
                Start these remote servers (overrides remote_hosts)
          #启动远程server(如果使用此参数,将会忽略jmeter property中定义的remote_hosts)
        -d, --homedir {argument}
                the jmeter home directory to use
                #Jmeter运行的主目录
        -X, --remoteexit
                Exit the remote servers at end of test (non-GUI)
          #测试结束时,退出(在non-gui模式下)
复制代码

 配置jmeter client & server

了解了上面的各个参数后,开始配置分布式测试

先看一下官方文档是怎么说的,中文为我添加的注释:

复制代码
1. the firewalls on the systems are turned off.
#1.关闭防火墙
2. all the clients are on the same subnet.
#2.所有的客户端都在同一个子网内
3. the server is in the same subnet, if 192.x.x.x or 10.x.x.x ip addresses are used. If the server
doesn't use 192 or 10 ip address, there shouldn't be any problems.
#3.server也必须在同一子网内如果使用192.x.x.x或者10.x.x.x这样的IP地址,如果server没有使用192或者10这样的IP地址,(server同client不在同一子网内)将不会有任何问题
4. Make sure JMeter can access the server.
#4.确保Jmeter可以访问到server
5. Make sure you use the same version of JMeter on all the systems. Mixing versions may not work
correctly.
#5.确保各系统的Jmeter版本保持一致,不同版本的Jmeter将不能很好的工作
复制代码

分布式测试的思想为:一台master主机初始化测试并控制多个slave系统,下图为服务器和客户端的结构示意图:

下图为Jmeter实际运行时的结构:

一些术语的解释:

  • master,以GUI模式运行,同时控制测试的运行,在这里就是client,启动脚本所在的那台机器。
  • slave,运行jmeter-server并从master接收指令、向目标服务器发送请求

设置jmeter-server:

用文本编辑器打开JMETER_HOME/bin目录下的jmeter.properties文件,添加运行jmeter-server的主机IP到remote-hosts

remote_hosts=10.0.0.158, 10.0.0.140,localhost

 

如果你不希望你的客户端也作为jmeter-server运行的话,把localhost从上面的配置中移除。

 

写了这么多,下面进行实战阶段:

  1. 将配置在remote_hosts中的机器上的jmeter-server启动(windows以管理员身份运行JMETER_HOME/bin目录下的jmeter-server.bat,linux&macos下运行JMETER_HOME/bin目录下的jmeter-server)
    • 这里多说一句,官方文档中有这样一个配置
      复制代码
      1. On the slave systems, go to jmeter/bin directory and execute jmeter-server.bat (jmeter-server on
      unix). On windows, you should see a dos window appear with “jre\[version]\bin\rmiregistry.exe”.
      If this doesn't happen, it means either the environment settings are not right, or there are
      multiple JRE installed on the system. Note: [version] would be the jre version installed on the
      system.
      1. Open jmeter-server.bat in a text editor
      2. go to line 44 and find “:setCP”
      3. edit “START rmiregistry” to the full path. Example: “START
      C:\<JAVA_HOME>\jre\bin\rmiregistry”
      复制代码

       实际上这一步是可以省略掉的(我使用的版本为2.13),文档中的行数也不对,应该是以前版本的了吧,当然配置一下也没问题

  2. 在客户端以gui模式启动jmeter,然后打开或者创建一个测试脚本
  3. 从gui模式启动所有的远程server,方法:运行-远程全部启动,看下图,也可以单独启动某一个jmeter-server
    • 如果有jmeter-server没有启动或者配置有问题,那么这次测试不会运行,会报以下错误(我这里是没有在140这台机器上启动Jmeter-server):
    • 启动成功后,在运行jmeter-server上的机器上可以看到以下日志输出
  4. 至此,脚本调试完成,关掉Jmeter GUI(先通过GUI停掉远程已经开启的jmeter-server)
  5. 进入测试脚本所在的目录,执行以下命令
    • jmeter -t "JMS Point-to-Point.jmx" -n -l testresult.csv -r

       运行成功后,在客户端机器上可以看到以下Log输出:

至此,以经通过non-gui模式运行Jmeter分布式测试了

这里有一点小贴士:以分布式运行Jmeter,是在所有的server上运行同样的测试脚本,也就是说,如果你打算1s起100个线程,如果你用5台机器进行分布式测试,那么将脚本调试至1s起20个线程,否则则是1s起了500个线程,这样可能跟你的预期有所差别。

 

在实践中发现,通过对Jmeter进行设置调优,单台客户机的并发数也很不错,后面抽空专门写一篇关于Jmeter调优的文章。

转自:http://www.cnblogs.com/qianyiliushang/p/4381639.html

jmeter的non-gui模式分布式测试

...消耗是相当惊人的,所以在进行正式的压测时一定要使用non-gui模式运行,如果并发数很高或者客户端的硬件资源比较一般的话,还可以以server模式用多个client进行分布式测试。准备工作配置JMETER_HOME,步骤:Linux&MacOSXvim~/.profi... 查看详情

jmeter在non-gui模式下用法(代码片段)

用法jmeter-n-tHTTPRequesttest.jmx-ltestHistory/testResult.jtl-e-otestHistory/testReport参数说明-n:以非GUI形式运行Jmeter-t:source.jmx脚本路径-l:运行结果保存路径(.jtl),此文件必须不存在-e:在脚本运行结束后生成html报告-o:保存html报告的地址,... 查看详情

jmeter学习(三十六)发送https请求(转载)

  Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试。由于在云阅读接口测试的过程中需要进行登录操作,而登录请求是HTTPS协议。这就需要对jmeter进行设置。  (一)设置HTTP请求  我们首先右键... 查看详情

转载jmeter学习(三十六)发送https请求

Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试。由于在云阅读接口测试的过程中需要进行登录操作,而登录请求是HTTPS协议。这就需要对jmeter进行设置。  (一)设置HTTP请求  我们首先右键添加线... 查看详情

jmeter学习(三十二)属性和变量

一、Jmeter中的属性:1、JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性2、JMeter属性在测试脚本的任何地方都是可见的(全局),通常被用来定义一些JMeter使用的默认值,可以用于在线程间传递... 查看详情

jmeter学习(三十四)测试报告优化

如果按JMeter默认设置,生成报告如下:从上图可以看出,结果信息比较简单,对于运行成功的case,还可以将就用着。但对于跑失败的case,就只有一行assert错误信息。(信息量太少了,比较难找到失败原因)优化大致过程:1、下... 查看详情

jmeter(三十六)_运行过程中改变负载

顾名思义,jmeter在做性能测试时,可以在不停止脚本的情况下修改负载压力,达到期望的测试效果。我们将通过ConstantThroughputTimer(吞吐量计时器)和Beanshell服务器来组合完成。1:在jmeter中添加ConstantThroughputTimer。我们将通过设置... 查看详情

jmeter学习笔记3-参数化

...例。两种方式:一种可以在badboy里进行参数化,另一种在jmeter中进行,本例中采用在jmeter中进行参数化。使用的脚本在badboy里进行录制后,在导入到Jmeter中。1.导入录制好的脚本到Jmeter中:2.第一种参数化的方法:1)添加->前置处... 查看详情

jmeter(三十七)tcp

...le使⽤的TCPClient的实现,可以是⾃定义的,可以是JMeter提供的。TCPClientImpl:TCPClient最简单实现类,也是默认使⽤的Client。以⽂本⽅式发送和接收数据。读取响应时读到输⼊流结束或者结束符停⽌。其中... 查看详情

jmeter学习-007-jmeter断言实例之一-响应断言jmeter学习-004-web脚本入门实战

...已经对如何录制web的请求进行了详细的描述,敬请参阅:JMeter学习-004-WEB脚本入门实战同时,我们的手机应用(例如:京东、天猫、唯品会、携程、易迅等等App)所发出的请求,也可进行录制,只需要将手机连接的无线网络代理... 查看详情

如何使用具有 3 个从机和 1 台主机的 jmeter 以分布式模式分配 100 个用户?

】如何使用具有3个从机和1台主机的jmeter以分布式模式分配100个用户?【英文标题】:Howdoidistribute100usersindistributedmodeusingjmeterwith3slavesand1mastermachine?【发布时间】:2021-12-3018:33:31【问题描述】:假设我们有100个用户使用分布式测... 查看详情

学习三十五

11.6MariaDB安装11.7/11.8/11.9Apache安装扩展apachedsohttps://yq.aliyun.com/articles/6298apacheapxshttp://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/programs/apxs.htmlapache工作模式http://www.cnblogs.com/fn 查看详情

性能测试-jmeter

今天开始学习Jmeter,主要从以下几方面开始学习一、jmeter基础概念  JMeter是一个非常优秀的开源的性能测试工具。它和其它性能工具一样包含4个部分:    1、负载发生器:用于产生负载,通常以多线程或多进程的... 查看详情

jmeter命令行执行(non-guimode)

non-gui:即表示没有图形化界面运行不以图形化界面运行的, 1、没有图形化界面运行 2、先把jmeter的bin目录加入到环境变量里面------如果不添加环境变量,则D:Jmeterjmeter-3.1injmeter.bat  然后执行这个命令 jmeter-n-te:pathHTTP请... 查看详情

学习三十五(代码片段)

11.6MariaDB安装11.7/11.8/11.9Apache安装扩展apachedsohttps://yq.aliyun.com/articles/6298apacheapxshttp://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/programs/apxs.htmlapache工作模式http://www.cnblogs.com/fn 查看详情

使用jmeter进行http接口测试

这几天学习了一下使用Jmeter进行HTTP接口测试,这个也是后面进行性能测试的基础吧安装运行请自行搜索,下载地址:http://jmeter.apache.org/download_jmeter.cgi这里只讲流程先以一个最简单的音乐列表请求为例http://www.xxx.com/service/audio/rec... 查看详情

jmeter(三十四)jmeter-question之“cookie获取”

...什么都需要自己去挖掘。  本次测试的工具选型依然是Jmeter,真实场景中遇到了这么个问题。可能解决办法有点笨拙,勉强算一次记录吧!  场景是这样:    每登录一次,便会生成token令牌。(注:该token令牌是在请... 查看详情

jmeter学习笔记5-检查点

1.定义:Jmeter中的检查点就是断言中的响应断言。2.通过实例进行介绍:以sogou.com搜索为例,检查搜索关键字,search.jmxbadboy录制后导入Jmeter集行参数化对相应请求添加响应断言对相应请求添加断言结果一般断言执行成功,就只显... 查看详情