Apache JMeter是一个纯Java开发的用于负载测试或者性能测试的开源软件,最初被设计是用来进行Web应用程序的测试,而现在已经扩展到Web应用之外的领域。
概要信息
Apache JMeter概要信息如下表所示:
项目 | 说明 |
---|---|
官网 | https://jmeter.apache.org/ |
开源/闭源 | 开源 |
源码管理地址 | https://github.com/apache/jmeter |
License类别 | Apache License 2.0 |
开发语言 | Java |
当前稳定版本 | 5.1.1(2019/5/4) |
操作系统支持 | 跨平台,支持Linux/Windows/Mac等 |
下载地址:github release | https://github.com/apache/jmeter/releases |
下载地址:官网下载 | https://jmeter.apache.org/download_jmeter.cgi |
功能特性
Apache JMeter可以用来测试静态或者动态资源与Web动态应用的性能。主要的应用场景之一在于模拟负载的情况,这些负载的对象可以是一台或者多台机器、网络等,通过Apache JMeter的负载模拟,可以了解测试对象在不同方面的综合性能。Apache JMeter的主要特性包括:
- 对不同类型的应用、服务器、协议提供负载和性能的测试能力,包括:
- HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET等)
- SOAP/REST Webservice
- FTP
- 经由JDBC的数据库
- LDAP
- 经由JMS对基于消息的中间件MOM(Message-oriented middleware):SMTP(S)、 POP3(S)和 IMAP(S)
- 本地命令或Shell脚本
- TCP
- Java对象
- 支持使用浏览器或者本地应用提供快速录制、编译或者调试的多项测试IDE的功能。
- 命令行CLI模式:之前被称为非GUI(Non GUI)模式/无头(headless)模式,可以应用于Java兼容的任何操作系统包括Linux、Windows macOS等。
- 提供完整可用的HTML结果报告
- 可以从多种常用的格式提取数据,包括:HTML、JSON、 XML 或者文本格式。
- 100%纯Java开发、具有完全的可移植性
- 具有缓存能力,可以进行测试结果的离线分析和再执行
- 具有多线程框架能力,支持多个线程并行相同内容采样,也支持不同的线程组进行不同内容的取样。
- 高度可扩展的内核特性:
- 支持各种测试能力的可插拔的采样器
- 可编程的采样器(兼容JSR22-3的语言,诸如Groovy或者BeanShell)
- 使用可插拔的计时器可以选择多个负载统计信息。
- 通过数据分析和可视化提供极大的扩展性和个性化
- 为测试提供动态数据输入或者数据操作的功能
- 非常容易和第三方开源软件(诸如Maven、Gradle和Jenkins等)进行持续集成。
环境准备
Java版本限制
作为一个100%纯Java的应用,Apache JMeter天然具有Java的跨平台特性,可以支持多种操作系统,但是对于Java的版本,相关的支持状况从如下链接中可以获取详细信息:https://cwiki.apache.org/confluence/display/jmeter/JMeterAndOperatingSystemsTested
主要版本限制以及注意事项:
- JMeter 4所需要的Java版本为:Java 8或者Java 9
- 如果有JMeter插件开发需求的情况下,需要安装Java8或以上,另外需要全安装
- 因为JMeter一些功能是建立在keytool基础上的,所以在一些新的版本中使用HTTPS的情况下最好还是使用JDK而不是JRE。
安装步骤
本文以目前的5.1.1为例进行介绍相关的安装步骤。
步骤1: 下载Apache JMeter二进制文件
下载命令: wget http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.tgz
步骤2: 解压
解压命令:tar xvpf apache-jmeter-5.1.1.tgz
步骤3: 安装与设定JDK环境
确保JDK的安装与JAVA_HOME的正确设定,此处不在展开,Apache JMeter 5.1.1所需要的版本为JDK 8+。以下为安装示例环境的JDK设定:
liumiaocn:apache-jmeter-5.1.1 liumiao$ env |grep JAVA_HOME
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
liumiaocn:apache-jmeter-5.1.1 liumiao$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
liumiaocn:apache-jmeter-5.1.1 liumiao$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 版本确认
liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -v
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 5.1.1 r1855137
Copyright (c) 1999-2019 The Apache Software Foundation
liumiaocn:apache-jmeter-5.1.1 liumiao$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
使用JMeter
起停脚本
比如以5.1.1为例,解压之后得到了一个名为的apache-jmeter-5.1.1目录,apache-jmeter-5.1.1目录下的bin目录保存着JMeter启动停止等常用的脚本,示例如下所示:
liumiaocn:jmeter liumiao$ ls
apache-jmeter-5.1.1 apache-jmeter-5.1.1.tgz
liumiaocn:jmeter liumiao$
liumiaocn:jmeter liumiao$ ls apache-jmeter-5.1.1/bin
ApacheJMeter.jar hc.parameters jmeter-server.bat mirror-server stoptest.cmd
BeanShellAssertion.bshrc heapdump.cmd jmeter-t.cmd mirror-server.cmd stoptest.sh
BeanShellFunction.bshrc heapdump.sh jmeter.bat mirror-server.sh system.properties
BeanShellListeners.bshrc jaas.conf jmeter.properties report-template templates
BeanShellSampler.bshrc jmeter jmeter.sh reportgenerator.properties threaddump.sh
create-rmi-keystore.bat jmeter-n-r.cmd jmeterw.cmd saveservice.properties upgrade.properties
create-rmi-keystore.sh jmeter-n.cmd krb5.conf shutdown.cmd user.properties
examples jmeter-server log4j2.xml shutdown.sh
liumiaocn:jmeter liumiao$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
GUI模式
Apache JMeter具有两种模式:GUI模式和CLI模式。GUI模式将会以图形方式启动JMeter,而CLI则是以命令行方式启动JMeter。
模式 | 启动参数 | 启动命令 | 说明 |
---|---|---|---|
GUI模式 | 缺省方式 | ./jmeter | 缺省方式会启动Apache JMeter的图形化界面 |
CLI模式 | -n | ./jmeter -n | 命令行方式使用JMeter |
启动示例如下所示:
liumiaocn:jmeter liumiao$ ./apache-jmeter-5.1.1/bin/jmeter -j /tmp/jmeter_log.log
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
总结
这篇文章介绍了JMeter的概要内容以及环境搭建的方法,在接下来的内容中将继续展开性能测试和压力测试中常用的术语以及结合具体的实例介绍JMeter的使用方法。