1、什么是JMeter
以下是源于百度百科的解释:
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。
它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等,还可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。
另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
2、Jmeter安装
2.1、前提:已安装JDK(版本要匹配),并已设置环境变量
JMETER_HOME:路径
%JMETER_HOME%\lib\ ----通用
%JMETER_HOME%\lib\ext ---仅适用于Jmeter的组件和插件,如果不想把Jmeter的插件库放到ext下面,那么需要在 jmeter.properties 中维护 search_paths
2.2、启动
进入Jmeter解压目录的bin子目录
1)windows环境:双击 jmeter.bat 文件
2)Linux环境:双击jmeter.sh 文件 (.sh是linux下的对应功能的文件)
3)Mac OS:进入Jmeter的bin目录,运行 sh jmeter
PS:查找Jmeter的绝对路径---find / -name Jmeter文件名
3、Jmeter目录结构
- bin:可执行文件,包含启动、配置等相关命令
jmeter.log:记录了jmeter在运行时的日志信息(输出、警告、报错等)
jmeter.properties:核心配置文件,可以修改默认属性,比如,属性log_level.JMeter可以设置改变日志详细度,默认是info,可改为debug或者其它 - extras:辅助库
- lib:核心库,包含JMeter用到的各种基础库和插件
- licenses:包含non-ASF软件的许可证
- printable_docs :可打印版本文档目录
其中子目录 usemanual 下是jmeter用户手册,其中component_reference.html是最常用的核心元件帮助手册,也可以直接查看官方文档完整版 - README.md:Jmeter官方基本介绍
4、常用组件
学习Jmeter之前,先了解下Jmeter的基本组件及其作用
测试计划:根目录,可以理解为老大,所有内容都是基于这个计划,都需要在这个测试计划下创建
线程组
虚拟用户数,设置Jmeter按照什么场景运行
是一系列线程的集合,每一个线程都代表一个正在使用应用程序的用户。在JMeter中,每一个线程都意味着模拟一个真实用户向服务器发起请求。
- setUp Thread Group:用于执行预测试操作,比如初始化的配置,类似LR中的init
- tearDown Thread Group:用于执行测试后动作,比如建立数据库连接后,测试结束需要关闭数据库,类似LR中的end
比如设置的线程数为50,JMeter将创建并模拟测试50个用户请求到服务器端
(指的是在线用户数量,并不是并发数量)
4.1、Sampler
创建各种请求类型,用来模拟用户请求,在线程组下创建,不和其它元件相互作用,因此不存在作用域的问题
如果没有创建线程组是看不到这个的
4.2、后置处理器
后续操作的子件集合,对发出请求后得到的服务器响应进行处理,或者抓取响应数据,比如,关联动态的cookie,可用于解析响应数据,提取变量,以便后续使用
作用域---元件在其作用范围内的每一个sampler元件之后执行,取样器被执行后被触发执行的元素。
例:2个请求A和B,A发出去后得到请求响应,其中的某个参数在请求B中需要用到,参数需要上下传递,这时通过关联进行获取
再如:每次登录操作,cookie都动态变化,必须每次都捕获动态的cookie才能通过服务器的校验
4.3、断言(检查点)
元件对其作用范围内的每一个sampler 元件执行后的结果执行校验,通俗点来说就是判断测试中得到的响应数据是否符合预期
比如登录成功之后,请求响应信息中肯定会有信息提示成功,通过断言去判断,看看响应头里有没有我的预期结果,有就表示成功了;
再如购物网站,手写了登录脚本来验证用户是否登录成功,若登录成功个人中心则会显示用户信息,通过断言来校验
4.4、监听器
对测试结果数据进行处理和可视化展示
- 图形结果以图形展示响应时间
- 查看结果树显示sampler的详细的请求和返回结果
4.5、逻辑控制器
帮用户去定制何时发送请求的逻辑,它可以改变请求发送的顺序,也可以修改请求,比如让请求重复执行等(类似编程语言里的if、for)
4.6、配置元件
包含了Sampler下各种Sampler的默认配置设置
作用域---会影响其作用范围内的所有元件
4.7、定时器
默认情况下,JMeter线程没有停留的按顺序执行,为模拟真实且不在短时间内给服务器造成太大的压力,我们在请求之间添加定时器作为思考时间(设置操作之间的等待时间)
用于设置操作之间的等待时间,一旦设置是对所有请求都是生效的
PS:当执行一个sampler之前时,和sampler处于相同作用域的定时器都会被执行,如果希望定时器仅作用于其中一个sampler,则把该定时器作为其子节点加入
4.8、前置处理器
用于在实际请求发送之前,对即将发出的请求进行特殊处理,比如修改HTTP协议头、参数化等
作用域---在其作用范围内的每一个sampler元件之前执行
作用域举例,如图所示:
总结:从各个元件的层次结构来判断每个元件的作用域
5、执行顺序
配置元件(配置信息需要首先加载进来)--->前置--->定时器--->Sampler--->后置--->断言(对请求做判断)--->监听器
如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行
6、Jmeter插件的安装方法
在jmeter3.0之前的版本中,插件的安装方法需要自行去找相应的jar包,然后放到对应的目录中。
jmeter3.0版本之后的,插件的安装步骤为:
1、下载plugins manager ,放到jmeter的lib下的ext目录中
2、重启jmeter才可以生效
3、选择菜单【选项】--->【plugins manager】之后在此对话框中进行选择安装
7、优势
JMeter 能完成接口层的性能与自动化测试,原理就是模拟实际的用户请求,发送给服务器端
1、开源:纯Java语言编写,可移植性好,并提供了源码可供自定义开发
2、图形界面模式:提供了方便的图形界面来编辑和开发测试脚本
3、与平台无关:可以轻易在Windows、Linux、Mac上运行
4、多线程框架:通过线程组,能够轻易的设置不同测试的并发用户
5、图形测试结果:提供了图表、表格、树、文件等格式的结果显示
6、易于安装:Jmeter不需要安装,下载解压即可用。
7、高扩展性:Jmeter支持用户自定义测试脚本,同样还提供了各种插件
8、多测试类型支持:支持性能测试、分布式测试、功能测试
9、仿真模拟:支持多用户并发测试
10、支持多协议:支持http、jdbc、ldap、soap、jms、ftp等协议
11、脚本测试:Jmeter支持beanshell和selenium
12、比loadrunner轻量,学习成本低