一、什么是性能测试
软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。
由定义可知性能关注的是软件的非功能特性,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。
性能测试:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
二、为什么要做性能测试
1、评估系统的能力
2、验证系统的稳定性和可靠性
3、识别系统中的弱点
4、系统调优
针对上面这几种目的,针对不同的结果,给出不同的应对方案和措施,这才是性能测试的最终目标
a、测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
b、受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
c、重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
d、检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
e、在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
三、性能测试的流程
1、需求的分析
2、性能场景的设计
3、性能计划的编写
4、脚本的开发
5、性能环境和数据的准备
6、性能的执行
7、性能结果分析
8、性能总结报告
四、性能测试结束后需要提交哪些工作件?
1、性能测试计划
2、性能测试脚本
3、性能结果分析——根据分析结果给出调优
4、性能总结报告
五、性能测试的类型
1、基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
2、负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。
3、压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
4、稳定性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
5、并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题
六、性能常见的测试工具以及他们的区别
1、jmeter是什么?
jmeter性能测试工具是apche组织开发的基于java语言开发的压力测试工具
2、jmeter的特点
(1)jmeter可以对http和ftp服务器进行压力测试和性能测试,同时还可以对数据库进行测试以及接口测试。
(2)完全移植和100%的纯java
(3)可以实现多线程的并发
(4)jmeter支持大量第三方插件的扩展
3、jmeter工作原理
(1)前期我们需要录制好性能测试脚本——通过badboy工具进行录制
(2)导入jmeter工具进行完善脚本
(3)对服务器进行性能测试
4、JMeter的缺点
JMeter的缺点是压力值不能精确控制,难以适应高并发的情况,而且由于是JAVA编写的,本身比较消耗资源。
5、JMeter和LoadRunner的区别
LoadRunner是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题, LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测i时间,优化性能和加速应用系统的发布周.商业性的工具。
JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具, 100%的用java实现。这个工具相对于上面的LoadRunner来说,是比较轻量级的工具,便于安装自免费开源。不仅可以进行功能测试也可以进行性能测试,一般可以用来做接口测试。这款工具学习起来也非常的容易,只要用这个工具做过几次测试,就可以非常熟悉的运用了。
七、jmeter目录结构
Examples:jmeter使用实例
Report-templete:日报模板
Apacha-Jmeter.jar:jmeter源码包
Jmeter.properties:jmeter配置文件
Jmeter.bat:window环境启动文件
Jmeter.sh:linux环境启动文件
Jmeter-server.bat:window环境启动负载生成器文件
Jmeter-server:linux环境启动负载生成器文件
4.2docs目录:帮助文档
4.3lib目录:用于存放jmeter依赖的jar包,第三方插件安装后需要存放在lib/ext下
4.4extras目录:提供对ant支持文件
4.5printable_docs目录:用户手册:入门可以去看
八、事务和断言
1、事务
定义一:某用户操作步骤的集合,当然也可以是一个步骤或者说是一个功能。
定义二:性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次筛选条件查询,一次支付。 无论流程步骤多或者少,一定要保证事物存在的意义性。
例如: 从打开浏览器到完成购物——这是一个事物
完成用户注册——这是一个事物
从登录开始到完成购票——这是一个事物
2、什么是断言/检查点?
响应会有两种情况:
第一:正确的响应
第二:错误的响应
jmeter中有个元件叫做断言( Assertion ) ,它的作用和loadrunner中的检查点类似,
用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。
使用断言的目的:在request的返回层面增加一层判断机制;因为request成功了,并不代表结果一定正确。
所谓的检查点,就是系统根据用户的输入,按照业务要求的逻辑处理后产生的输出,不同的业务场景、不同的结果(成功或者失败)会有不一样的要求。部分输出是客户在需求中明确要求展示的,比如展示的字段可以直接观察到或者获取到,部分输出是服务于系统维护人员、客服人员。当然,部分输出也包括不能输出或者加密输出,比如客户的银行账号要求部分数字用*号替代,客户的密码不能再日志中输出等。检查点的检查包括客户或者系统质量要求的必须输出的或者不应该输出两种情况。
检查点分类:测试检查点主要包括界面展示、文件、数据库、短消息、业务日志等。
3、什么是参数化
参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则。.这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)
八、一些基本的操作
1.浏览器中文乱码解决办法
2.添加检查点(断言)
3.badboy中将变量改成动态变量(将流程和数据分离)
九、性能调优
1、什么是性能调优
性能调优是一个性能测试完成后,根据性能测试过程中生成报告中的数据,对数据进行分析,给出调优方案。
2、性能调优从以下几个方面着手:
a、代码层面
b、数据库层面——索引,外键,sql语句的优化
c、硬件层面
3、为什么要进行性能调优
可以用更少的硬件资源,支撑更大量的业务发展,从而达到节省硬件投资的目的。
可以在资源有限,不能扩容的情况下,提升系统的响应能力,从而为用户带来更好的感知。
4、性能如何调优?
第一步:确定问题
代码层面:很多情况下,很多程序的性能问题都是写出来的。因此,对于发现瓶颈的模块,首先应该检查一下代码。
数据库层面:经常引起整个系统运行缓慢,一些诸如Oracle的大型数据库都是需要DBA进行正确的参数调整才能投产的。
硬件层面:硬盘速度、内存大小等都是容易引起瓶颈的原因,因此这也是分析的重点原因
第二步:分析原因
当确定了问题之后,我们要明确这个问题影响的是响应时间吞吐量还是其他的问题。是多数用户还是少数用户遇到这个问题。如果是少数用户,这几个用户的操作与其他人有什么不同。系统资源监控的结果是否正常?CPU的使用是否达到极限?是客户端还是服务器出现问题?系统硬件配置是否够用?实际负载是否超过了系统的负载能力?是否未对系统进行优化?
通过这些分析及与系统相关的问题,可以对系统瓶颈有更深入的了解,进而分析出真正的原因。
第三步:确定调整目标和解决方案
提高系统吞吐量,缩短响应时间,更好的支持并发。
第四步:测试解决方案
对通过解决方案调优后的系统进行基准测试。
第五步:分析调优结果
系统调优是否达到或者超出了预定目标?系统是整体性能得到了改善还是以牺牲某部分性能来解决其他问题?调优是否结束了?最后,如果达到了预期目标,调优工作就基本上可以结束了。
5、性能常见的指标
(1)什么是吞吐量
吞吐量,指的是单位时间内处理的客户端请求数量。通常情况下,吞吐量用请求数/秒Or页面数/秒来衡量。从业务角度看,吞吐量也可以用访问人数/天Or页面访问量/天来衡量。
(2)什么是吞吐率
吞吐率通常指单位时间内从服务器返回的字节数,也可以单位时间内客户提交的请求数。吞吐率是大型web系统衡量自身负载能力的一个重要指标,一般来说,吞吐率越大,单位时间内处理的数据就越多,系统的负载能力也强。吞吐率与很多因素有关,服务器的硬件配置,网络的宽带及拓扑结构,软件的技术架构。
(3)什么是事务
事务是脚本的一个特性,每个事务都包含开始事务和结束事务。事务用来衡量脚本中一行代码或多行代码的执行所耗费的时间。将开始事务放置在脚本中某行代码的前面,将结束事务放置在该行代码的后面,在该脚本的虚拟用户运行时,这个事务将衡量该行代码的执行花费了多长时间。
(4)什么是响应时间
对请求作出响应所需要的时间
(5)什么是每秒点击事务数
TPS表示服务器每秒处理的事务数,他是衡量系统处理能力的一个非常重要的指标,在性能测试中,通过检测不同用户的TPS,可以估算出系统处理能力的拐点。
(6)什么是每秒点击次数
每秒点击数是指每秒钟向web服务器提交的HTTP请求数,它是衡量服务器处理能力的一个常用指标。需要注意的是,这里的相应时间并非鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求,切勿混淆。
十、jmeter的基本结构
1、test plan(测试计划):测试计划是用来描述本次性能测试的需求,所有相关的内容都是基于该测试计划展开的。
2、thread group(线程组):线程组可以理解为虚拟用户的组
线程组包括哪些内容:
(1)线程数:表示虚拟用户-----20个虚拟用户
(2)ramp-up period:用来设置虚拟用多久时间加载完成-----10s(表示20个虚拟用户在10s内完成加载,每秒加载2个虚拟用户)
(3)循环次数:每个线程发送请求的次数------2(线程循环2次总共循环40次,时间等于20)
3、添加一个http请求
注:http请求设置-保持默认即可
页面字段介绍:
名称:本属性用于标识一个取样器,建议根据实际场景来取
服务器名称或ip:http请求发送的目标服务器名称或者ip地址
端口号:目标服务器的端口号,默认为80,后面的超时定义可以不写
协议:向目标服务器发送http请求的协议,可以是http或者https,默认值为http
方法:发送http请求的方法,可用方法包括:get、post、head,put等
路径:目标URL路径(不包括服务器地址和端口)
自动重定向:如果选择该选项,当发送http请求后得到的响应是301和302是,jmeter自动重定向到新的页面
use keep alive(持久长链接):勾选后,jmeter和目标服务器采用keep-alive方式通信
use multipart/from-data for http post:当发送http post请求,需要勾选
同请求一起发送文件:在请求中发送URL参数,对于带参数的URL,jmeter提供一个简单的对参数的方法
从html文件获取所有有内容含资源:当该项被选中时,jmeter在发出http请求并获取得响应的html文件内容后,还对该html进行parse(解析)并获取html中包含的所有资源(图片,flash等),默认不选中,如果用户希望获取特定资源,可以在下方的embedded urls must match文本框中填入需要下载的特定资源表达式。
4、查看结果树:监控http请求结果的详细结果
5、聚合报告:生成此次性能的测试数据报告
Samples:测试一共发出的请求 ,虚拟用户循环次数
Average:平均响应时间
Median:中位数,50%的请求的响应时间
90%line:90%请求的响应时间
Min:最小响应时间
Max:最大响应时间
error%:错误的请求数/请求总数
Throughput:吞吐量---每秒完成的请求数
KB:耗流量
十一、Jmeter中元器件的作用
jmeter整个执行控制全靠我们左侧的树形图来控制的,那么怎么去添加树形图里面的元件呢,因为元件所放在位置不同,那么作用的范围也不同,那么我们必须要搞清楚树形图里面的执行顺序与作用域。
注意:sampler没有作用域,响应数据的元器件。
1.首先在测试计划下新建一个线程组
线程组中的元器件的作用:
(1)逻辑控制器:业务上有需要循环去处理一些数据
(2)配置元器件:处理一些默认请求所需要携带的数据如http的头部信息和cookie信息的处理
(3)定时器:模拟同一时间发现请求,可以用定时器来实现
(4)前置处理器:http请求之前需要完成的一些工作,如数据库测试中的连接数据库的功能
(5)后置处理器:关联需要用后置处理器,需要对响应数据做处理需要用到后置处理器
(6)断言:对结果进行校验
(7)监听器:作用范围的每一个sample元件的信息并呈现。