需要分析的系统信息
需要分析的业务信息
性能需求评估
确定性能测试点:
关键业务:
确定被测项目是否属于关键业务,有哪些主要的业务逻辑点,特别是跟交易相关的功能点。例如转账,扣款等接口。如果项目(或功能点)不属于关键业务(或关键业务点)
日请求量:
确定被测项目各功能点的日请求量(可以统计不同时间粒度下的请求量如:小时,日,周,月)。如果日请求量很高,系统压力很大,而且又是关键业务,该项目需要做性能测试,而且关键业务点,可以被确定为性能点
逻辑复杂度:
判定被测项目各功能点的逻辑复杂度。如果一个主要业务的日请求量不高,但是逻辑很复杂,则也需要通过性能测试。原因是,在分布式方式的调用中,当某一个环节响应较慢,就会影响到其它环节,造成雪崩效应。
运营推广活动:
根据运营的推广计划来判定待测系统未来的压力。未雨绸缪、防患于未然、降低运营风险是性能测试的主要目标。被测系统的性能不仅能满足当前压力,更需要满足未来一定时间段内的压力。因此,事先了解运营推广计划,对性能点的制定有很大的作用。例如,运营计划做活动,要求系统每天能支撑多少 PV、多少 UV,或者一个季度后,需要能支撑多大的访问量等等数据。当新项目(或功能点)属于运营重点推广计划范畴之内,则该项目(或功能点)也需要做性能测试。
建立性能指标
a.选取核心业务流程(重要程度/频繁)
b.并发用户数
c.事物吞吐需求
d.响应时间需求
e.系统占用资源需求
f.可扩展性需求
建立系统负载模型
业务层面:
(a)核心业务流程吞吐率
(b)高峰期业务分布时段
系统负载:
(a) 高峰/平常场景吞吐率
(b)CPU/IO/MEM/NETWORK
数据来源:
(a)服务器端监控
(b)数据库日志
(c)用户提出需求
制定测试计划的实施时间和方案
预设本次性能测试各子模块的起止时间和结束时间
测试环境的配置:局域网,虚拟机,操纵系统,数据库,中间件
参与人员:谁负责哪些任务,测试策略。
产出:测试方案,分析结果
搭建测试环境
测试机环境
服务器环境
测试场景设计
通过和业务部门沟通以及以往用户操作习惯,确定用户操作习惯模式,以及不同的场景用户数量,操作次数,确定测试指标,以及性能监控等
测试用例设计和脚本开发
选择LoadRuner或者Jmeter,我使用的是Jmeter。
我使用Jmeter的工具进行录制,
(PS:能直接写脚本就自己写尽量少录制,录制有时候会有干扰)
对脚本进行修改,增强脚本,让脚本更符合业务逻辑,可用性更强。
(1)参数化用户输入
(2)关联数据
(3)增加事物
(4增加检查点)
调试脚本
(1)Vugen单次回放
(2)Vugen多次回放
(3)Controller单脚本多用户
(4)Controller多脚本多用户
(5)查看回放日志
验证脚本
(1)通过检查点验证
(2)通过查看后台服务器日志验证
(3)通过测试系统查看运行后台变化
(4)利用SQL语句查询/插入/更新/修改,查看效果
测试数据准备
获取数据有两种方式:
(1)拉取生产数据,尽量保持数据一致以及量级足够
(2)利用脚本自动生成数据或者利用测试工具生成数据,(如:利用JDBC预埋数据)
a)负载测试数据:并发测试时需要多少数据?比如登录场景?
b)DB数据量大小:为了尽量符合生产场景,需要模拟线上大量数据情况,那么要往数据库里提前插入一定的数据量。
性能测试执行和管理
执行测试脚本
在已部署好的测试环境中,按照业务场景和编号,按顺序执行我们已经设计好的测试脚本
测试结果记录
根据测试采用的工具不同,结果的记录也有不同的形式;展现方式:折线图,统计图,表格等,现在大多的性能测试工具都提供比较完整的界面图形化的测试结果,当然,对于服务器的资源使用等情况,可以利用一些计数器或第三方监控工具来对其进行记录,执行完测试后,对结果进行整理分析,
性能测试结果分析与调优
测试环境的系统性能分析
根据之前记录得到的测试结果,经过计算,与预定的性能指标进行对比,确定是否达到了我们需要的结果;如未达到,查看具体的瓶颈点,然后根据瓶颈点的具体数据,
瓶颈定位分析
硬件设备对系统性能表现的影响分析
配置几个不同的测试环境,故可以根据不同测试环境的硬件资源使用状况图进行分析,确定瓶颈是再数据库服务器、应用服务器抑或其他方面,然后针对性的进行优化等操作
其他影响因素分析
影响系统性能的因素很多,可以从用户能感受到的场景分析,哪里比较慢,哪里速度尚可,这里可以根据2\5\8原则对其进行分析;
至于其他诸如网络带宽、操作动作、存储池、线程实现、服务器处理机制等一系列的影响因素,具体问题具体分析,
测试中发现的问题
在性能测试执行过程中,可能会发现某些功能上的不足或存在的缺陷,以及需要优化的地方,需要多次执行测试。
测试报告和跟踪
性能测试工程师完成该次性能测试后,需要将测试结果进行备案,并做为下次性能测试的基线标准,具体包括性能测试结果数据、性能测试瓶颈和调优方案等。同时需要将测试过程中遇到的问题,包括代码瓶颈、配置项问题、数据问题和沟通问题,以及解决办法或解决方案,进行知识沉淀。