2014.6 Eileen
《软件性能测试过程详解与案例剖析》学习笔记1
看的顺序不是按照章节来的。。so 第4章 性能测试工具原理
4.1 性能测试工具模型
性能测试工具通常用来支持压力、负载测试,能够用来录制和生成脚本、设置和部署场景、产生并发用户、向系统施加持续压力
1 性能测试不是就用性能测试工具进行测试。性能测试只能帮助测试工程师实施性能测试,并不能帮助您完成性能测试的需求、设计和分析工作
2 性能测试工具无法自主进行性能分析,而是根据测试工程师的要求以各种方式提供报表,这些报表可以被用来分析系统性能状况
3 性能测试工具的录制和回放 与 功能测试工具的录制和回放的区别
功能测试工具的录制和回放是针对GUI的操作录制,脚本中记录的是用户对控件的操作,主要通过操作和数据来验证功能的正确性
性能测试工具的录制和回放 着重强调并发的性能,GUI的许多界面操作对服务器都不构成压力。性能测试工具录制的是服务端和应用之间的通信数据,而不是GUI操作。所以录制的时候要先选择录制的协议
4 如何选择协议 取决于应用和客户端的通信协议。对于WEB应用来说,采用HTTP/HTTPS协议
4.2 性能测试工具架构
1 虚拟用户脚本产生器 Virtual User Generator 通过Proxy代理服务器方式,截获并记录客户端和服务器之间的数据流。 截获数据流后对齐进行协议层上的处理,最终形成的是容易看懂的HTTP业务交互过程脚本。自带IDE环境,用户可以通过IDE对脚本进行修改和调试。
2 压力产生器 Player 用于根据脚本内容,产生实际的负载。 例如,如果一个测试场景要求产生100个虚拟用户,则压力产生器会生成100个进程或线程,每个线程都对指定的脚本进行解释执行
3 用户代理 Agent
4 压力调度和监控系统 Conductor 调度工具:可以根据用户的场景要求,设置各种不同脚本的VU数量,设置同步点等 监控系统:可以对各种数据库、应用服务器、服务器的主要性能计数器进行监控
5 压力结果分析工具Analysis
2014.6 Eileen
辅助进行测试结果的分析
4.2 性能测试脚本录制时的协议类型 取决于应用和客户端的通信协议,而不是根据开发语言等选取协议 4.3 性能测试工具的选择与评估 1 罗列需要的工具功能列表 是否支持被测系统运行的平台 软硬件 数据库环境 是否支持被测系统使用的协议 是否支持特殊要求,例如防火墙等 是否提供对我们关心的服务器、应用服务器或是数据库类型计数器的监控 工具使用的脚本语言功能是否完善 2 工具比较 3 成本分析 价格和License方式
第5章 性能测试的组织
5.1 性能测试团队的人员构成 1 项目测试经理
? 确定测试目标 ? 制定测试计划 ? 监控计划执行
? 处理项目干系人的交互 ? 发现和处理测试中的风险 2 测试设计
? 根据用户需求和软件需求,从业务的角度分析和整理典型场景, ? 识别出性能需求
? 制定合理可行的测试方案和用例 3 测试开发
? 实现测试方案和用例,测试脚本的编写和维护 ? 确定测试过程中需要监控的性能指标 4 测试执行
? 按照测试方案和用例,使用测试工具执行脚本 ? 监控相关的性能指标,记录测试结果 5 测试分析
? 查看测试结果,对照测试目标分析测试数据和测试过程中获取的性能指标 ? 得出测试结论 6 支持角色 系统支持 网络支持 数据库支持
5.2 性能测试的过程模型
性能测试过程通用模型PTGM Performance Test General Model (基于自动化测试生命周期方法ATLM和TMap模型) 1 测试前期准备
? 验证系统基础功能,确保当前应用系统具备性能测试的条件
2014.6 Eileen
? 组建测试团队,根据项目情况,确定人员所需技能 (测试设计、开发、执行、分
析等。但大部分情况是一个人完成,脚本可能是开发人员提供) ? 测试工具需求确认 被测系统环境 操作系统环境 应用服务器环境 数据库环境 应用使用的协议 测试工具功能需求 测试工具是否能运行在本操作系统上 测试工具是否支持对本操作系统的监控 测试工具能否支持对本应用服务器的监控 测试工具能否支持本数据库的监控 本系统使用了哪些协议 哪些协议需要在性能测试中通过工具进行录制和产生负载 测试工具能否支持需要进行录制和产生负载的协议 网络环境 测试管理支持 是否需要测试工具支持防火墙 是否需要测试工具支持负载均衡 测试工具是否能够提供方便的测试结果分析和管理 ? 性能预备测试 2 测试工具引入
? 工具选择
功能符合度
? 工具应用技能培训
测试工作相关人员 ? 确定工具应用过程
确定测试工具在测试中的具体应用范围 工具使用过程中的问题解决方法
测试工具的脚本如何管理 3 测试计划
? 性能测试领域分析 不同的性能测试应用领域,性能测试的目标定义会有区别 应用领域 能力验证 规划能力 性能测试目标 验证系统在给定环境中的性能能力 验证系统的性能扩展能力,找出系统能力扩充的关键点,给出改善其性能扩展能力的建议 提供系统的性能表现 发现系统中的缺陷 性能目标 重点关注的关键业务响应时间、吞吐量 业务的性能瓶颈 性能调优 发现缺陷 重点关注的关键业务响应时间、吞吐量 无 ? 用户活动剖析与业务建模 目的:寻找用户的关键性能关注点,确定最贴近用户要求的性能目标 用户活动剖析
方法:系统日志分析和用户调查分析 业务建模
是对业务系统的行为及其实现方式和方法的建模,一般采用流程图的方式描绘出各进程之间的交互关系和数据流向
? 确定性能目标
性能测试目标根据性能测试需求和用户活动分析结果和业务建模来确定 ? 制定测试时间计划
2014.6 Eileen
4 测试设计与开发
? 测试环境设计
性能测试的结果与测试环境之间的关联性非常大,必须先确定测试的环境。测试环境设计包括系统的软硬件环境、数据环境设计、环境的维护方法。
能力验证领域:明确是在特定的部署环境下进行
规划能力领域:测试环境不特定,但也需要设计基准环境 性能调优领域:调优过程是一个反复的过程,在调优过程中必须保证每次测试时的环境保持不变
? 测试场景设计
测试场景模拟的一般是实际业务运行的剖面,其包括业务、业务比例、测试指标的目标以及需要在测试过程中进行监控的性能计数器。
剖面:对性能测试而言,剖面表示的是某个时刻用户使用该应用的典型模式,一般由“用户执行的操作”、“执行不同操作的用户比例”以及“用户使用系统的频率”进行描述。 ? 测试用例设计
把针对每个测试场景规划出相应的工具部署、应用部署、测试方法和步骤,这个过程就是测试用例设计活动。
测试用例是对测试场景的进一步细化。细化内容包括场景中涉及业务的操作序列描述、场景需要的环境部署等内容。
业务描述中一定会给出判断业务是否执行成功的准则。 ? 测试脚本和辅助工具开发
测试脚本的开发通常基于“录制”,依靠工具提供的录制功能,可以将需要性能测试关注的业务在工具的录制下操作一遍,然后基于该录制后的脚本,对齐进行修改和调试,确保其可以在性能测试中顺利使用。
最常用的脚本修改和调试技巧是参数化、关联、日志输出。
5 测试执行和管理
? 建立测试环境
软硬件系统环境搭建 数据库环境搭建 应用系统的部署 系统设置参数的调整 数据环境
(使用检查列表Checklist,检查环境的可用性) ? 部署测试脚本和测试场景
通过测试工具部署测试脚本和测试场景。
部署完成后,需要一个确认步骤,保证场景部署与设计一致。保证需要监控的计数器都已经部署好相应的监控手段。 ? 执行测试和记录结果
测试执行非常简单,一般只需要使用菜单或是按钮就可以完成。 记录结果也可以依靠测试工具完成,通过测试工具中的监控模块,可以获取并记录需要关注的性能计数器的值。 如果测试工具不提供,可以用脚本调用操作系统提供的工具,在脚本实现中讲各性能计数器值分析出来并按照一定格式记录在本地文件中。
6 测试分析
2014.6 Eileen
测试分析过程用于对测试结果进行分析,根据测试的目的和目标给出测试结论。 性能测试的分析需要借助各种图表,一般的性能测试工具提供了报表模块来生成不同的图表,报表模块同时还允许用户通过叠加、关联等方式处理和生成新的图表。 如果是自己编写的脚本获取性能计数器的值,则可以通过Excel生成图表。
性能分析的通用方法之一:
“拐点分析”方法是一种利用性能计数器曲线图上的拐点进行性能分析的方法。基本思想是基于这个事实:性能产生瓶颈是由于某个资源的使用达到了极限,此时的表现是随着压力增大系统性能表现急剧下降,因此只要关注性能表现上的“拐点”,获取拐点附近的资源使用情况,就能够定位系统性能瓶颈。但只能定位到资源上的制约,无法直接定位引起制约的原因。
第2章 性能测试的应用领域 2.1 性能测试的方法
1性能测试Performance Testing 通过模拟生成运行的业务压力量和使用场景组合,测试系统的性能是否满足生成性能要求。 一个典型的场景包括操作序列、并发用户数量条件。且要有确定的性能目标。性能目标的描述基本上是:要求系统在100个并发用户的条件下进行某业务操作,响应时间不超过5秒。
2负载测试 Load Testing 通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态。 这种性能测试方法主要目的是找到系统处理能力的极限。这个极限一般会描述成:在给定条件下最多允许120个并发用户访问;在给定条件下最多能够在1小时内处理2100笔业务。预期的性能指标一般会定义为:响应时间不超过10秒、服务器平均CPU利用率低于65%。 负载测试一般用来了解系统的性能容量,或是配合性能调优来使用。(系统在保证一定响应时间的情况下能够允许多少并发用户的访问) 3压力测试 Stress Testing 通过增加访问压力(例如增加并发用户数量)使应用系统的资源使用保持在一定的水平。主要目的是检验此时应用表现,重点在于有无出错信息产生,系统对应用的响应时间。 4配置测试 Configuration Testing 了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。 5并发测试 Concurrency Testing 并发测试方法通过模拟用户的并发访问,测试多用户访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。 并发测试主要关注的问题 问题类别 是否有内存泄漏(C/C++) 内存问题 是否有太多的临时对象(Java) 是否有太多的超过设计生命周期的对象(Java) 数据库问题 线程 进程问题 是否有数据库死锁(Dead Lock) 是否经常出现长事务(Long Transaction) 是否出现线程 进程同步失败 问题描述