780 likes | 1.04k Views
软件测试 第 8 章 系统测试. Kerry Zhu Zhu.Kerry@Gmail.com http://blog.csdn.net/Kerryzhu. 系统性能问题. 系统太慢了,我泡了一杯茶回到座位,还没有看到响应. 软件系统安全性受到挑战. 1983 战争游戏 (电影) Matthew Broderick )是一个疯狂的电脑游戏迷,一次他不经意地闯入了五角大楼的一个绝对机密的电脑系统中 ……. 更多例子. 各种系统测试. 本章内容. 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术
E N D
软件测试 第8章 系统测试 Kerry Zhu Zhu.Kerry@Gmail.com http://blog.csdn.net/Kerryzhu
系统性能问题 系统太慢了,我泡了一杯茶回到座位,还没有看到响应
软件系统安全性受到挑战 1983 战争游戏(电影) Matthew Broderick)是一个疯狂的电脑游戏迷,一次他不经意地闯入了五角大楼的一个绝对机密的电脑系统中 ……
本章内容 • 8.1 什么是系统测试 • 8.2 概念:负载测试、压力测试和性能测试 • 8.3 负载测试技术 • 8.4 性能测试 • 8.5 压力测试 • 8.6 性能测试工具 • 8.7 兼容性测试 • 8.8 安全性测试 • 8.9 容错性测试 • 8.10 可靠性测试
本章内容 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术 8.4 性能测试 8.5 压力测试 8.6 性能测试工具 8.7 兼容性测试 8.8 安全性测试 8.9 容错性测试 8.10 可靠性测试
什么是系统测试? • 用户的需求可以分为功能性需求和非功能性需求,而非功能性的需求被归纳为软件产品的各种质量特性,如安全性、兼容性和可靠性等 • 系统测试就是针对这些非功能特性展开的,就是验证软件产品符合这些质量特性的要求,从而满足用户和软件企业自身的非功能性需求。所以,系统测试分为负载测试、性能系统、容量测试、安全性测试、兼容性测试和可靠性测试等
系统测试的内容 详见表8-1
本章内容 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术 8.4 性能测试 8.5 压力测试 8.6 性能测试工具 8.7 兼容性测试 8.8 安全性测试 8.9 容错性测试 8.10 可靠性测试
背景及其分析 • 系统性能的改善是测试、调整、再测试、再调整、……一个持续改进的过程——性能调优 • 性能调优需要借助负载测试方法的帮助 • 负载测试和性能测试有较多相似之处,例如,测试方法比较接近、都关注系统的性能,而且多数情况下使用相同的测试工具 • 负载测试可以看作是性能测试所采用的一种技术 • 压力测试可以被看作是负载测试的一种,即高负载下的负载测试 • 容量测试也采用负载测试技术来实现
定义 • 负载测试是通过模拟实际软件系统所承受的负载条件、改变系统负载大小和负载方式来发现系统中所存在的问题 • 压力测试是在强负载情况下(如大数据量、大量并发用户连接等)稳定性进行测试,查看应用系统在峰值(瞬间使用高峰)使用情况下的行为表现,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等,确认系统是否具有良好的容错能力和可恢复能力。 • 性能测试是为获取或验证系统性能指标而进行的测
本章内容 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术 8.4 性能测试 8.5 压力测试 8.6 性能测试工具 8.7 兼容性测试 8.8 安全性测试 8.9 容错性测试 8.10 可靠性测试
8.3 负载测试技术 • 8.3.1 负载测试过程 • 8.3.2 输入参数 • 8.3.3 输出参数 • 8.3.4 场景设置 • 8.3.5 负载测试的执行 • 8.3.6 负载测试的结果分析
负载测试过程 • 确定所要模拟的角色及其对应的关键业务操作路径。 • 确定输入/输出参数,制定负载测试方案。 • 准备测试环境,并完成相应的测试脚本的开发。 • 设计具体的测试场景,如负载水平、加载方式等。 • 执行测试,监控输出参数,如数据吞吐量、响应时间、资源占有率等。 • 对测试结果进行分析。 • 结果不满意,需要调整测试场景,进入下一个循环。
输入参数 • 并发用户数、并发连接数等。 • 思考时间(think time),用户发出请求之间的间隔时间 • 加载的循环次数或持续时间 • 每次请求发送的数据量。 • 加载的方式或模式,如均匀加载、峰值交替加载等 负载测试是通过模拟用户的操作方式来考察系统的行为,所以人们肯定会问:如何模拟用户的行为?
http://blog.csdn.net/Kerryzhu 负载 • RPS (Request Per Second) • 并发连接数 (Simultaneous Browser Connections) 最大数据容量 • 思考时间 (Thinking Time) • RPS + SBC + Thinking Time = Concurrent users?
加载模式举例 • 动态模式 • 全天模式 • 队列模式 • 验证模式
http://blog.csdn.net/Kerryzhu 负载模式 • 递增 • 恒值 • 动态 • 整天 • 队列
http://blog.csdn.net/Kerryzhu Demo • JMeter
输出参数 • 数据传输的吞吐量(Transactions) • 数据处理效率(Transactions per second) • 数据请求的响应时间(Response time) • 内存和CPU使用率 • 连接时间(Connect Time)、发送时间(Sent Time) • 处理时间(Process Time)、页面下载时间 • 第一次缓冲时间 • 每秒(SSL)连接数 • 每秒事务总数、每秒下载页面数 • 每秒点击次数、每秒HTTP 响应数 • 每秒重试次数
举例 图8-7 JMeter性能测试结果示意图
场景设置 在性能测试执行前,以什么样方式启动负载方式、如何持续进行负载测试直至负载测试结束,这个过程的负载大小和方式、负载启动和结束以及各种检查点、验证点等设计,被称为场景设置。 • 启动(Ramp up) • 持续期间(Duration) • 结束(Ramp down)
http://blog.csdn.net/Kerryzhu 场景类型 • 可以分为静态和动态两部分。静态部分是指设置模拟用户生成器、用户数量、用户组等,动态部分主要指添加性能计数器、检查点、阀值等,从而获得负载测试过程中反回来馈的数据——系统运行的动态状态。 • 可以依据业务模式变化、随时间段变化来进行设置 • 也可分为手工场景 和面向目标的场景
举例 依据业务模式变化来设计负载模式(来源MSDN)
同步点 • 同步点(或称集合点)用于同步虚拟用户恰好在某一时刻执行任务,确保众多的虚拟并发用户更准确、集中地进行某个设定的操作,达到更理想的负载模拟效果
负载测试执行 • 大量的虚拟用户要运行在多个客户端,并由控制器管理、代理(agent)驱动 • 负载测试的执行,需要针对不同维度的变化进行,包括时间维、负载维和系统维 • 监控、详细的记录和适当的分析是十分重要的 • 时间维:尝试观察系统在一段较长时间上的行为变化 • 负载维:尝试在系统上改变负载来进行对比分析 • 系统维:负载测试也可以针系统的不同组件、不同配置等进行
结果分析 要善于捕捉被监控的数据曲线发生突变的地方——拐点
本章内容 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术 8.4 性能测试 8.5 压力测试 8.6 性能测试工具 8.7 兼容性测试 8.8 安全性测试 8.9 容错性测试 8.10 可靠性测试
8.4 性能测试 • 8.4.1 如何确定性能需求 • 8.4.2 性能测试类型 • 8.4.3 性能测试的步骤 • 8.4.4 一些常见的性能问题 • 8.4.5 容量测试
确定性能需求 • 最终用户的体验,如2-5-10原则 • 商业需求,如“比竞争对手的产品好” • 技术需求,如CPU使用率不超过70% • 标准要求 只有具备了清楚而量化的性能指标,性能测试才能开始实施。 响应时间是用户的关注点,容量和数据吞吐量是(产品市场团队)业务处理方面的关注点,而系统资源占用率是开发团队的技术关注点
性能测试类型 • 性能验证测试,验证事先已定义的系统性能指标、系统能否满足系统的性能需求 • 性能基准测试,在系统标准配置下获得有关的性能指标数据,作为将来性能改进的基准线 • 性能规划测试,在多种特定的环境下,获得不同配置的系统的性能指标,从而决定在系统部署时采用什么样的软、硬件配置 • 容量测试可以看作性能的测试一种,因为系统的容量可以看作是系统性能指标之一
性能测试的步骤 • 确定性能测试需求; • 计划和设计测试;包括确定关键业务流程、测试类型和测试方法、选择合适的测试工具、设计测试场景等 • 测试工具的选择; • 配置测试环境,尽量接近实际运行环境,即建立仿真环境作为性能测试环境,测试结果才能可信; • 实现测试设计(开发测试脚本); • 执行测试; • 分析测试结果; • 重复上述(4)~ (6)步骤,直至测试计划完成,结果满意; • 提交性能测试报告。
示例 • 加载 • 结果分析
一些常见的性能问题 • 资源泄漏,包括内存泄漏 • 资源瓶颈,内部资源(线程、放入池的对象)变得稀缺 • CPU使用率达到100%、系统被锁定等 • 线程死锁、线程阻塞等 • 数据库连接成为性能瓶颈 • 查询速度慢或列表效率低 • 受外部系统影响越来越大
容量测试 • 容量测试(Capacity test),通过负载测试或其它测试方法,预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),在其极限值状态下系统主要功能还能保持正常运行 • 容量测试属于性能测试中的一种,一般采用逐步加载的负载测试方法,也可以先采用逐步加载方式,获得一个基本的容量值或容量范围,然后再考虑用一次性加载方式,来决定实际可支持的容量值。
本章内容 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术 8.4 性能测试 8.5 压力测试 8.6 性能测试工具 8.7 兼容性测试 8.8 安全性测试 8.9 容错性测试 8.10 可靠性测试
压力测试 压力测试是在系统(如CPU、内存和网络带宽等)处于饱和状态下,测试系统是否还具有正常的会话能力、数据处理能力或是否会出现错误,以检查软件系统对异常情况的抵抗能力,找出性能瓶颈、功能不稳定性等问题。
压力测试的类型 • 稳定性压力测试,高负载下持续运行24小时以上的压力测试 • 破坏性压力测试,通过不断加载的手段,快速造成系统的崩溃,让问题尽快地暴露出来 • 渗入测试(soak test),通过长时间运行,使问题逐渐渗透出来,从而发现内存泄漏、垃圾收集(GC)或系统的其他问题,以检验系统的健壮性 • 峰谷测试(peak-rest test),采用高低突变加载方式进行,先加载到高水平的负载,然后急剧降低负载,稍微平息一段时间,再加载到高水平的负载,重复这样过程,容易发现问题的蛛丝马迹,最终找到问题的根源。
本章内容 8.1 什么是系统测试 8.2 概念:负载测试、压力测试和性能测试 8.3 负载测试技术 8.4 性能测试 8.5 压力测试 8.6 性能测试工具 8.7 兼容性测试 8.8 安全性测试 8.9 容错性测试 8.10 可靠性测试
8.6 性能测试工具 • 8.6.1 特性及其使用 • 8.6.2 开源工具 • 8.6.3 商业工具
特性及其使用 • 能模拟实际用户的操作行为,记录和回放多用户测试中的事务处理过程,自动生成相应的测试脚本 • 能针对脚本进行修改,增加逻辑控制、完成参数化和数据关联 • 可以设置不同的应用环境和场景,通过虚拟用户执行相应的测试脚本 • 通过系统监控工具获得系统性能的相关指标的值
开源工具 • Siege(http://www.joedog.org/JoeDog/Siege)是一个开源的Web压力测试和评测工具。 • OpenSTA,可以模拟大量的虚拟用户来完成性能测试,并通过scrīpt来完成丰富的自定义设置。详见http://portal.opensta.org/index.php。 • DBMonster是一个生成随机数据、用来测试SQL数据库的压力测试工具,详见http://dbmonster.kernelpanic.pl/。 • LoadSim——网络应用程序的负载模拟器。 • 更多的性能测试工具,可访问http://www.opensourcetesting.org/performance.php