Jmeter远程测试

参考https://max.book118.com/html/2019/0108/6145005114002000.shtm

如果您的JMeter客户端计算机无法使用性能方面,要模拟足够的用户来增强压力或受限于网络级别,则可以选择从单个JMeter客户端控制多个远程JMeter引擎。通过远程运行JMeter,您可以跨许多低端计算机复制测试,从而模拟服务器上的较大负载。JMeter客户端的一个实例可以控制任意数量的远程JMeter实例,并从中收集所有数据。这提供以下功能:
将测试samples保存到本地机器
从单个机器管理多个JMeter Engines
无需将测试计划复制到每个服务器 - 客户端将其发送到所有服务器
每一台JMeter远程服务器都执行相同的测试计划。JMeter不会在执行机间做负载均衡,每一台服务器都会完整地运行测试计划。所以如 果你设置1000个线程并且有6个JMeter服务器,你最终会注入6000个线程。
然而,远程模式确实使用更多的资源,而不是独立运行相同数量的非GUI测试。如果使用许多服务器实例,客户端JMeter可能会变得过载,客户端网络连接也会如此。这通过切换到“Stripped modes ”模式(见下文)得到了改进,但是您应该始终检查您的客户端是否没有超载。
请注意,虽然您可以在应用程序服务器上执行JMeterEngine,但您需要注意的是,这将在应用程序服务器上添加处理开销,因此您的测试结果将会受到某种程度的污染。建议的方法是将一台或多台计算机与您配置为运行JMeter Engine的应用程序服务器位于同一个以太网段上。这将最大限度地减少网络对测试结果的影响,而不会影响应用服务器本身的性能。
下面是启动JMeter远程测试的基本步骤:
  步骤1:配置节点
  确保所有节点(JMeter客户端和JMeter远程服务器)运行相同版本的JMeter。尽可能在所有操作系统上使用相同的Java版本。
  如果测试用到了外部数据文件,那么请注意这些文件不会被JMeter客户端分发,因此测试人员需要确保每台执行机上都保存了这些数据文件(其所在目录也必须正确)。如果有必要,用户可以为每台执行机设置不同的属性变量,即在JMeter远程服务器上编辑user.properties或者system.properties文件。这些属性将会在JMeter远程服务器启动时被识别,并有可能被应用到测试计划之中,从而影响测试执行(例如,与其他远程服务器发生交互)。另外,不同的JMeter远程服务器可能会使用不同内容的数据文件(例如,每台服务器必须使用不同的ID,就以此来划分数据文件)。
  步骤2:启动远程服务器
  要启动JMeter远程节点,请在执行机上运行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)脚本。
  请注意,每个远程节点上只能运行一个JMeter远程服务器脚本,除非采用不同的RMI端口。从JMeter 2.3.1开始,JMeter远程服务器会自己启动RMI注册;用户没有必要单独启动RMI注册。假设测试人员一定要单独启动RMI注册,可以在远程节点上定义JMeter属性server.rmi.create=false。
  默认情况下,JMeter远程服务器的RMI使用动态端口号。这样就会为防火墙配置带来麻烦,因此JMeter 2.3.2及其以后的版本,会检查JMeter属性server.rmi.localport。如果该值非零,JMeter远程服务器就会用它来作为本地端口号。
  步骤3:将JMeter远程服务器的IP地址添加到客户端属性文件中
  编辑JMeter控制机的属性文件。在/bin/jmeter.properties文件中找到属性"remote_hosts",使用JMeter远程服务器的IP地址作为其属性值。可以添加多个服务器的IP地址,以逗号作为分隔。
  请注意测试人员还可以使用-R命令行选项来指明将会使用的远程服务器。这与使用-r 和-Jremote_hosts={服务器列表}的效果相同。例如jmeter -Rhost1,127.0.0.1,host2。
  如果测试人员定义JMeter属性server.exitaftertest=true,那么远程服务器在运行完单个测试后就会退出。-Z标志也有同样的效果,参见后面的内容。
 步骤4(a):通过GUI客户端启动JMeter测试
  现在轮到启动JMeter GUI客户端了。在MS-Windows环境下运行"bin/jmeter.bat"脚本,在UNIX环境下运行"bin/jmeter"脚本。测试人员会发现在运行(Run)菜单下,包含两个子菜单"Remote Start"和"Remote Stop",如图11-4所示。这两个子菜单中包含测试人员在属性文件中设置的JMeter远程服务器IP地址。此刻,请使用远程启动和停止来代替普通的JMeter启动和停止。

