性能测试-Jmeter3.1 使用技巧
一、JMeter官网
下载地址
http://jmeter.apache.org/download_jmeter.cgi
Jmeter wiki
https://wiki.apache.org/jmeter
二、概念
ElapsedTime
消耗时间,与ResponseTime/SampleTime一致,表示开始请求到响应接收完毕的时间;
Latency
延迟时间,仅包括开始请求到准备接收响应的时间;
90% Line
一种时间度量指标,表示90%的请求都在该响应时间内完成;
Throughput
吞吐量,指每秒处理的请求数;
公式:Throughput=(number of requests) / (total time)
吞吐量与响应时间/并发数的关系:
TPS=U_concurrent/(T_response+T_think)
其中T_think为用户思考时间
ThreadGroup
线程组,用于控制并发请求的组件;
设置参数
- 线程数量,控制并发数量
- rame-up周期,线程柔和增长周期,比如100个线程的增长周期是10s,那么1s增加10个线程
- 固定请求数量
- 循环执行设置,可指定开始和结束时间
SummaryReport
聚合报告,结果指标包括:
属性 | 描述 |
---|---|
label | 每个样本的名称 |
samples | 测试请求总数量 |
average | 平均响应时间 |
median | 50%用户的响应时间 |
90%line | 90%用户的响应时间 |
min | 最小响应时间 |
max | 最大响应时间 |
error% | 错误发生率 |
recv KB/s | 每秒接收的数据量 |
throughput | 吞吐量(TPS) |
三、启动停止
GUI启动
./jmeter.bat
命令行启动
jmeter -n -t xxx.jmx
停止测试
//平滑停止(gracefully stop, thread will stop at next opportunity)
./bin/shutdown.sh
//立即停止(will kill thread directory)
./bin/stoptest.sh
四、使用变量
properties文件
Jmeter主要的配置文件
- jmeter.properties,定义jmeter运行的关键配置;
- system.properties,定义Java进程的系统变量,通过System.getProperties()可查询;
- user.properties,自定义配置,可覆盖jmeter.properties
命令行启动
-J 指定本地JMeter变量
-D 指定Java系统变量
-G 指定全局JMeter变量,在远程测试时会传输到测试节点
样例
PATH=$PATH:/opt/local/jre/bin
JVM_ARGS="-Xmx2048m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k"
jmeter -Jmongo.host=xxx -Jmongo.port=xxx -n -t test.jmx
JVM_ARGS 用于指定JVM大小,-n指定了no-gui模式启动
-Gglobal.properties可代替-Gvar=value的方式
引用方式
在测试计划中可通过函数对变量进行引用:
${__P(varName,defaultValue)}
五、远程测试
- 将jmeter部署到远程节点,启动server
PATH=$PATH:/opt/local/jre/bin
JVM_ARGS="-Xmx2048m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k"
./bin/jmeter-server &
端口设置
Jmeter-server采用RMI实现通讯,默认端口为1099
可编辑user.properties进行修改:
server_port=1999
- 本地配置远程节点
修改user.properties:
remote_hosts=xxx:1999
- 命令行执行
配置好远程节点之后,可直接通过GUI客户端执行测试,然而在自动化的场景下往往需要采用命令行方式执行:
//启动全部远程节点测试
jmeter -Gmongo.host=xxx -Gmongo.port=xxx -n -t test.jmx -r
//指定部分远程节点测试
jmeter -Gmongo.host=xxx -Gmongo.port=xxx -n -t test.jmx -R192.168.0.100:1999,192.168.0.101:1999
//停止远程节点测试
jmeter -Gmongo.host=xxx -Gmongo.port=xxx -n -t test.jmx -R192.168.0.100:1999,192.168.0.101:1999 -Z
六、生成报告
jtl文件
Jmeter 执行测试后可生成jtl/csv/xml的结果文件,通过在结果监听器中添加输出路径可获得。
也可以通过命令行方式直接输出,如:
jmeter -n -t test.jmx-l result.jtl
html报告
Jmeter3.x支持直接生成HTML格式的报告,可参考详细说明
- 直接生成报告
jmeter -n -t test.jmx-l result.jtl -e -o /opt/local/jmeter/result/html
-e 表示生成html报告,-o指定目标路径(必须为空)
- 从jtl文件中转换
jmeter -g result.jtl -o /opt/local/jmeter/result/html
定制报告
修改user.properties:
//按sample名称过滤
jmeter.reportgenerator.sample_filter=find|update|delete|list|insert
//APDEX模型-满足需求阈值(响应时间)
jmeter.reportgenerator.apdex_satisfied_threshold=300
//APDEX模型-可容忍阈值(响应时间)
jmeter.reportgenerator.apdex_tolerated_threshold=1200
//数据聚合频率,性能测试场景可适当减小,稳定性测试可加长,默认60s
jmeter.reportgenerator.overall_granularity=5000
关键报表
ResponseTimeOverTime
TransactionsPerSecond
ActiveThreadOverTime
ResponseTimePercentiesOverTime
七、性能监控
使用Perfmon插件,插件地址
- 部署ServerAgent
将ServerAgent上传到目标服务器,执行startAgent.sh启动;
默认情况下会启动4444,可修改启动端口:
./startAgent.sh --udp-port 7777 --tcp-port 7777
编辑Jmeter脚本文件,添加Perfmon监听器。
可设置将监控数据输出到jtl文件用于后续分析自动生成图片
需借助JMeterPluginsCMD插件,下载地址
命令行执行:
JMeterPluginsCMD.sh --generate-png cpu.png --input-jtl perfmon-cpu.jtl --plugin-type PerfMon --width 800 --height 600
八、常用插件
SteppingThreadGroup
插件地址
Jmeter自带的ThreadGroup只能均匀增加线程,无法模拟更真实的压力场景;
该插件支持更灵活的控制并发压力,如:
初始启动20线程,此后每10秒钟增加5个线程,到达100个线程之后持续运行100s...
CompositeGraph
插件地址
该插件将响应时间、吞吐量报表进行了组合,需依赖于其他几个插件。
在观察服务器极限性能时比较有用,可用于权衡指定请求频度下并发数大小。
通常情况下当并发数超过系统承受能力时,TPS出现明显下滑,响应时间持续上升。
九、参考资料
GitBook-Jmeter参考
https://aimer1124.gitbooks.io/jmeter-tutorial/
yukinami的博客
http://yukinami.github.io/2015/11/26/性能测试指南/
Jmeter逻辑控制器(总结的不错的一篇文章)
http://www.guru99.com/controllers-in-jmeter.html
Jmeter VS LoadRunner
http://www.cnblogs.com/shuiyelifang/p/5749523.html
TPS/响应时间/并发数的研究
http://blog.csdn.net/wind19/article/details/8600083
性能测试-Jmeter3.1 使用技巧的更多相关文章
- 使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)
http://www.jmeter.cf/loadtesting-jmeter.html 为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以 ...
- Jmeter3.1 使用技巧
一.JMeter官网 下载地址 http://jmeter.apache.org/download_jmeter.cgi Jmeter wiki https://wiki.apache.org/jme ...
- Akka.net 性能测试兼使用小技巧
最近想研究一下分布式开发,先拿了akka.net 跑一下性能 参考自己写个网络实现,一般在本机通讯,300M每秒的传输率,作为参考 嗯,先说结果,用Akka.net直接发bytearray,最后也只有 ...
- lr各种问题以及解决办法
LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消掉 2.在系统属性-高级-性能-数据执行保护中,添加loadrunner安装目录中的vugen.exe文件 遇到flight界面为空的解决 ...
- linux apache服务器优化建议整理(很实用)
转载:http://www.cnblogs.com/zhongbin/archive/2013/06/11/3131865.html 1.apache服务器的time_wait过多 fin_wait1 ...
- 【性能测试】常见的性能问题分析思路(二)案例&技巧
上一篇介绍了性能问题分析的诊断的基本过程,还没看过的可以先看下[性能测试]常见的性能问题分析思路-道与术,精炼总结下来就是,当遇到性能问题的时候,首先分析现场,然后根据现象去查找对应的可能原因,在通过 ...
- 性能测试常用sql技巧_Oracle
做了一段时间的性能测试,把自己在性能测试过程中,使用到的Oracle中用到的sql语句整理一番,做个备忘: (1)多个字段以某种格式拼接 "||"字符串拼接符; 示例:将" ...
- 【转】性能测试工具JMeter的使用技巧
在这此对新版本jmeter的学习+温习的过程,发现了一些以前不知道的功能,所以,整理出来与大分享.本文内容如下. 1.如何使用英文界面的jmeter 2.如何使用镜像服务器 3.Jmeter分布式测试 ...
- jmeter3.0生成html格式的dashboard性能测试结果
jmeter3.0以上支持生成dashboard的html报告,官网介绍:https://jmeter.apache.org/usermanual/generating-dashboard.html ...
随机推荐
- [HEOI/TJOI2016]序列
Description: 给你一个序列,每个数可能变化为另一个数,每次最多有一个数变化 求最长的子序列,无论如何变化,这个子序列都不下降 Hint: \(n \le 10^5\) Solution: ...
- Hashlib加密,内置函数,安装操作数据库
hashlib模块的md5加密: md5同样的内容加密后是一样的 md5加密后是不可逆的.即能加密,没办法解密. 撞库: 只是针对简单的,因为同样的内容加密后是一样的,难一点就不行了. 登录密码:注册 ...
- acl权限命令
1.查看acl命令 getfacl 文件名 #查看acl权限 2.设定acl权限命令 setfacl 选项 文件名 选项: -m 设置ACL权限 -x 删除指定的ACL权限 -b 删除所有的ACL设定 ...
- 记录一次DataTable排序的问题
//dt.DefaultView.Sort = "字段名 方式"; 最开始用的上面的没好用,改成底下转换了一下就好用了0.0 DataView dv = new DataView( ...
- 180815 Python自学成才001
1.为什么学习Python? Python:脚本语言,易入门,可移植. Python适用范围:web开发.自动化测试工具编写. 适用岗位:运维开发(运维).自动化测试(软件测试).Python开发(软 ...
- 201771010126 王燕《面向对象程序设计(Java)》第十三周学习总结
实验十三 图形界面事件处理技术 实验时间 2018-11-22 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: 事件源 (eventevent eventeventsource s ...
- java课程之团队开发冲刺阶段1.2
一.总结昨天进度 1.三个任务都已经实现 2.使用时间:四个小时左右 二.遇到的困难 1.对Android原生的侧拉任务栏不了解,导致使用的时候出现了一部分问题 三.今天任务规划 1.对之前的程序重新 ...
- What is volatile?
What is volatile? 一次偶然的机会(java多线程电梯作业寻求多个进程分享变量的方法),接触到了volatile,因此我查阅了相关的材料,对这部分做了一些了解,在这里和大家分享一下. ...
- C#线程的使用(1)
今天刚开始学习使用线程,把学习过程与新的记录下来. 创建线程: 非常简单,只需声明她并为其提供线程起始点处的方法委托即可: 终止线程: 使用Abort和Join方法来实现: Abort方法:用于永久的 ...
- java实现多线程使用多个代理ip的方式爬取网页页面内容
项目的目录结构 核心源码: package cn.edu.zyt.spider; import java.io.BufferedInputStream; import java.io.FileInpu ...