一.引言

之前有总结过如何写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性能测试的更多相关文章

  1. 01 jmeter性能测试系列_Jmeter的体系结构

    深圳文鹏教育jmeter 性能测试讲义 概念 元件:元件代表jmeter工具菜单中的一个子菜单,比如HTTP请求.事务控制器.响应断言等: 组件:一组元件的集合(一个或者多个),比如逻辑控制器中有事务 ...

  2. Jmeter性能测试实践之java请求

     前言 Apache Jmeter是开源.易用的性能测试工具,之前工作中用过几次对http请求进行性能测试,对jmeter的基本操作有一些了解.最近接到开发的对java请求进行性能测试的需求,所以需要 ...

  3. 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)

    性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...

  4. 转 5 jmeter性能测试小小的实战

    5 jmeter性能测试小小的实战   项目描述 被测网址:www.sogou.com指标:相应时间以及错误率场景:线程数 20.Ramp-Up Period(in seconds) 10.循环次数 ...

  5. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

  6. Jmeter性能测试入门(链接收藏)

    Jmeter性能测试入门: http://www.cnblogs.com/TankXiao/p/4045439.html

  7. Jmeter性能测试入门(转)

    出处:http://www.cnblogs.com/by-dream/p/5611555.html Jmeter性能测试步骤 1. 添加线程组之后,先设置这两项: 2. 添加一个http请求 被测的u ...

  8. Jmeter学习一:Jmeter性能测试环境搭建(Windows下)

    最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...

  9. Jmeter性能测试

    Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter搞定的 ...

随机推荐

  1. 微软职位内部推荐-Senior NLP Scientist & Developer

    微软近期Open的职位: Contact Person: Winnie Wei (wiwe@microsoft.com )Senior Software Development Engineer/NL ...

  2. Object调用静态方法

    谁说空指针不能调用方法 public class Foo { public static void bar() { System.out.println("bar"); } pub ...

  3. ng-blur失去焦点执行事件

    <label class="item item-input item-stacked-label"> <span class="input-label& ...

  4. [转]深度理解依赖注入(Dependence Injection)

    http://www.cnblogs.com/xingyukun/archive/2007/10/20/931331.html 前面的话:提到依赖注入,大家都会想到老马那篇经典的文章.其实,本文就是相 ...

  5. OpenSessionInViewFilter 的配置及替代方案(转)

    鸣谢:http://justsee.iteye.com/blog/1174999,http://blog.csdn.net/sunsea08/article/details/4545186 Sprin ...

  6. Python SyntaxError: Non-ASCII character '\xe5'

    error: SyntaxError: Non-ASCII character '\xe5' in file D:\worklife\workshop\myCrawler\src\mainDriver ...

  7. 将ANGULAR与后端请求结合

    简单的结合,却是很多应用的基础.RESTFUL就此而生.瘦服务,富客户. <!DOCTYPE html> <html lang="en" ng-app=" ...

  8. 一晚上将一个模板整合进了DJANGO

    哈哈,说不定,下个图表项目就可以用上呢???:)

  9. [杂题]FZU2190 非提的救赎

    中文题,题意不多说. 本来感觉很像dp 其实只要从上到下维护单调性就好了 坑是......这个oj......用cin很容易TLE...... //#include <bits/stdc++.h ...

  10. mybatis传入map参数parameterType

    基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA实体类.Map.通过#{属性名}或#{map的Ke ...