美文网首页软件测试go
Jmeter分布式测试

Jmeter分布式测试

作者: Kingtester | 来源:发表于2019-10-16 16:28 被阅读0次

    在使用Jmeter做并发测试的时候,可能由于控制机的性能不足,难以完成任务。比如后台服务器可以承担的最大并发数50000,结果,运行Jmeter的Master设备在发送50000并发的时候自己先宕机了。为了解决这个现象,我们就必须寻找压测奴隶帮我们解决任务,Jmeter控制机控制其他多台电脑一起发送50000请求到后台服务器,这样就完美解决了问题。
    我们先来看一下整体的思路。


    image.png

    <本次配置>

    Master机:Windows物理机

    Slave机:Linux虚拟机;Windows物理机

    Server:Linux虚拟机(被测服务器)

    一、预先准备工作

    1. Linux服务器环境(LAMP)搭建

    CentOS7安装PhpStudy,搭建Linux服务器环境(LAMP+LNMP)

    CentOS7安装PhpStudy+ECShop要点 & 异常处理

    2. Linux服务器资源监控

    1)Linux服务器资源监控

    使用Nmon ==>Linux性能监控工具Nmon的安装使用、生成数据报告

    (可联合JMeter插件工具、以及Linux自带的top命令实时监控)

    2)MySQL数据库服务器监控

    使用Spotlight ==>数据库性能监控工具Spotlight on MySQL的安装

    二、 Linux服务器(Slave机)配置JMeter运行&监听环境

    1. 安装JAVA环境

    Master机和Slave机都需要安装相同版本的JAVA环境(如:JDK 8),并配置环境变量。如:Linux系统中安装JDK ==>CentOS7系统中安装JDK8-过程记录

    JAVA目录位置:/usr/local/java(预先在/usr/local目录下创建java目录:mkdir java)

    image

    2. 上传JMeter至服务器

    1)预先将apache-jmeter-4.0.zip压缩包上传至Linux服务器,如/usr/local/jmeter目录下(预先在/usr/local目录下创建jmeter目录:mkdir jmeter)

    2)解压:unzip apache-jmeter-4.0.zip

    image

    3. 配置JMeter环境变量

    以命令vi /etc/profile打开环境变量配置文件,在配置文件内接近末尾位置添加以下内容,如下:

    ---Set JMETER Environment---JMETER_HOME=/usr/local/jmeter/apache-jmeter-4.0PATH=PATH:JMETER_HOME/binexportJMETER_HOME PATH# ---Set JMETER Environment---

    保存以上配置内容,然后使环境变量生效:source /etc/profile

    查看JMeter配置版本:jmeter -v

    image

    4. 启动jmeter-server

    路径切换:cd /usr/local/jmeter/apache-jmeter-4.0/bin

    操作命令:jmeter-server或./jmeter-server

    image

    启动jmeter-server服务,若出现以下异常:

    image

    解决方案 ==>[JMeter]...java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address_解决方案

    具体操作:编辑jmeter-server文件,将服务器的主机IP设置为固定值(与Linux服务器ifconfig查询出的实际IP保持一致)

    One way to fix this is to define RMI_HOST_DEF belowRMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.248.138

    然后再次启动jmeter-server,即可正常启动

    image

    若出现以下异常:

    "Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:

    java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)

    An error occurred: Listen failed on port: 0; nested exception is:

    java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)"

    则修改jmeter.properties文件为如下:

    Set this if you don't want to use SSL for RMIserver.rmi.ssl.disable=true

    5. 上传ServerAgent至服务器,启动监控服务器资源

    1)将ServerAgent-2.2.1.zip压缩包上传至Linux服务器,如/usr/local/server-agent目录下(预先在/usr/local目录下创建server-agent目录:mkdir server-agent)

    2)解压:unzip ServerAgent-2.2.1.zip

    image

    3)查看文件权限:ls -la

    确保startAgent.sh具有可执行权限

    image

    4)启动ServerAgent:./startAgent.sh

    ServerAgent默认监听4444端口,如下:

    image

    三、Windows主控机(Master机)配置JMeter运行&监听环境

    1. 预先安装JAVA和JMeter

    在Windows主控机中,提前安装好与Linux服务器相同版本的JAVA、JMeter,并各自配置好系统环境变量

    1)JAVA环境变量:

    JAVA_HOME:C:\Program Files\Java\jdk1.8.0_91(JDK安装的目录)

    Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

    CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;(最前面有一个点.)

    2)JMeter环境变量:

    JMETER_HOME:E:\CI_Env\apache-jmeter-4.0

    PATH:%JMETER_HOME%\bin;

    2. 配置远程主机地址

    配置文件:jmeter.properties

    配置JMeter的bin目录(E:\CI_Env\apache-jmeter-4.0\bin)下的jmeter.properties文件,添加remote_hosts远程地址和端口(Slave机对应的IP,默认端口1099),如下:

    Remote Hosts - comma delimited#remote_hosts=127.0.0.1#remote_hosts=localhost:1099,localhost:2010remote_hosts=192.168.248.138:1099,127.0.0.1:1099

    3. 启动jmeter服务

    双击运行jmeter-server.bat,与Linux服务器(Slave机)保持通信联通

    路径:E:\CI_Env\apache-jmeter-4.0\bin

    image

    4. 启动JMeter GUI工具

    启动程序:jmeter.bat

    路径:E:\CI_Env\apache-jmeter-4.0\bin

    image

    四、执行JMeter分布式测试

    1. 预先准备:录制测试脚本

    ==>[JPT_05]性能测试-脚本开发(登录&随机购买业务)

    2. 对测试脚本进行参数配置,调试脚本

    利用Badboy录制脚本,导入到JMeter的GUI操作界面中进行脚本调试

    变量设置:

    【User Defined Variables】

    设置参数:host=192.168.248.138(本次Linux服务器的IP)

    参数引用:

    ServerName or IP:${hosts}

    Host / IP:${hosts}

    image image image

    PS:-----【Important!】-----

    【1】脚本中定义变量host,目的是为了便于脚本的复用和移植。当服务器IP变更时,只需要在【User Defined Variables】配置元件中将host取值修改,其他关联引用host的位置也会自动获取该值,而不需要每个位置都手动去修改,存在耗费时间且可能修改遗漏的风险。

    【2】连接Linux服务器时,为了确保正常执行测试,每个请求中涉及url地址的Path路径需要大小写严格书写(与Linux服务器中配置的url保持一致)。

    【3】对于JMeter4.0,若要使得其性能监控插件可正常监控展示出图像曲线,在执行测试之前,需要在【Write results to file / Read from file】的Filename选择框中添加某个自定义的jtl文件的绝对路径,如:E:\CI_Env\JM_LogResult\123.jtl(存放jtl文件的目录已提前创建好,初始时jtl文件可不存在,执行测试完成之后即会生成与自定义相同名称的jtl文件)。

    【4】JMeter脚本中若包含有【CSV Data Set Config 】配置元件配置了csv参数化的文件,需要将该参数化的文件分别上传到每一台Slave机的JMeter的bin目录下存放(与jmeter-server服务文件在同一目录),同时Master机也需要存放该参数化文件到JMeter的bin目录下;然后在JMeter的GUI界面中【CSV Data Set Config 】配置Filename为相对路径(如:username.txt),不宜采用绝对路径,否则执行测试可能异常(可查看Linux服务器中的jmeter-server.log日志文件),测试过程中Linux服务器中的测试数据可能不会返回到Windows主控机的JMeter界面中展示。

    具体可参看 ==>JMeterThread:Test failed! java.lang.IllegalArgumentException: File...must exist and be readable_解决方案

    3. 执行JMeter分布式测试

    1)执行方式选择

    【1】Run --> Remote Start --> 192.168.248.138:1099

    【2】Run --> Remote Start --> 127.0.0.1:1099

    【3】Run --> Remote Start All

    【4】Run --> Start

    <1> 调用Slave机(远程Linux服务器)上JMeter的Non-GUI模式执行测试

    <2> 调用Slave机(此处Master机本身也作为Slave机之一)执行测试

    <3> 调用所有配置过的Slave机器执行测试

    <4> 常规的执行测试方式,以当前Master机对Linux服务器执行测试

    image

    2)设置:线程数、循环数、定时场景,启动测试

    本次选定执行方式:Run --> Remote Start All

    配置线程、循环次数(Step1配置)、定时等的设置,开启执行测试,效果如下:

    image image

    PerfMon Metrics Collector:监控服务器资源

    image

    Hits per Second

    image

    相关文章

      网友评论

        本文标题:Jmeter分布式测试

        本文链接:https://www.haomeiwen.com/subject/jesumctx.html