软件测试
第8章 系统测试
Kerry Zhu
[email protected]
http://blog.csdn.net/Kerryzhu
[email protected]
系统性能问题
系统太慢了,我泡了一杯茶回到座位,还没有看到响应
[email protected]
软件系统安全性受到挑战
1983
战争游戏(电影)
Matthew Broderick)
是一个疯狂的电脑游
戏迷,一次他不经意
地闯入了五角大楼的
一个绝对机密的电脑
系统中 ……
[email protected]
更多例子
[email protected]
各种系统测试
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
什么是系统测试?
 用户的需求可以分为功能性需求和非功能性需求,而非功
能性的需求被归纳为软件产品的各种质量特性,如安全性
、兼容性和可靠性等
 系统测试就是针对这些非功能特性展开的,就是验证软件
产品符合这些质量特性的要求,从而满足用户和软件企业
自身的非功能性需求。所以,系统测试分为负载测试、性
能系统、容量测试、安全性测试、兼容性测试和可靠性测
试等
[email protected]
系统测试的内容
详见表8-1
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
背景及其分析
系统性能的改善是测试、调整、再测试、再调整
、……一个持续改进的过程——性能调优
性能调优需要借助负载测试方法的帮助
负载测试和性能测试有较多相似之处,例如,测
试方法比较接近、都关注系统的性能,而且多数
情况下使用相同的测试工具
负载测试可以看作是性能测试所采用的一种技术
压力测试可以被看作是负载测试的一种,即高负
载下的负载测试
容量测试也采用负载测试技术来实现
[email protected]
定义
负载测试是通过模拟实际软件系统所承受的负载条件、
改变系统负载大小和负载方式来发现系统中所存在的问
题
压力测试是在强负载情况下(如大数据量、大量并发用
户连接等)稳定性进行测试,查看应用系统在峰值(瞬
间使用高峰)使用情况下的行为表现,更有效地发现系
统稳定性的隐患和系统在负载峰值的条件下功能隐患等
,确认系统是否具有良好的容错能力和可恢复能力。
性能测试是为获取或验证系统性能指标而进行的测
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
8.3 负载测试技术
8.3.1 负载测试过程
8.3.2 输入参数
8.3.3 输出参数
8.3.4 场景设置
8.3.5 负载测试的执行
8.3.6 负载测试的结果分析
[email protected]
负载测试过程





确定所要模拟的角色及其对应的关键业务操作路径。
确定输入/输出参数,制定负载测试方案。
准备测试环境,并完成相应的测试脚本的开发。
设计具体的测试场景,如负载水平、加载方式等。
执行测试,监控输出参数,如数据吞吐量、响应时间、
资源占有率等。
 对测试结果进行分析。
 结果不满意,需要调整测试场景,进入下一个循环。
[email protected]
负载测试的构成
[email protected]
输入参数
负载测试是通过模拟用户的操作方式来考察系统的
行为,所以人们肯定会问:如何模拟用户的行为?





并发用户数、并发连接数等。
思考时间(think time),用户发出请求之间的间隔时间
加载的循环次数或持续时间
每次请求发送的数据量。
加载的方式或模式,如均匀加载、峰值交替加载等
[email protected]
参数实例
[email protected] http://blog.csdn.net/Kerryzhu
负载
 RPS (Request Per Second)
 并发连接数 (Simultaneous Browser Connections)
最大数据容量
 思考时间 (Thinking Time)
 RPS + SBC + Thinking Time = Concurrent users?
[email protected]
加载模式
[email protected]
加载模式举例
 动态模式
 全天模式
 队列模式
 验证模式
[email protected] http://blog.csdn.net/Kerryzhu
负载模式

递增

恒值

动态

整天

队列
[email protected] http://blog.csdn.net/Kerryzhu
Demo
JMeter
[email protected]
输出参数
 数据传输的吞吐量(Transactions)
 数据处理效率(Transactions per second)
 数据请求的响应时间(Response time)
 内存和CPU使用率
 连接时间(Connect Time)、发送时间(Sent Time)
 处理时间(Process Time)、页面下载时间
 第一次缓冲时间
 每秒(SSL)连接数
 每秒事务总数、每秒下载页面数
 每秒点击次数、每秒HTTP 响应数
 每秒重试次数
