JMeter入门

JMeter基本概念

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

为什么要使用JMeter

  • 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
  • 支持接口测试,压力测试等多种功能,支持录制回放,入门简单
  • 相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试
  • 多平台支持,可在Linux,Windows,Mac上运行

JMeter安装配置

Windows

  1. 点击下载链接,根据自己将要使用的平台,下载相应的文件。
  2. 安装JDK,配置环境变量
    • JAVA_HOME【C:\Program Files\Java\jdk1.8.0_73】
    • classpath【.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar】
    • Path【;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;】
  3. 解压下载的JMeter压缩包,打开/bin/jmeter.bat

配置环境变量
JMETER_HOME【E:\1-必备工具\35-JMeter\apache-jmeter-4.0】
Path【;%JMETER_HOME%\bin】

其它平台安装

与windowns一致,除打开入口不同,如Linux下/bin/jmeter.sh

JMeter目录结构

  1. bin目录常用文件介绍
    • examples:目录下包含Jmeter使用实例
    • ApacheJMeter.jar:JMeter源码包
    • jmeter.bat:windows下启动文件
    • jmeter.sh:Linux下启动文件
    • jmeter.log:Jmeter运行日志文件
    • jmeter.properties:Jmeter配置文件
    • jmeter-server.bat:windows下启动负载生成器服务文件
    • jmeter-server:Linux下启动负载生成器文件
  2. /docs目录——Jmeter帮助文档
  3. /extras目录——提供了对Ant的支持文件,可也用于持续集成
  4. /lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
  5. /licenses目录——软件许可文件,不用管
  6. /printable_docs目录——Jmeter用户手册

JMeter插件安装

JMeter插件安装很简单,只需要下载相应的插件解压即可。

  1. 点击下载
  2. 下载后解压放入:apache-jmeter-2.12\lib\ext\目录下
  3. 重启jmeter

数据库链接驱动如果需要需要专门下载,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850
使用注意事项:添加第三方插件并使用后保存的jmx文件在未添加该插件的运行环境下会导致无法打开该文件并报错,请保持环境一致性。

JMeter命令行模式

  1. 命令
    jmeter -n -t <testplan filename> -l <listener filename>
  2. 参数
    -h 帮助 -> 打印出有用的信息并退出
    -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
    -t 测试文件 -> 要运行的 JMeter 测试脚本文件
    -l jtl文件 -> 记录结果的文件
    -r 远程执行 -> 启动远程服务
    -H 代理主机 -> 设置 JMeter 使用的代理主机
    -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
    -j 日志文件->设置JMeter日志文件的名称

JMeter分布式测试(windows下)

作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter 也可以像 LoadRunner 一样通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数。

  1. 在所有期望将JMeter作为Load Generator(负载生成器)的机器上安装JMeter,并确定其中一台作为Controller,其他的机器作为Agent。然后运行所有Agent机器上的JMeter-server.bat文件(假定使用192.168.0.11和192.168.0.12作为Agent,Agent机器上必须安装JDK,并设置环境变量)
  2. 在Controller机器的%JMETER_HOME%\bin下,找到JMeter.properties文件,编辑该文件,查找“remote_hosts=”这个字符串,可以找到这样一行“remote_hosts=127.0.0.1”。其中的127.0.0.1表示运行JMeter Agent的机器,这里需要修改成为“remote_hosts=192.168.0.11:1099,192.168.0.12:1099”(其中1099为端口号)。一般资料显示1644为JMeter的Controller和Agent之间进行通讯的RMI端口号,但是在测试时发现设置的1644运行不成功,改成1099后运行通过。
  3. 双击启动Controller机器上的jmeter.bat,选择菜单Rum->Remote Start,将会看到有两台Agent。
    常见问题:
  4. 确定在controller机器上安装jdk,版本和jmeter一致,配置环境变量:Java_home等

在Agent机器上安装jdk,配置环境变量:Java_home和JMeter_home

  1. 在Controller端上控制某台机器Run,提示"Bad call to remote host"。

解决方法:检查被控制机器上的jmeter-server有没有启动,或者JMeter.properties中remote_hosts的端口配置错误。

  1. Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"

解决方法:确定在Agent机器安装jdk,并设置环境变量:java_home、path、classpath和jmeter_home

  1. 查看1099端口是否被占用

netstat -ano | findstr "1099"
tasklist | findstr "1099"

  1. 启动远程时,报错:

    只要将本机的jmter-server.bat执行即可。要是在jmeter.properties配置的地方写了127.0.0.1 的话就要开本机的 jmeter-sever.bat.。不写的话就不用开了。

JMeter使用

  1. 切换中文

    • 【Options】--> 【Choose Language】--> 【Chinese】
    • Jmeter_home/bin/jmeter.properties,设置language=zh_CN
  2. 正则表达式

    引用名称:代表下一个请求要引用的参数名称,如填写“openid”,那么则可用“\({openid}”引用它。 正则表达式: `()`:括起来的部分就是要取的 `. `:匹配任何字符 `+`:一次或多次 `?`:在找到第一个匹配项后停止 模板:用\)$引起来,\(2\)表示取第2个值给openid
    匹配:匹配多个值时,0代表随机取值,1代表取第一个
    缺省值:如果参数没有取到值,那就默认给它一个值

  3. 图形结果

    样本数目:总共发送到服务器的请求数。
    最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
    吞吐量:服务器每分钟处理的请求数。
    平均值:是总运行时间除以发送到服务器的请求数,即每个请求的平均响应时间。
    中间值:是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
    偏离:表示服务器响应时间变化、离散程度测量值的大小,即数据的分布。

  4. 聚合报表

    90%line:90%的响应时间都比这个时间小
    Min:代表时间的数字,是服务器响应的最短时间。
    Max:代表时间的数字,是服务器响应的最长时间。
    Error%:请求的错误百分比。
    KB/sec:是每秒钟请求的字节数。

  5. 操作mysql数据库
    操作数据库基本有四个步骤:

    1. 导入mysql的jdbc的jar包,存放到\apache-jmeter-4.0\lib下;
    2. 创建数据库的连接配置,线程组里添加配置元件-JDBC Connection Configuration;
    3. 线程组里添加jdbc request,写sql语句;
    4. 添加察看结果树,点击启动按钮,就能看到执行的SQL。

      特别说明:jmeter还可以操作oracle、postgreSQL、msSQL、mongodb等等数据库,同时不同的数据库,JDBC Connection Configuration填写的Database url格式和JDBC Driver驱动名称也不相同。jmeter数据库驱动列表如下表所示:

      JDBC Driver class是固定的,Jmeter操作各类数据的Driver参考下图;
  6. jmeter3.2以后没有SOAP/XML-Request

  7. Jmeter的参数化方法

    • 利用函数助手获取参数值
      选项->函数助手对话框
      __CSVRead 生成的函数字符串: ${__CSVRead(,)}第一个参数是文件名(包含路径),第二个参数是文件中的列(列数从0开始);


      __Random 生成的函数字符串:${__Random(,,)}第一个参数为随机数的下限,第二个参数为随机数的上限,第三个参数为储存随机数的变量名;

    • 利用配置元件(CSV Data Set Config)
      选中线程组,右击,添加->配置元件->CSV Data Set Config

      选中线程组,右击,添加->sampler->HTTP 请求,在http请求参数中引用变量
    • 用户自定义变量
      选中纯种组,右击,添加->配置元件->用户自定义变量
  8. HTTP Cookie Manager
    用于需要登录cookie的接口中

JMeter使用注意事项

  1. 变量问题
    使用过程中,一定要注意控件的执行顺序以及变量的作用域。
  2. 路径问题
    Windows下支持"/"""并存模式,推荐使用"/",方便跨平台使用。
    在linux格式下支持"/"格式。
  3. Jmeter自身性能问题
    命令行模式:命令相同。
    UI模式:操作方式相同,但会存在windows下能打开linux下打不开的情况,暂不知道原因。
posted @ 2019-11-08 16:40  yo_哥  阅读(175)  评论(0编辑  收藏  举报