课程介绍
JMeter是Apache软件基金会的产品,用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java 对象,数据库和查询,FTP服务器等等)的性能进行测试.是一款很方便的测试软件。
此课程将详细介绍:Windows操作系统环境安装JMeter、运行JMeter、配置JMeter
课程系统环境:
- 操作系统:Windows10
- JDK:1.8
- JMeter:5
确定JDK安装成功
JMeter 是基于 Java 的框架,所以第一个要求是JDK安装在机器上,且JDK版本不低于1.6。(JDK安装请参考平台课程“JDK (Windows)安装及配置”)
在系统cmd命令提示符下输入java -version,验证JDK是否安装成功和版本号: 上图表示JDK已安装,版本1.8
下载安装JMeter
JMeter下载地址: http://jmeter.apache.org/download_jmeter.cgi(当前最新5.1)
- windows环境下安装,选择zip格式的文件下载
-
把下载的zip文件解压后就可以使用
-
目录介绍 下面是解压后的文件目录介绍:
bin:可执行文件目录
常用文件:
examples:打开里面是一个csv样例(jmeter需要读取本地文件可参考)
jmeter.bat:windows的启动文件(重要)
jmeter.log:jmeter运行的日志文件
jmeter.properties:系统配置文件
jmeter-server.bat:windows分布式测试要用到的服务器
docs:文档目录
docs 目录下主要包括:api文件以及css和图像样式
extras:目录下的文件提供了对构建工具Ant的支持,可以使用Ant来实现测试自动化。
例如批量脚本执行,产生HTML格式的报表,测试运行时,可以把测试数据记录下来,Jmeter会自动生成一个.jtl文件,将该文件放到extras目录下,运行“ant -Dtest=文件名 report”,就可以生成测试统计报表。
lib:该目录包含两个子目录,其中ext子目录存放有JMeter的核心jar包,另一个junit子目录存放JUnit测试脚本。
用户扩展所依赖的包(如JDBC、JMS实现包)应该直接放到lib目录下。而JMeter插件包应该放在lib/ext下。
licenses:JMeter证书目录
printable_docs:用户使用手册
运行JMeter
运行JMeter 有两种模式:gui(图形界面)模式、non-gui(命令行)模式 JMeter 初学者可以在GUI模式下学习创建、调试、运行测试计划。待熟练使用工具建议使用non-gui模式运行测试计划(后期可参考<JMeter no-gui模式运行>课程学习)
GUI模式
-
JMeter 的bin目录下,双击jmeter.bat,很短的等待之后,首先出现一个cmd窗口,Jmeter使用期间不能关闭
-
接着会出现JMeter的图形用户界面,这就表示启动JMeter成功。
可能有些同学看到的界面是黑色的,则不重要,图形界面风格是可以更改的。
-
JMeter默认使用英文,我们可以修改语言为:中文简体
- 如果你不喜欢这黑黢黢的界面,我们可以修改风格,你现在所看到的图片都是“windows” 风格
配置JMeter
JMeter 设置有关,建议初学者可以先简单了解或暂且跳过,待需要设置时再来学习。
JMeter的Classpath
JMeter会通过以下目录中的jar文件加载类
- JMETER_HOME/lib:公用包
- JMETER_HOME/lib/ext: 包含JMeter元件和补丁
如果测试人员开发新的JMeter元件,就需要将对应的jar包放在JMeter的lib/ext目录下,JMeter会自动加载这些jar包中的JMeter元件。不要在lib/ext目录下放置公用包。
使用代理服务器
如果测试对象隐藏在防火墙/代理服务器之后,可以通过命令行来运行jmeter文件,并携带如下参数,以达到提供主机名和端口号的目的。
- -H [代理服务器主机名或者IP地址]
- -P [代理服务器端口]
- -N [不是用代理的主机] (例如*.apache.org|localhost)
- -u [代理验证的用户名-如果要求]
- -a [代理验证的密码-如果要求]
命令运行
jmeter -H my.proxy.server -P 8000 -u name -a password -N localhost
#JMeter有内置的HTTP代理服务器是用来于录制http或https的浏览器操作,与上面描述完全不同请不要混淆
命令行重置JMeter属性
Java系统属性、JMeter属性、日志属性都可以通过命令行来修改属性值(临时生效),JMeter命令的选项如下:
- -D [prop_name]=[value]: 定义一个Java系统属性值
- -J [prop_name]=[value]: 定义一个本地JMeter属性
- -G [prop_name]=[value]: 定义一个JMeter属性,并发往所有远程服务器
- -G [propertyfile]: 定义一个文件,其中包含JMeter属性,并将文件发往所有远程服务器
- -L [category]=[priority]: 重置日志设置,对特定类型的日志设定优先级
示例:
- 在cmd窗口运行以下命令:
jmeter -D user.dir=E:\apache-jmeter-3.1\bin
jmeter -J remote_hosts=192.168.3.19
- 以GUI模式启动JMeter,可在工作台-添加Property Display元件,查看系统和JMeter的属性是否设置成功
通命令行重置的属性只对当前打开的JMeter窗口有效,退出后设置失效,这种方式是不会修改jmeter.properties文件的内容。
永久修改JMeter属性
如果想要永久性的改变与JMeter运行相关的属性,可以修改bin目录下的jmeter.properties 。介绍几个jmeter.properties文件中常用的属性:
配置错误日志
JMeter 不会在发生运行错误时弹出对话框,Jmeter运行出现问题可以通过调整jmeter的日志级别定位问题,但在正式进行压力测试时记得关闭 jmeter 日志,因为jmeter 打印日志耗费系统性能。
JMeter 使用的日志文件名称被定义在 jmeter.properties 文件中。Jmeter 日志默认存放在 %JMeter_HOME%\bin目录,文件名通常是 JMeter.log,日志记录与 JMeter 本身运行有关的日志信息。 当然我们也可以使用-j 选项自定义测试计划的日志文件。
jmeter.log 内容如下:
2017/07/05 15:45:30 INFO - jmeter.util.JMeterUtils: Setting Locale to zh_CN
2017/07/05 15:45:30 INFO - jmeter.JMeter: Loading user properties from: E:\apache-jmeter-3.1\bin\user.properties
2017/07/05 15:45:30 INFO - jmeter.JMeter: Loading system properties from: E:\apache-jmeter-3.1\bin\system.properties
2017/07/05 15:45:31 INFO - jmeter.JMeter: Copyright (c) 1998-2016 The Apache Software Foundation
2017/07/05 15:45:31 INFO - jmeter.JMeter: Version 3.1 r1770033
2017/07/05 15:45:31 INFO - jmeter.JMeter: java.version=1.7.0_17
2017/07/05 15:45:31 INFO - jmeter.JMeter: java.vm.name=Java HotSpot(TM) 64-Bit Server VM
2017/07/05 15:45:31 INFO - jmeter.JMeter: os.name=Windows 8
2017/07/05 15:45:31 INFO - jmeter.JMeter: os.arch=amd64
2017/07/05 15:45:31 INFO - jmeter.JMeter: os.version=6.2
2017/07/05 15:45:31 INFO - jmeter.JMeter: file.encoding=GBK
2017/07/05 15:45:31 INFO - jmeter.JMeter: Max memory =523501568
2017/07/05 15:45:31 INFO - jmeter.JMeter: Available Processors =4
2017/07/05 15:45:31 INFO - jmeter.JMeter: Default Locale=中文 (中国)
2017/07/05 15:45:31 INFO - jmeter.JMeter: JMeter Locale=中文 (中国)
2017/07/05 15:45:31 INFO - jmeter.JMeter: JMeterHome=E:\apache-jmeter-3.1
2017/07/05 15:45:31 INFO - jmeter.JMeter: user.dir =E:\apache-jmeter-3.1\bin
2017/07/05 15:45:31 INFO - jmeter.JMeter: PWD =E:\apache-jmeter-3.1\bin
2017/07/05 15:45:40 INFO - jmeter.JMeter: IP: 192.168.16.1 Name: innovaee FullName: innovaee
2017/07/05 15:45:41 INFO - jmeter.gui.action.LookAndFeelCommand: Using look and feel: javax.swing.plaf.metal.MetalLookAndFeel [Metal, CrossPlatform]
2017/07/05 15:45:41 INFO - jmeter.JMeter: Loaded icon properties from org/apache/jmeter/images/icon.properties
2017/07/05 15:45:44 INFO - jmeter.engine.util.CompoundVariable: Note: Function class names must contain the string: '.functions.'
2017/07/05 15:45:44 INFO - jmeter.engine.util.CompoundVariable: Note: Function class names must not contain the string: '.gui.'
2017/07/05 15:45:47 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.assertions.BSFAssertion
2017/07/05 15:45:49 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.extractor.BSFPostProcessor
2017/07/05 15:45:49 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.modifiers.BSFPreProcessor
2017/07/05 15:45:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/html is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2017/07/05 15:45:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xhtml+xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2017/07/05 15:45:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for application/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2017/07/05 15:45:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2017/07/05 15:45:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
2017/07/05 15:45:49 INFO - jmeter.protocol.http.sampler.HTTPSamplerBase: Parser for text/css is org.apache.jmeter.protocol.http.parser.CssParser
2017/07/05 15:45:51 INFO - jorphan.exec.KeyToolUtils: keytool found at 'keytool'
2017/07/05 15:45:51 INFO - jmeter.protocol.http.proxy.ProxyControl: HTTP(S) Test Script Recorder SSL Proxy will use keys that support embedded 3rd party resources in file E:\apache-jmeter-3.1\bin\proxyserver.jks
2017/07/05 15:45:51 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.java.sampler.BSFSampler
2017/07/05 15:45:51 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.mongodb.config.MongoSourceElement
2017/07/05 15:45:51 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.protocol.mongodb.sampler.MongoScriptSampler
2017/07/05 15:45:52 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.timers.BSFTimer
2017/07/05 15:45:52 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.visualizers.BSFListener
2017/07/05 15:45:52 INFO - jmeter.gui.util.MenuFactory: Skipping org.apache.jmeter.visualizers.MonitorHealthVisualizer
2017/07/05 15:45:53 INFO - jmeter.samplers.SampleResult: Note: Sample TimeStamps are START times
2017/07/05 15:45:53 INFO - jmeter.samplers.SampleResult: sampleresult.default.encoding is set to ISO-8859-1
2017/07/05 15:45:53 INFO - jmeter.samplers.SampleResult: sampleresult.useNanoTime=true
2017/07/05 15:45:53 INFO - jmeter.samplers.SampleResult: sampleresult.nanoThreadSleep=5000
2017/07/05 15:46:46 INFO - jmeter.services.FileServer: Default base='E:\apache-jmeter-3.1\bin'
2017/07/05 15:46:46 INFO - jmeter.gui.action.Load: Loading file: E:\apache-jmeter-3.1\bin\仅一次控制器.jmx
2017/07/05 15:46:46 INFO - jmeter.services.FileServer: Set new base='E:\apache-jmeter-3.1\bin'
2017/07/05 15:46:47 INFO - jmeter.save.SaveService: Testplan (JMX) version: 2.2. Testlog (JTL) version: 2.2
2017/07/05 15:46:47 INFO - jmeter.save.SaveService: Using SaveService properties file encoding UTF-8
2017/07/05 15:46:47 INFO - jmeter.save.SaveService: Using SaveService properties version 3.1
2017/07/05 15:46:47 INFO - jmeter.save.SaveService: All converter versions present and correct
2017/07/05 15:46:47 INFO - jmeter.save.SaveService: Loading file: E:\apache-jmeter-3.1\bin\仅一次控制器.jmx
2017/07/05 15:46:47 INFO - jmeter.services.FileServer: Set new base='E:\apache-jmeter-3.1\bin'
设置日志级别和输出
Jmeter使用Log4j日志组件输出日志,%JMETER_HOME%\bin\jmeter.properties 中的 ”log_level.jmeter“ 用于控制Jmeter日志记录级别。 log_level.jmeter 可以设置以下日志级别:FATAL_ERROR, ERROR, WARN, INFO,DEBUG,其中FATAL_ERROR打印日志最少,DEBUG级别日志最详细。
例如:log_level.jmeter=INFO
INFO是日志级别,只有等于及高于这个级别的才打印日志,如果配置为INFO只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示。
下面是jmeter.properties文件中 JMeter 为不同模块设置不同的日志级别:
log_level.jmeter=INFO
log_level.jmeter.junit=DEBUG
#log_level.jmeter.control=DEBUG
#log_level.jmeter.testbeans=DEBUG
#log_level.jmeter.engine=DEBUG
#log_level.jmeter.threads=DEBUG
#log_level.jmeter.gui=WARN
#log_level.jmeter.testelement=DEBUG
#log_level.jmeter.util=WARN
#log_level.jmeter.util.classfinder=WARN
#log_level.jmeter.test=DEBUG
#log_level.jmeter.protocol.http=DEBUG
# For CookieManager, AuthManager etc:
#log_level.jmeter.protocol.http.control=DEBUG
#log_level.jmeter.protocol.ftp=WARN
#log_level.jmeter.protocol.jdbc=DEBUG
#log_level.jmeter.protocol.Java=WARN
#log_level.jmeter.testelements.property=DEBUG
log_level.jorphan=INFO