[email protected]
举例
图8-7 JMeter性能测试结果示意图
[email protected]
场景设置
在性能测试执行前,以什么样方式启动负载方式、如何
持续进行负载测试直至负载测试结束,这个过程的负载
大小和方式、负载启动和结束以及各种检查点、验证点
等设计,被称为场景设置。
 启动(Ramp up)
 持续期间(Duration)
 结束(Ramp down)
[email protected] http://blog.csdn.net/Kerryzhu
场景类型
可以分为静态和动态两部分。静态部分是指设置
模拟用户生成器、用户数量、用户组等,动态部
分主要指添加性能计数器、检查点、阀值等,从
而获得负载测试过程中反回来馈的数据——系统
运行的动态状态。
可以依据业务模式变化、随时间段变化来进行设
置
也可分为手工场景 和面向目标的场景
[email protected]
举例
依据业务模式变化来设计负载模式(来源MSDN)
[email protected]
同步点
同步点(或称集合点)用于同步虚拟用户恰好在某一
时刻执行任务,确保众多的虚拟并发用户更准确、集中地
进行某个设定的操作,达到更理想的负载模拟效果
[email protected]
负载测试执行
大量的虚拟用户要运行在多个客户端,并由控制
器管理、代理(agent)驱动
负载测试的执行,需要针对不同维度的变化进行
,包括时间维、负载维和系统维
监控、详细的记录和适当的分析是十分重要的
•时间维:尝试观察系统在一段较长时间上的行为变化
•负载维:尝试在系统上改变负载来进行对比分析
•系统维:负载测试也可以针系统的不同组件、不同配置等进行
[email protected]
结果分析
要善于捕捉被监控的数据曲线发生突变的地方——拐点
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
8.4 性能测试
8.4.1 如何确定性能需求
8.4.2 性能测试类型
8.4.3 性能测试的步骤
8.4.4 一些常见的性能问题
8.4.5 容量测试
[email protected]
示例
[email protected]
确定性能需求
只有具备了清楚而量化的性能指标,性能测试才能开始实施。
最终用户的体验,如2-5-10原则
商业需求,如“比竞争对手的产品好”
技术需求,如CPU使用率不超过70%
标准要求
响应时间是用户的关注点,容量和数据吞吐量是(产品市
场团队)业务处理方面的关注点,而系统资源占用率是开
发团队的技术关注点
[email protected]
性能测试类型
 性能验证测试,验证事先已定义的系统性能指标、系
统能否满足系统的性能需求
 性能基准测试,在系统标准配置下获得有关的性能指
标数据,作为将来性能改进的基准线
 性能规划测试,在多种特定的环境下,获得不同配置
的系统的性能指标,从而决定在系统部署时采用什么样
的软、硬件配置
 容量测试可以看作性能的测试一种,因为系统的容量
可以看作是系统性能指标之一
[email protected]
性能测试的步骤
 确定性能测试需求;
 计划和设计测试;包括确定关键业务流程、测试类型和
测试方法、选择合适的测试工具、设计测试场景等
 测试工具的选择;
 配置测试环境,尽量接近实际运行环境,即建立仿真环
境作为性能测试环境,测试结果才能可信;
 实现测试设计(开发测试脚本);
 执行测试;
 分析测试结果;
 重复上述(4)~ (6)步骤,直至测试计划完成,结果满意;
 提交性能测试报告。
[email protected]
示例
加载
结果分析
[email protected]
一些常见的性能问题
资源泄漏,包括内存泄漏
资源瓶颈,内部资源(线程、放入池的对象
)变得稀缺
CPU使用率达到100%、系统被锁定等
线程死锁、线程阻塞等
数据库连接成为性能瓶颈
查询速度慢或列表效率低
受外部系统影响越来越大
[email protected]
容量测试
容量测试(Capacity test),通过负载测试或其它测试
方法,预先分析出反映软件系统应用特征的某项指标的极
限值(如最大并发用户数、数据库记录数等),在其极限
值状态下系统主要功能还能保持正常运行
容量测试属于性能测试中的一种,一般采用逐步加载的
负载测试方法,也可以先采用逐步加载方式,获得一个基
本的容量值或容量范围,然后再考虑用一次性加载方式,
来决定实际可支持的容量值。
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
压力测试
压力测试是在系统(如CPU、内存和网络带宽等)处于饱和状
态下,测试系统是否还具有正常的会话能力、数据处理能力或
是否会出现错误,以检查软件系统对异常情况的抵抗能力,找
出性能瓶颈、功能不稳定性等问题。
[email protected]
压力测试的类型
 稳定性压力测试,高负载下持续运行24小时以上的压力
