安装主程序php
从Apache JMeter官网下最新版本:jmeter.apache.org/download_jm…
如图:html
下载后直接解压便可。java
安装插件管理linux
从http://www.jmeter-plugins.org/install/Install/ 下载插件管理包,如图:nginx
将下载的包放至jmemter解压根目录的lib/ext下便可。web
先看一下解压后的JMeter安装目录:ajax
目录说明shell
bin 包含启动、配置等相关命令apache
docs 官方本地文档目录windows
extras 辅助库
lib 核心库,包含JMeter用到的各类基础库和插件
licenses 包含non-ASF软件的许可证
printable_docs 可打印版本文档目录
LICENSE JMeter许可说明
NOTICE JMeter简单信息说明
README.md JMeter官方基本介绍
下面咱们重点看下bin目录,如图:
主要介绍bin目录下咱们最关注几个文件:
jmeter.properties JMeter核心配置文件,各类配置基本在这完成
log4j.conf JMeter日志配置管理
jmeter.log JMeter运行日志记录,什么输出信息、警告、报错都在这里进行了记录
jmeter.bat windows下jmeter启动文件
shutdown.cmd windows下jmeter关闭文件
stoptest.cmd windows下jmeter测试中止文件
jmeter-server.bat windows下jmeter服务器模式启动文件
注:每个.cmd文件都对应一个.sh文件,.sh是linux下的对应功能的文件
其余文件的功能就不一一说明了,同时其余目录这里也再也不进行阐述,有兴趣的朋友能够本身深刻看下。
jmeter.properties配置说明
主要包含如下几个方面的配置:
SSL配置:
重点关注下面几个配置# 指定HTTPS协议层https.default.protocol=TLS# 指定SSL版本,实际应用中可能须要修改https.default.protocol=SSLv3# 设置启动的协议https.socket.protocols=SSLv2Hello SSLv3 TLSv1# 缓存控制,控制SSL是否能够在多个迭代中重用https.use.cached.ssl.context=true复制代码
JMeter界面显示配置
这里就不对其界面显示控制进行说明了,通常状况下默认界面能知足你们的应用了。
JMeter测试项目自动备份配置
# 设置是否启用自动备份,默认是truejmeter.gui.action.save.backup_on_save=true# 设置自动备份目录,默认备份至JMeter根目录的backups下jmeter.gui.action.save.backup_directory=# 设置自动备份项目数,默认为最近10个jmeter.gui.action.save.keep_backup_max_count=10复制代码
远程主机配置
# 配置远程主机的IP,默认为本机。用逗号","能够设置多个远程主机remote_hosts=127.0.0.1# 多个远程主机指定示例以下,其中:后为端口remote_hosts=127.0.0.1:1099,127.0.0.1:1200,127.0.0.1:1300对于RMID的配置请直接看配置文件中的选项说明复制代码
日志管理配置
# 设置日志格式log_format_type=default# 设置日志输出级别log_level.jmeter=INFO# 设置junit日志输出级别log_level.jmeter.junit=DEBUG# 设置日志输出目标文件,默认为jmeter.loglog_file=jmeter.log复制代码
等等其余还有10多个配置大项(就不一一列举了)
jmeter.bat关键配置修改
为了更优化的使用jmeter,须要对jmeter.bat中的一些配置根据当前机器的配置进行优化,这里进行关键配置项说明,你们根据本身的机器的配置来进行修改。
jvm相关配置,大概在80行左右,找到这些配置,
对其中的数值根据当前机器的硬件配置来修改。set HEAP=-Xms2048m -Xmx2048mset NEW=-XX:NewSize=512m -XX:MaxNewSize=512mset SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%set TENURING=-XX:MaxTenuringThreshold=2if %current_minor% LEQ "8" ( rem Increase MaxPermSize if you use a lot of Javascript in your Test Plan :
set PERM=-XX:PermSize=512m -XX:MaxPermSize=1024m
)复制代码
在bin目录下直接双击jmeter.bat便可复制代码
启动后的界面以下:
下面咱们用一张简单的流程图来展现HTTP协议基本架构,以便你们先有个基本的了解。
Web Client能够是浏览器、搜索引擎、机器人等等一切基于HTTP协议发起http请求的工具。
Web Server能够是任何的能解析HTTP请求,并返回给Web Client可识别的响应的服务,常见的有apache、nginx、IIS等等web服务器。
浓缩就是精华,看下最简洁的HTTP交互图:
HTTP报文结构
请求报文
HTTP请求报文由请求行、请求头、空行和请求内容4个部分构成。
以下图所示:
下面对上图进行简单的分析:
请求行
由请求方法字段、URL字段、协议版本字段三部分构成,它们之间由空格隔开。经常使用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
请求头
请求头由key/value对组成,每行为一对,key和value之间经过冒号(:)分割。请求头的做用主要用于通知服务端有关于客户端的请求信息。
典型的请求头有:
User-Agent:生成请求的浏览器类型
Accept:客户端可识别的响应内容类型列表;星号*
用于按范围将类型分组。*/*
表示可接受所有类型,type/*
表示可接受type类型的全部子类型。
Accept-Language: 客户端可接受的天然语言
Accept-Encoding: 客户端可接受的编码压缩格式
Accept-Charset: 可接受的字符集
Host: 请求的主机名,容许多个域名绑定同一IP地址
connection:链接方式(close或keeplive)
Cookie: 存储在客户端的扩展字段
空行
最后一个请求头以后就是空行,用于告诉服务端如下内容再也不是请求头的内容了。
请求内容
请求内容主要用于POST请求,与POST请求方法配套的请求头通常有Content-Type(标识请求内容的类型)和Content-Length(标识请求内容的长度)
响应报文
HTTP响应报文由状态行、响应头、空行和响应内容4个部分构成。
以下图所示:
下面对响应报文格式进行简要的分析说明:
状态行
由HTTP协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。
状态码由3位数字组成,第一位标识响应的类型,经常使用的5大类状态码以下:
1xx:表示服务器已接收了客户端的请求,客户端能够继续发送请求
2xx:表示服务器已成功接收到请求并进行处理
3xx:表示服务器要求客户端重定向
4xx:表示客户端的请求有非法内容
5xx:标识服务器未能正常处理客户端的请求而出现意外错误
常见状态码说明:
200 OK: 表示客户端请求成功
400 Bad Request: 表示客户端请求有语法错误,不能被服务器端解析
401 Unauthonzed: 表示请求未经受权,该状态码必须与WWW-Authenticate报文头一块儿使用
404 Not Found:请求的资源不存在,例如输入了错误的url
500 Internal Server Error: 表示服务器发生了不可预期的错误,致使没法完成客户端的请求
503 Service Unavailable:表示服务器当前不能处理客户端的请求,在一段时间后服务器可能恢复正常
响应头
通常状况下,响应头会包含如下,甚至更多的信息。
Location:服务器返回给客户端,用于重定向到新的位置
Server: 包含服务器用来处理请求的软件信息及版本信息
Vary:标识不可缓存的请求头列表
Connection: 链接方式。
对于请求端来说:close是告诉服务端,断开链接,不用等待后续的求请了。keeplive则是告诉服务端,在完成本次请求的响应后,保持链接,等待本次链接后的后续请求。
对于响应端来说:close表示链接已经关闭。keeplive则表示链接保持中,能够继续处理后续请求。Keep-Alive表示若是请求端保持链接,则该请求头部信息代表指望服务端保持链接多长时间(秒),例如300秒,应该这样写Keep-Alive: 300
空行
最后一个响应头以后就是空行,用于告诉请求端如下内容再也不是响应头的内容了。
响应内容
服务端返回给请求端的文本信息。
在这里咱们在Firefox下用firebug随意抓取一个HTTP包和上文的报文结构作下一一对应关系图,以便你们了解实际的包和标准报文结构的对应关系。
在jmeter中提供了一系列的不一样的组件,每一种组件都提供了某类功能的实现,用于支持性能测试的实施。
请看下图,jmeter的核心组件构成。
学习、研究jmeter以前,深刻了解jmeter的基本组件及其做用是必须的。接下来咱们开始讨论基于jmetere进行性能测试必须掌握的组件,以便你们逐步掌握jemter的核心基本能力。
下面的几个组件是入门jmeter必须掌握的:
Thread Group
Samplers
Listeners
Configuration
线程组是一系列线程的集合,每个线程表明着一个正在使用应用程序的用户。在jmeter中,每一个线程意味着模拟一个真实用户向服务器发起请求。
在jmeter中,线程组组件运行用户设置线程数量、初始化方式等等配置。
例如,若是你设置线程数为100,那么jmeter将建立并模拟测试100个用户请求到服务器端。
以下图所示:
咱们经常使用的jmeter测试有HTTP、FTP、JDBC协议,以及其余各类支持的协议。
在上节咱们已经知道线程组件用于模拟用户请求至服务器端。
但还未讲解如何在线程组件中实现某种请求类型(好比如何发起HTTP请求?)。
在本节中,咱们将演示如何利用Samplers组件的元素来实现各种请求类型。
咱们先看一下在jmeter中Samplers组件已经实现了哪些协议的支持。以下图所示:
下面咱们就重要的Samplers组件元素进行一一讲解,以便你们有个初步的了解。
BeanShell Sampler
这个组件元素容许咱们在jmeter中写Bean Shell脚本,写这个脚本有什么做用?意味着你能够彻底的控制和实现本身的须要。灵活定制,天然也就有难度,你得有点脚本功底。
参见图说明:
注:每个Sampler都有本身独立的beanshell解析器,而且sampler只能在本身的线程中调用(意味着不可跨线程使用)。
FTP Request
FTP Request元素提供了测试ftp服务器的能力,这个元素让咱们可以去测试ftp的上传、下载功能。
下面咱们看一下ftp元素的基本配置说明:
注:咱们常常在windows和linux直接经过ftp进行文件传输,建议勾选Use Binary Mode,避免编码问题。
HTTP Request
HTTP Request提供了HTTP/HTTPS协议的测试支持能力。
下面咱们一块儿看看HTTP Request元素的基本配置说明,了解下基本的功能。
Java Request
Java Request提供了测试java API的支持,但要注意要测试的java API须要有对应的测试类,该测试类必须继承AbstractJavaSamplerClient。 示例以下:
待测类class Sum; -> 生成sum.jar
继承至AbstractJavaSamplerClient的测试类Class TestSum(AbstractJavaSamplerClient) -> 生成testSum.jar
注:
一个java测试应该要实现如下几个方法,以便jmeter java sampler能够正确调用:
方法 | 说明 |
---|---|
Arguments getDefaultParameters() | 用于获取jmeter java sampler传入的测试数据 |
SampleResult runTest(JavaSamplerContext arg0) | 测试事务处理 |
void setupTest(JavaSamplerContext arg0) | 初始化 |
void teardownTest(JavaSamplerContext arg0) | 清理 |
更详细的后续出专题讲解,本篇不举具体示例了。
注意testSum.jar要能调用sum.jar。
将上述sum.jar、testSum.jar拷贝至jmeter安装目录的lib/ext下。
下面咱们看看如何在jmeter配置java测试。
对于JDBC Request、JMS Point-to-Point、JSR22三、SMTP、JUnit Request等Sampler组件元素就不一一说明了在后续的分享中,主要基于HTTP和java请求来分享实战。
在jmeter中Listeners提供了执行结果生成和显示能力的支持,提供了树形结构、表、图形和日志方式。
下面咱们先看下几种结果显示示例图。
图形模式:
树模式:
表模式:
日志方式
配置元件包含了Samplers下各类Sampler的默认配置设置,若是有配置默认配置,在Sampler下对应的sampler就会使用该默认配置。
下面咱们看看咱们主要用到的默认配置有哪些。
下面进行逐一的说明。
CSV Data Set Config CSV Data Set Config主要用于读取csv格式的文件中数据,实现参数化。
HTTP Cookie Manager HTTP Cookie Manager主要用于默认cookie管理。
HTTP Request Defaults HTTP Request Defaults用于配置HTTP request的默认值,例如IP、端口等等都设置好默认值后,在后续HTTP request元素里就不须要重复设置,节省时间。
性能测试是咱们平常测试过程当中,必须掌握的技能。经过进行性能测试,咱们能分析服务端的总体性能、负载等,以便进一步评估咱们的业务系统是否能知足当前运营生产及将来业务增加状况下如何进一步调整咱们的服务配置方案。
jmeter为性能测试提供了一下特点:
jmeter能够对测试静态资源(例如js、html等)以及动态资源(例如php、jsp、ajax等等)进行性能测试
jmeter能够挖掘出系统最大能处理的并发用户数
jmeter提供了一系列各类形式的性能分析报告
使用jmeter通常用于如下两种类型的性能测试
负载测试:经过测试系统在资源超负荷状况下的表现,以发现设计上的错误或验证系统的负载能力。
压力测试:测试系统能承受的最大负载能力。目的在于发挖掘出目标服务系统能够处理的最大负载。
下面咱们看下使用jmeter进行性能测试的基本过程。
对上图进行简要的说明
新增线程组
建立测试线程组,并设置线程数量及线程初始化启动方式。
新增JMeter元组
建立各类默认元组及测试元组,填入目标测试静态资源请求和动态资源请求参数及数据。
新增监听器
建立各类形式的结果搜集元组,以便在运行过程及运行结束后搜集监控指标数据。
运行&查看结果 调试运行,分析指标数据,挖掘性能瓶颈、评估系统性能状态、
下面咱们以打开百度演示上述过程。
新增线程组
在jmeter的bin目录下双击jmeter.bat启动jmeter
在左边操做栏中选择“测试计划”,右击新增一个线程组,如图所示:
初始化线程组相关信息,如图:
新增JMeter元组
添加默认配置元素,添加以下默认配置,如
各默认组件配置如图所示。
HTTP Cache Manager
HTTP Cookie管理器
HTTP请求默认值
添加HTTP Request元组 在线程组上右击新增HTTP请求,如图:
HTTP请求设置如图:
新增监听器
在这里咱们添加以下监听器,如图所示
运行&查看结果
若是启动运行jmeter,能够单击添加的监听器查看运行过程当中的监控指标数据,也能够等运行结束后,再查看。
如图:
下面咱们就监听器所采集的结果图进行简要的说明:
图形结果
察看结果树
用表格查看结果
聚合报告