jmeter 简介
官网:Apache JMeter - User's Manual: Getting Started
***************
jmeter 简介
基本特性
jmeter是用来进行性能测试、完全开源的java应用软件;
能对静态资源、动态资源、web应用程序进行测试;
# 支持测试各种服务器、协议格式:
Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
FTP、LDAP、TCP、Java Objects
SOAP / REST Webservices
Database via JDBC
Native commands or shell scripts
Mail - SMTP(S), POP3(S) and IMAP(S)
Message-oriented middleware (MOM) via JMS
Full featured Test IDE that allows fast Test Plan recording
(from Browsers or native applications), building and debugging
# 针对浏览器或者本地应用,可用测试计划进行录制、构建和调试
CLI mode (Command-line mode (previously called Non GUI) / headless mode)
to load test from any Java compatible OS (Linux, Windows, Mac OSX, …)
# 可用命令行从任何java兼容的系统上(linux、windiws、mac等)加载测试计划
A complete and ready to present dynamic HTML report
# 提供动态展示的html报告
Easy correlation through ability to extract data from most popular
response formats, HTML, JSON , XML or any textual format
# 可从常用的数据相应格式(html、json、xml、text等)中提取数据
Full multi-threading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups.
# 可用多线程并发测试、并可使用线程组进行隔离测试
Caching and offline analysis/replaying of test results
# 缓存测试结果,对测试结果进行离线分析
Highly Extensible core(高拓展特性)
Pluggable Samplers allow unlimited testing capabilities
Scriptable Samplers (JSR223-compatible languages like Groovy and BeanShell)
Data analysis and visualization plugins allow great extensibility as well as personalization
Functions can be used to provide dynamic input to a test or provide data manipulation
Easy Continuous Integration through 3rd party Open Source libraries for Maven, Gradle and Jenkins
# 可插拔的采样器拓展了测试能力;
# 脚本采样器(JSR223兼容的语言:groovy、beanshell);
# 数据分析和可视化插件:可进行拓展、个性化定义
# 可用Maven、Gradle和Jenkins方便集三方开源插件
工作原理
jmeter是java应用程序,运行在jvm虚拟机之上;
使用线程组管理线程运行测试脚本,对被测试服务器发起负载;
每个负载机(jmeter)可运行多个线程组,对不同的业务进行隔离测试
测试计划要素
脚本中测试计划只能有一个:测试计划为根结点,只能有一个
测试计划至少一个线程组:jmeter使用线程组管理线程发起负载,可有多个线程组对不同业务进行隔离测试
测试计划至少一个取样器:取样器用于模拟用户请求
测试计划至少一个监听器:用于对取样结果进行分析、可视化展示等
***************
分布式测试
节点说明:
controller node:控制节点,运行gui界面,向其他jmeter节点发送测试计划,
控制jmeter是否发起负载,所有测试结果都会汇总到控制机,
controller node也可以作为work node直接发起负载
work node:工作节点,接收控制节点发送的测试计划,根据控制节点命令决定是否向target发起负载
target:被测试的服务器
工作流程
work node启动agent程序,等待controller node连接;
controller node连接work node,向work node发送测试计划、启动命令;
work node运行脚本,向controller node回传测试结果;
controller node接收结果并展示
配置步骤
# work node(工作节点)
bin目录运行:jmeter-server(linux)、jmeter-server.bat(windows)
# controller node(控制节点)
修改jmeter.properties属性文件:remote_hosts=127.0.0.1
remote_hosts=127.0.0.1,192.168.0.10,192.168.0.11,192.168.0.12,192.168.0.13,192.168.0.14
# 说明:remote_hosts中有127.0.0.1表示本机也是工作节点
启动单个工作节点
启动所有工作节点
***************
jmeter 组件
线程组:设置测试线程数,循环次数等
取样器:模拟用户操作,发送http请求、java请求、ftp请求等
断言:验证请求结果是否符合预期,较常用的是响应断言
监听器:收集测试结果,以表格或者图表的形式展示测试结果
前置处理器:请求发送前做一些准备工作,如数据库操作之前需要先建立数据连接
配置元件:参数配置,如从文件中读取配置参数等
后置处理器:处理服务器的返回结果,如从响应数据中获取session数据等
控制器:控制登录次数、循环控制、事务控制等
定时器:控制请求发送时间,在同一时刻发送等
测试片段:备份元件、供模块控制器调用等
jmeter 元件执行顺序
如果存在配置元件,则依次配置元件;
如果存在前置处理器,则执行前置处理器;
如果存在定时器,则执行定时器;
执行取样器;
如果存在后置处理器,且取样结果不为空,则执行后置处理器;
如果存在断言,且取样结果不为空,则执行断言;
如果取样结果不为空,则执行监听器