图11-4 运行菜单
  步骤4(b):通过非GUI客户端启动JMeter测试
  还有另外一种方法,测试人员可以通过非GUI客户端来启动远程服务器。命令如下:
  jmeter -n -t script.jmx -r
  或者:
  jmeter -n -t script.jmx -R server1,server2…
  其他标志可能也有用。
  -Gproperty=value:在所有JMeter远程服务器中定义一个属性(可以多次出现)
  -Z:在测试结束后退出远程服务器。
  第一个例子会启动定义在JMeter属性remote_hosts中的远程服务器;而第二个例子会先定义远程服务器列表,接着启动它们。命令行客户端会在所有服务器停止后退出。
  1.手动配置JMeter远程测试
  在某些情况下,jmeter-server脚本不能正常工作(如果测试人员使用的操作系统不在JMeter开发者预期的范围内)。下面介绍如何启动JMeter远程服务器(对应上面的步骤2),其中包含了更多人工操作。
  步骤2(a):启动RMI注册
  从JMeter 2.3.1开始,JMeter远程服务器会自己启动RMI注册,因此这里的内容不适用于普通情况。如果要采用历史版本的操作方法,首先在JMeter远程服务器上定义JMeter属性server.rmi.create=false,并遵循如下指南。
  JMeter使用Remote Method Invocation(RMI)作为远程通信机制。因此,测试人员需要用到JDK “bin"目录中的RMI注册程序(名为"rRmiregistry”)。在运行Rmiregistry之前,请确保如下jar存在于测试人员的系统claspath中:
  JMETER_HOME/lib/ext/ApacheJMeter_core.jar。
  JMETER_HOME/lib/jorphan.jar。
  JMETER_HOME/lib/logkit-1.2.jar。
  注册程序需要访问特定JMeter类。运行Rmiregistry无须参数。默认情况下应用程序会监听端口1099。
  步骤2(b):启动JMeter远程服务器
  一旦RMI注册程序运行起来,就启动JMeter远程服务器。JMeter启动脚本需携带"-s"选项。
  步骤3和步骤4同上面的介绍。
  2.一些小技巧
  JMeter/RMI要求建立一个从客户端到远程服务器的连接。这就会用到测试人员所选择的端口号,默认值是1099。JMeter/RMI还要求建立一个反向连接,目的是从远程服务器向客户端返回测试采样结果。这就会用到一个更高数字的端口号。如果在JMeter客户端与JMeter远程服务器之间存在任何防火墙或者网络过滤器,那么测试人员就需要确保它们已经被正确配置,并允许相关连接通信。如果有必要,请使用监听软件来观察通信的过程。
  如果JMeter运行在Suse Linux上,下面这些技巧对测试人员可能会有帮助。默认的安装可能会启动防火墙。在这种情况下,远程测试将无法正常工作。如果测试人员发现连接被拒绝后,可以通过下面的选项打开debugging。从JMeter 2.3.1版本开始,RMI注册由JMeter远程服务器启动;不过相关选项依然可以通过JMeter命令行传递。例如,“jmeter -s -Dsun.rmi.loader.logLevel=verbose”(省略了-J前缀)。另外这些属性还可以被定义在system.properties文件中。
  解决的方法是从etc/hosts中删除对127.0.0.1和127.0.0.2的回送(Loopback)。 当127.0.0.2的回送无效时,jmeter-server将无法连接到Rmiregistry。
  替换:
  dirname $0/jmeter -s “$@”
  为:
  HOST="-Djava.rmi.server.hostname=[computer_name][computer_domain]
  -Djava.security.policy=dirname $0/[policy_file]"
  dirname $0/jmeter H O S T − s " HOST -s " HOSTs"@"
同时创建一个规则(Qolicy)文件,添加[computer_name][computer_domain]行到/etc/hosts。
  3.如何使用不同端口号
  默认情况下,JMeter使用标准RMI端口号1099(这是可以改变的)。要想成功改变使用的端口号,需满足如下条件:
  在远程服务器,启动Rmiregistry使用新端口号。
  在远程服务器,启动JMeter并预先定义server_port属性。
  在客户端,更新remote_hosts属性,在其中包含remote host:port设置。
  从JMeter 2.1.1版本开始,jmeter-server脚本支持改变端口号。例如,假设测试人员希望使用端口号1664(可能因为1099端口已经被其他应用程序占用了)。
  Windows系统 (DOS窗口中):
  C:\JMETER> SET SERVER_PORT=1664
  C:\JMETER> JMETER-SERVER [other options]
  UNIX系统:
  $ SERVER_PORT=1664 jmeter-server [other options]
  [N.B. use upper case for the environment variable]
  在这两种情况下,脚本都会在指定端口上启动Rmiregistry,接着以远程服务器模式启动JMeter,并已经定义了"server_port"属性。
  选定的端口号将会被记录到远程服务器的jmeter.log文件中(Rmiregistry不会创建一个日志文件)。
  4.使用采样批次
  测试计划中的监听器会把它们的结果返回到JMeter客户端,而JMeter客户端默认情况下会将这些结果写入到指定文件中,采样结果会在产生后立即发回JMeter客户端。这样就会对网络和JMeter客户端产生很大的压力。用户可以通过设置一些属性,来改变默认操作。
  模式(Mode)(采样结果发送模式)默认是Standard。
  Standard:在采样结果产生后立即发送。
  Hold:将采样结果保存在一个数组中,直到测试结束。这可能会占用远程服务器的大量内存。
  Batch:当计数器或者时间超过阈值之后,发送保存的采样结果。
  Statistical:当计数器或者时间超过阈值之后,以概要的形式发送采样结果;采样结果以线程组(Thread Group)名称和采样标签(Sample Label)进行概要统计。积累的数据域包括:elapsed time、latency、bytes、sample count、error count,其他数据域将会被丢弃。
  Stripped:将成功采样的响应数据移除。
  StrippedBatch:将成功采样的响应数据移除,并批次发送。
  Custom implementation:将模式参数设置为测试人员的客户化采样发送器的类名。该类必须实现接口SampleSender,并且类的构造函数只有一个RemoteSampleListener型的参数。
  如下属性会影响Batch和Statistical模式。
  num_sample_threshold:一个批次中的采样数目(默认为100)。
  time_threshold:等待的毫秒数(默认为60秒)。

猜你喜欢

转载自blog.csdn.net/wenmin_111/article/details/112346347