测试
 破坏性压力测试,通过不断加载的手段,快速造成系统的
崩溃,让问题尽快地暴露出来
 渗入测试(soak test),通过长时间运行,使问题逐渐渗
透出来,从而发现内存泄漏、垃圾收集(GC)或系统的
其他问题,以检验系统的健壮性
 峰谷测试(peak-rest test),采用高低突变加载方式进行
,先加载到高水平的负载,然后急剧降低负载,稍微平息
一段时间,再加载到高水平的负载,重复这样过程,容易
发现问题的蛛丝马迹,最终找到问题的根源。
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
8.6 性能测试工具
8.6.1 特性及其使用
8.6.2 开源工具
8.6.3 商业工具
[email protected]
特性及其使用
能模拟实际用户的操作行为,记录和回放多用户
测试中的事务处理过程,自动生成相应的测试脚
本
能针对脚本进行修改,增加逻辑控制、完成参数
化和数据关联
可以设置不同的应用环境和场景,通过虚拟用户
执行相应的测试脚本
通过系统监控工具获得系统性能的相关指标的值
[email protected]
JMeter-1
[email protected]
JMeter-2
[email protected]
JMeter-3
[email protected]
开源工具
 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
[email protected]
HP LoadRunner
[email protected]
LoadRunner系统架构
[email protected]
商业工具
HP LoadRunner
IBM Rational Performance Tester
Radview WebLoad
Compuware QA Load
Quest Benchmark Factory
微软WAS(Web Access Stress test)
Paessler Webserver Stress Tool
MINQ PureLoad
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
8.7 兼容性测试
8.7.1 兼容性测试的内容
8.7.2 系统兼容性测试
8.7.3 数据兼容性测试
[email protected]
什么是兼容性测试
兼容性测试是在特定的或不同的硬件、网络环境
和操作系统平台上、不同的应用软件之间,验证
软件系统能否正常地运行,以及能否正确存取原
先版本的用户数据所进行的测试
与硬件兼容
 与操作系统、平台的兼容
 与数据库系统的兼容
 与浏览器的兼容
 与第三方系统的兼容
 与内部业务系统的兼容
 与自身系统的不同版本的用户数据兼容等

[email protected]
兼容性测试的内容
 硬件兼容性测试
 数据兼容性测试
 系统版本之间的兼容性
•
•
向后兼容是指新发布的软件版本可以使用该软件
的以前版本所产生的数据。
向前兼容是指在设计和开发软件一个新版本时,
考虑如何和未来版本的数据兼容。
[email protected]
系统兼容性测试
B/S系统兼容性测试
C/S系统兼容性测试
[email protected]
数据兼容性测试
是否遵守统一的国际
标准、国家标准或业
界认可的事实标准等
提供相应的导入和导
出功能
剪贴板或ODBC等类
似方法
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
8.7 兼容性测试
8.8.1 安全性测试的范围
8.8.2 Web安全性的测试
8.8.3 安全性测试工具
[email protected]
什么是安全性测试
软件安全性测试就是检验系统权限设置有效性、防范非法
入侵的能力、数据备份和恢复能力等,设法找出上述各种
安全性漏洞
 跨站点脚本(cross-site scripting,XSS)攻击;
 SQL注入式漏洞;
 缓冲区溢出;
 不安全的数据存储或传递;
 不安全的配置管理;
 有问题的访问控制,权限分配有问题;
 口令设置不严,包括长度、构成和更新频率;
 暴露的端口或入口;
[email protected]
安全性测试的范围
系统级别的安全性
应用程序级别的安全性 (重点)





用户权限
数据输入验证
敏感数据加密
数据存储安全性
用户口令

验证系统的日志文件是否得到保护

……
[email protected]
Web安全性测试
跨站脚本攻击
SQL注入式攻击
URL和API的身份验证
其它
[email protected]
3-D
3-D ( defacing, destruction, denial of service – DoS )
丑化、破坏、拒绝服务
[email protected]
跨站脚本攻击
在页面某些输入域中使用跨站脚本(写入一段
javascript )来发送恶意代码给没有发觉的用户,
让浏览器执行document.write等危险指令 ,窃取用
户的资料或信息。
[email protected]
输入域验证
防止:
 HTML标签:<…>…</…>
 转义字符:&amp(&);&lt(<);&gt(>);&nbsp(空格) ;
 脚本语言,如JavaScript <script
