一、性能测试一些概念
性能测试:就是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。
负载测试:确定在各种工作负载下系统的性能,目标是当负载逐渐增加时,测试系统各项性能指标的变化情况。负载测试要评估性能特征,如响应时长、事务处理速率和其他与时间相关的性能指标。
压力测试:通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个web站点在大量的负荷下,何时系统的响应会退化或失败。
容量测试:测试确定系统可处理同时在线的最大用户数。
维基百科解释的性能测试:软件性能测试被用来判断计算机、网络、软件程序或者驱动程序的速度和效率。这一过程会在同一实验环境下进行大量测试,以便于衡量系统功能的响应时长或者MIPS(每秒执行指令数目)等指标。其他系统特性,如可靠性、可量测性、互用性等,也可以用性能测试来衡量。性能测试通常与压力测试一起进行。
性能测试常见指标:
对于B/S架构的软件,一般会关注如下Web服务性能指标
Avg Rps:平均每秒钟的响应次数 = 总请求次数/秒数
Avg time to last byte per terstion(mstes):平均每秒业务脚本的迭代次数
Successful Rounds:成功的请求
Failed Rounds:失败的请求
Successful Hits:成功的点击次数
Failed Hits:失败的点击次数
Hits Per Second:每秒点击次数
Successful Hits Per Second:每秒成功的点击次数
Failed Hits Per Second:每秒失败的点击次数
Attempted Connections:尝试连接数
Throughput:吞吐率
对于C/S架构的程序,由于软件后台通常为数据库,更要注重数据库的测试指标
User Connections:用户连接数,也就是数据库的连接数量
Number of Deadlocks:数据库死锁
Butter Cache Hit:数据库Cache的命中情况
二、性能测试方案
性能测试方案应该详尽的描述如何进行性能测试,包括:测试背景、测试目的、测试范围、测试进入条件、测试退出条件、测试指标要求、测试策略、测试时机、测试风险和测试资源
其中测试范围、测试进入条件、测试退出条件、测试策略、测试风险和测试资源尤为重要
下面是一个性能测试方案的简单例子:
三、开源Web性能测试JMeter基础知识
JMeter简介:
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java
小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/
回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许
使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,
FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发
负载测试你的服务器/脚本/对象。
Jmeter的特点:
《1》支持对多种服务类型进行测试
Web-Http,Https
SOAP
Database via JDBC
LDAP
JMS
Mail - POP3(S)and IMAP(S)
《2》支持通过录制、回放方式获取测试脚本
《3》 具备高可移植性,100% 纯java。
《4》完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。
《5》精心的GUI设计允许快速操作和更精确的计时。
《6》支持缓存和离线的方式分析/回放测试结果。
《7》具备高可扩展性
1.可链接的取样器允许无限制的测试能力。
3.数据分析和可视化
插件提供了很好的可扩展性以及个性化。
4.具有提供动态输入到测试的功能(包括Javascript)。
5.支持脚本编程的取样器(在1.9.2及以上版本支持BeanShell)。
在设计阶段,JMeter能够充当HTTP PROXY(代理)来记录IE/NETSCAPE的
HTTP请求,也可以记录apache等WebServer的log文件来重现HTTP流量。当这些HTTP客户端请求被记录以后,测试运行时可以方便的设置重复次数和并发度(
线程数)来产生巨大的流量。JMeter还提供可视化组件以及
报表工具把量服务器在不同压力下的性能展现出来。
[2]
相比其他HTTP测试工具,JMeter最主要的特点在于扩展性强。JMeter能够自动扫描其lib/ext子目录下.jar文件中的
插件,并且将其装载到内存,让用户通过不同的菜单调用。
JMeter常用术语:
采样器:采样器是JMeter测试脚本的基本单元,用户可以用它向服务器发出一个特定的请求,采样器会在超时前等待服务器的响应。
逻辑控制器:用户通过逻辑控制器来控制JMeter测试脚本的执行顺序,便于测试能够按照用户期望的顺序和逻辑执行
监听器:监听器被用来收集测试结果信息,并以用户指定的方式加以展示。
配置元件:配置元件被用来设置一些JMeter测试脚本公用的信息。
断言:断言被用来验证服务器实际返回的信息与用户期望的情况是否相等。
定时器:定时器被用来保存JMeter测试脚本与时间相关的一些信息,例如:思考时间
前置处理器:在前置处理器的作用范围内,任何采样器被执行前,都要先执行前置处理器。
后置处理器:在后置处理器的作用范围内,任何采样器被执行后,都要执行对应的后置处理器。
测试计划:测试计划是JMeter测试脚本的根节点,关于整个测试脚本的一些基础设置,可以在测试计划中设定,例如用户定义变量。
线程组:线程组定义了一个虚拟用户池,其中每个虚拟用户都使用同样的测试脚本。
工作台:工作台被用来保存暂时不使用的测试元素,当测试人员保存测试计划时,工作台中的内容不会被一起保存。
JMeter测试结果字段的意义:
JMeter工作原理: