性能测试对于大部分测试人员都是一个神秘地带,因为在很多公司,性能测试都是由一个性能测试团队来做,所以普通测试人员没有机会接触到真实的性能测试,因而很难学习到很多新的测试实践知识。
性能测试指标
通常来说我们会关注如下的性能测试指标。
响应时间:比较熟悉的就是2-5-8原则(据统计当网站慢一秒就会流失十分之一的客户),通常来说,2到5秒,页面体验会比较好,5到8秒还可以接受,8秒以上基本就很难接受了。但是有的项目也会例外,比如从海量的数据中去查询某些数据,或者生成报告(年度报告),这种可能就不太适合2-5-8原则,但是前提是要管理好客户的期望。
吞吐量:指的是在单位时间内客户端和服务器成功传送数据的数量
并发:客户/服务端同一批用户同时执行一个操作的数量
资源使用率:通常来说,我们关注的资源就是几大块:内存、CPU、I/O和网络
成功率:比如在某些情况下,API调用的成功率
测试数据一直是软件测试中的一个头疼的问题,特别是在性能测试中测试数据尤为重要,因为越真实的数据越能获得更好的结果。对于测试数据的类型可以分为以下四种:单一型,随机型,模板型,真实型。
单一型
它是通过录制或者观察,使用一个或者一类单一的测试数据来进行性能测试。这种数据的构建简单,但是数据过于单一,无法模拟真实用户。由于其数据构建简单,所以可以用于敏捷开发中的早期性能测试。
随机型
它是通过一些简单的数据规则,并结合随机算法生成的测试数据。这种数据和单一型比较,虽然增加了随机性,但是仍然缺乏真实性,并且其构建成本和性能问题的分析成本也相对较高。它可以用于上线前的大规模的多样化的综合性能测试。
模板型
它主要是通过数据分析并生成模板来构建测试数据。虽然它较随机型在一定程度上增加了用户真实性,但是准备数据的成本很高。在项目成本和资源允许范围内,可以结合模板型和随机型的方法,从而更为有效的进行性能测试。
真实型
它是通过直接导出或者重定向产品数据来做性能测试数据。它完全是真实的用户数据,构建成本较低,但是存在数据安全性的问题,比如数据泄露。在数据安全性可以得到有效保护的情况下是可以使用真实型数据来进行性能测试。
测试数据生成和管理对于一个大型产品的性能测试是十分重要的,所以如何高效的生成有效的测试数据成为了首要的任务。通过这四种测试数据类型,可以快速的判断在产品当前阶段适合使用那种类型的数据,从而避免一些弯路。
------------------------------------------分割线---------------------------------------------------------------------
一、性能测试常见问题分析:
1)执行过程中,响应时间出现拐点,波动大
1-JVM执行了GC垃圾回收,造成性能拐点
2-网络不稳定
2)高并发时,等待超时、连接失败等报错。
1-连接数设置不足
2-服务器资源已达到瓶颈
3)内存溢出问题。
1-JVM内存参数设置过低
2-程序本身存在内存溢出或内存回收问题
二、性能影响因素
应用服务器
数据库服务器
应用程序代码本身
服务器硬件及操作系统
三、常见性能影响因数
1)JVM内存设置参数
内存溢出类型 :OutOfMemoryError:java heap size / OutOfMemoryError: PermGen space
可在Tomcat的bin目录下的catalina.bat文件设置内存参数:
set JAVA_OPTS=
-Xms6144m Heap Space
-Xmx6144m
-XX:PermSize=512M PermGen Space
-XX:MaxPermSize=1024M
------------------------------------------分割线------------------------------------------------------
面试中被问到的一些性能测试问题:
1.测试的指导方法论
2.怎么评估性能测试场景 、性能指标(用户数,数据量)
3.界面相应时间怎么制定?(3,5,8),接口响应时间怎么制定?(毫秒级)
4.服务器指标监控,监控哪些指标?
5. 若一个场景不达标时要怎么去做(分析定位不达标的原因)
6.tcp协议了解
7.性能问题最关键的点在哪(服务器资源, tcp是否占满,最主要的就是数据库 )
8.问题怎么去定位? 分层定位(底层 -数据库 缓存 tcp )