记录一次Jmeter性能测试
一.引言
之前有总结过如何写Java请求测试用例类,写完测试脚本调通之后,信心满满地以为我准备好可以开始性能测试了。结果在评审测试计划的时候,当即被项目组狠狠的扇了一耳光,各种不确定的点:性能指标不明确;测试场景不合理;测试计划没有交代清楚时间、资源和责任人等等。会后被召唤到老大办公室一通点拨,终于理清了思路,从头开始吧。那么,性能测试一般都有哪几个步骤呢,这里主要根据自己的经验进行的梳理:
1.需求调研和分析:明确测试对象、测试范围、测试目标
2.测试计划:测试场景设计,测试时间计划,测试产出及通过标准
3.测试准备:测试环境搭建,测试脚本及数据准备
4.测试执行:测试结果分析(日报的形式发送项目组),性能调优
5.测试报告:完整的测试报告
二.正文
1.需求分析
a. 如果需求明确给出性能指标,并经项目组评估是合理的,则按需求指标进行测试,测试结果达到预期指标,则测试通过;
b. 如果没有明确的性能指标,则根据历史数据或类似系统,由项目组评估出性能指标;
c. 以上2点都不满足,则可以进行峰值测试或稳定性测试,测出系统的性能瓶颈,评估是否达到预期。
2.测试计划
测试计划中除了例行的项目概述外,重点要明确测试环境、测试目标(测试通过条件)、测试场景、测试时间人员等。
a.测试环境:生产环境、准生产环境 or 测试环境
b.测试目标:这里要明确2点,
一是测试分几个阶段及各个阶段的优先级,如:
1 )应用的性能满足性能需求指标即可 优先级高
2 )应用的最高负载指标(TPS趋于稳定)优先级中
3 )应用的最大压力指标(宕机并发-1) 优先级低
二是具体的性能指标,如:
100个并发情况下满足以下性能指标:
90%的响应时间:4秒
CPU最高平均值:小于80%
堆内存GC后平均剩余70%
GC间隔时间:15秒以上
c.测试场景设计:包括每秒钟新增并发数,并发持续时间,还可以结合业务场景对请求进行参数化等。
d.测试人员和时间:这个就是列个一般的schedule就行
3.测试准备
a. 测试环境的搭建,如果是已投产的生产或准生产环境,则测试版本的应用包部署完成即可。
b. 测试数据准备,包括测试脚本的编写和调试,测试请求参数的准备等。
4.测试执行
a.如何监控服务器性能(参考:http://www.cnblogs.com/yangxia-test/p/4019250.html)
这里采用 JmeterPlugins插件:JMeterPlugins-Standard-1.2.0与ServerAgent-2.2.1
将JMeterPlugins-Standard-1.2.0\lib\ext\JMeterPlugins-Standard.jar包复制到JMeter的lib目录下面的ext目录下面,重新启动Jmeter
可以在测试计划中添加该插件提供的线程组了,界面和jmeter自带的线程组有所不同,可以方便地设置并发的场景:总并发数、线程加入,线程退出机制等。
另外,可以通过该插件提供的各种监视器来监控服务器的cup、networkIO、tps、聚合报告等数据:
但是,要监控服务器的性能,就要在服务器端运行下ServerAgent-2.2.1这个东西了,将它拷贝到服务器磁盘的任意位置,运行对应操作系统的脚本来启动它即可。
当然,如果是运行在JVM上的应用,也可以通过Jdk自带的jconsole或jvisualvm(windows系统)来监控服务器端JVM的性能。
b.采用分布式测试
在大数据量和高并发的情况下,客户端压力机自身的性能往往会影响测试结果。此前,在测试的过程中,就出现客户端压力机JVM内存溢出和自身networkIO所限,TPS一直上不去的情况。采用多台客户机进行分布式并发,可以更准确地测出系统的性能情况(当然,是否采用分布式还要看实际的业务需求和应用场景)。
将测试客户端依赖的jar包拷贝到所有客户机Jmeter安装路径的lib下,并启动jmeter-server(Linux系统)或jmeter-server.bat(windows系统)。
PS:这里在测试过程中遇到2个小问题:
1. 所有客户机要保证jdk版本一致,否则测试Java请求的时候会报错
2. Linux下的jmeter-server脚本无法启动(由于时间关系,没有去细究这个问题,待进一步验证)
客户机都启动好之后,在控制机中修改配置文件jmeter.properties中的remote_hosts,添加所有压力机的IP,默认端口是1099,也可以自己指定。
所有的准备工作都做好之后,就可以在控制机上打开Jmeter编写好测试脚本,进行测试了,通过远程启动按钮来启动全部客户机:
c.测试结果分析
同一个场景,可以通过并发数的增加来获得一组响应数据:
CPU随并发数的变化
JVM内存随并发数的变化
TPS随并发数的变化
通过分析测试结果,来判断应用的性能是否达到预期指标。如果测试未达到预期指标,则需要分析测试过程中的各个环节对测试结果的影响,排除客户机性能,网络IO等外部因素后,最终确定代码优化方案。优化代码后,重新测试。
5.测试报告
测试报告主要包括:项目概述、测试环境、测试资源及时间、测试策略、测试场景、测试数据分析、测试结论及风险反馈等。
记录一次Jmeter性能测试的更多相关文章
- 01 jmeter性能测试系列_Jmeter的体系结构
深圳文鹏教育jmeter 性能测试讲义 概念 元件:元件代表jmeter工具菜单中的一个子菜单,比如HTTP请求.事务控制器.响应断言等: 组件:一组元件的集合(一个或者多个),比如逻辑控制器中有事务 ...
- Jmeter性能测试实践之java请求
前言 Apache Jmeter是开源.易用的性能测试工具,之前工作中用过几次对http请求进行性能测试,对jmeter的基本操作有一些了解.最近接到开发的对java请求进行性能测试的需求,所以需要 ...
- 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)
性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...
- 转 5 jmeter性能测试小小的实战
5 jmeter性能测试小小的实战 项目描述 被测网址:www.sogou.com指标:相应时间以及错误率场景:线程数 20.Ramp-Up Period(in seconds) 10.循环次数 ...
- 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试
续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...
- Jmeter性能测试入门(链接收藏)
Jmeter性能测试入门: http://www.cnblogs.com/TankXiao/p/4045439.html
- Jmeter性能测试入门(转)
出处:http://www.cnblogs.com/by-dream/p/5611555.html Jmeter性能测试步骤 1. 添加线程组之后,先设置这两项: 2. 添加一个http请求 被测的u ...
- Jmeter学习一:Jmeter性能测试环境搭建(Windows下)
最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...
- Jmeter性能测试
Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter搞定的 ...
随机推荐
- sql之事务和并发
1.Transaction(事务)是什么: 事务是作为单一工作单元而执行的一系列操作.包括增删查改. 2.事务的种类: 事务分为显示事务和隐式事务: 隐式事务:就是平常我们使用每一条sql 语句就是一 ...
- Elasticsearch升级至1.x后API的变化-三
请支持原创:http://www.cnblogs.com/donlianli/p/3841762.html 1.索引格式 1.x之前的版本,被索引的文档type会同时出现在url和传输的数据格式中 ...
- String类中的equals()方法
在Java中,每一个对象都有一个地址空间,在这空间保存着这个对象的值. equals 比较的是值,==比较的地址以及值. 01: public class StringExample02: {03: ...
- jsp的静态包含与动态包含:<%@ include file="" %>和<jsp:include page=""></jsp:include>区别与分析
<%@ include file="" %>是将文件原封不动的copy进现有的文件中,像是拼接好后,再编译成为servlet运行. <jsp:include pa ...
- URAL 1009 K-based numbers(DP递推)
点我看题目 题意 : K进制的N位数,不能有前导零,这N位数不能有连续的两个0在里边,问满足上述条件的数有多少个. 思路 : ch[i]代表着K进制的 i 位数,不含两个连续的0的个数. 当第 i 位 ...
- Posix IPC
- CURL与PHP-CLI的应用【CLI篇】
CLI的普通应用 什么是PHP-CLI php-cli是php Command Line Interface的简称,即PHP命令行接口,在windows和linux下都是支持PHP-CLI模式的; 为 ...
- Spring下载地址
spring官方网站改版后,不提供直接下载,而是通过maven下载,所以将直接下载的地址给出: http://maven.springframework.org/release/org/springf ...
- ArcGIS学习记录—ArcGIS ArcMap编辑状态中线打断的问题
摘要:在处理数据时,我们经常会遇到线打断的问题,比如需要指定在线上某处打断线,或者新建网络数据集时需要在线的交点处打段线等等.现将桌面版中我所遇到的线打断的工具总结如下: 在ArcGIS矢量处理数据时 ...
- 转:Build Your First JavaScript Library
http://net.tutsplus.com/tutorials/javascript-ajax/build-your-first-javascript-library/ Step 1: Creat ...