language=‘javascript’>……</script>
 特殊字符:‘ ’ < > /
最好进行更严格的保护和验证
[email protected]
SQL注入式攻击
根据SQL语句的编写规则,附加一个永远为“真
”的条件,使系统中某个认证条件总是成立,从
而欺骗系统、躲过认证,进而侵入系统
Username=Request.from(“username”)
Password=Request.from(“password”)
xSql=”select * from admin where username=’”&usename&” ’ and
password=’”&password &” ’”
Rs.open xSql.com.0.3
If not rs.eof then
Session(“login”)=true
Response.redirect(“next.asp”)
or ‘1’ = ‘1’
End if
[email protected]
安全性测试工具的评估标准








支持常见的Web服务器平台
能同时提供对源代码和二进制文件进行扫描的功能
漏洞检测和纠正分析
检测实时系统的问题
不改变被测试的软件,不影响代码
良好的报告
非安全专业人士也易于上手
可管理部署的多种扫描器、尽可能小的错误误差等
[email protected]
常见的安全性测试工具














Acunetix Web Vulnerability Scanner是一款商业级的Web漏洞扫描程序。
Burp suite是一个可以用于攻击Web应用程序的集成平台,
Nikto是开源的Web服务器扫描程序。
N-Stealth是一款商业级的Web服务器安全扫描程序。
Paros proxy是基于Java的web代理程序,可以评估Web应用程序的漏洞。
SPI Dynamics WebInspect是功能强大的Web应用程序扫描程序
TamperIE 是一个小巧的XSS漏洞检测辅助工具
Tripwire是一款最为常用的开放源码的完整性检查工具
Wapiti是由Python语言编写的、开源的安全测试工具,直接对网页进行扫描
Watchfire AppScan是一款商业的Web漏洞扫描程序,可以扫描许多常见的漏
洞。
WebScarab可以分析使用HTTP 和HTTPS协议进行通信的应用程序
Whisker是使用LibWhisker的扫描程序,适合于HTTP测试
Wikto可以检查Web服务器中的漏洞,和Nikto比较接近。
常用的网络监控工具主要有Nessus、Ethereal/Wireshark、Snort、Switzerland
和Netcat。
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
场景设置
容错性测试就是在各种异常条件下对系统的功能进行测试,
以检验系统是否具有防护性的措施或者某种灾难性恢复的手
段或能力。容错性测试可以分为两个层次:
功能层次的容错性测试,也称负面测试(
negative test)、例外测试(exception test)。
系统层次的容错性测试,主要是灾难恢复性测试
或故障转移测试。
[email protected]
负面测试
负面测试是从逆向思维出发,检查系统在异常条件下
或用户的非法操作下系统是如何响应的,是否有异常
行为或执行了不应该执行的动作
无效等价类的测试用例就是一种负面的测试
在一些异常的或恶劣的条件下进行操作
探索性测试
[email protected]
故障转移机制
[email protected]
故障转移测试
故障转移测试就是验证故障转移机制能否正常实
现,满足事先的设计要求。
故障转移测试是在软件系统发生故障的情况下,
检验系统的恢复能力,验证系统已保存的用户数
据是否丢失、系统和数据是否能尽快恢复或在指
定时间内恢复,包括验证重新初始化、检查点、
数据恢复和重新启动 等机制的正确性
典型示例见表8-6所示
[email protected]
本章内容
8.1 什么是系统测试
8.2 概念:负载测试、压力测试和性能测试
8.3 负载测试技术
8.4 性能测试
8.5 压力测试
8.6 性能测试工具
8.7 兼容性测试
8.8 安全性测试
8.9 容错性测试
8.10 可靠性测试
[email protected]
可靠性测试
软件可靠性是软件系统在规定的时间内及规定的环境条件下,
完成规定功能的能力 ,软件可靠性主要包含以下三个要素
规定的时间
规定的运行环境条件
规定的功能
可靠性的最常用的度量是平均无故障时间,例如通过压力测
试,并借助软件失效模式、影响分析来获得有关可靠性数据
[email protected] http://blog.csdn.net/Kerryzhu
Q&A
Descargar

Lorem ipsum dolor amet, consectetuer adipiscing elit