当前课程知识点:软件理论与工程 > 第5章 软件测试 > 5.4 测试web应用系统 > 5.4 测试web应用系统
大家好
这一个节我们来分享一下
测试Web应用系统
大家都知道Web应用系统现在
在我们的生活当中
生产当中应用的越来越广泛
那么我们看一下对于Web应用系统的测试
我们要学习哪些内容
首先 我们要来学习一下
WebApp测试的相关概念
然后看一下WebApp测试的过程
然后看一下 内容测试
用户界面测试 构件级测试
及我们的配置测试 安全性测试
和性能测试
我们先看一下对于Web测试
考虑Web测试的质量的时候
我们应该考虑哪些个方面
首先 我们要考虑Web的内容
在语法及语义层面对Web内容进行评估
在语法层面
我们对基于文本的文档进行拼写
标点以及文法方面的评估
在语义层面
我们要对所表示的信息的正确性
以及整个内容对象及相关对象的一致性
及清晰性都要进行评估
另外 我们要对功能进行测试
以发现与用户需求不一致的错误
评估功能的正确性 不稳定性
以及与相应的实现标准的总体符合程度
我们要对WebApp的结构进行评估
以保证它正确的表示了
WebApp的内容及功能
而且 这个结构是可扩展的
可以支持新的内容和新的功能的增加
另外
我们要对WebApp的可用性进行测试
以保证我们的接口支持各种类型的用户访问
各种用户都能够学会
和使用它所有需要的导航的语法和语义
还有一个质量维度要考虑的是
导航性的测试
导航性的测试
我们要保证检查所有的导航的语法和语义
发现任何导航的错误
比如坏的链接
不适合的链接和错误的链接
而且我们要考虑在各种不同的操作条件
配置和负载下
我们对WebApp的性能要进行测试
保证系统可以在合理的时间范围内
响应用户的交互
并处理在极端负载的情况下
没有出现操作上不可接受的性能的降低
另外 在WebApp测试的质量时候
我们要考虑兼容性
因为客户及服务器的这种结构
在各种不同的主机配置下运行WebApp
对兼容性要进行测试
我们要发现针对特定的主机配置
和客户端的配置是否做到了兼容
再有 我们需要对互操作性进行测试
保证WebApp与其他的应用系统
和数据库都能够有正确的接口
另外 我们要对安全性进行测试
我们通过评定可能存在的弱点
试图对每个弱点进行攻击
任何成功的突破尝试都
被认为是一个安全的漏洞
那我们看了几个质量评估的要点
那么我们看一下
WebApp中可能会存在的错误
由于WebApp测试发现的很多类型的错误
都首先表现在客户端
所以Web工程师看到了错误的征兆
并没有看到错误的本身
因为在客户端表现的征兆
可能是由于服务器端的程序的错误造成的
由于WebApp在很多不同的配置
及不同的环境中实现的
要在最初遇到的错误的环境之外
再重现这个错误可能是困难的
或者是不可能的
这就为WebApp的测试
带来了一定的挑战
虽然许多错误是不正确的设计
或不合适的html编码的结果
但是 很多错误原因有可能追溯到
是由于WebApp的配置上的问题
由于WebApp位于
客户服务器体系结构之中
在三层的体系结构
客户服务器和网络本身中
追踪错误是非常困难的
某些错误应该归为静态的操作环境
既由测试的特定配置造成的
而另外一些错误可能是由动态的操作环境
即瞬间的资源负载
或者相关的动态的错误造成的
那么看了WebApp可能
会存在的错误的地方
和我们要考核WebApp的质量的维度
要注意的问题
我们下面看一下WebApp的测试策略
我们对WebApp的内容模型要进行评审
以发现错误
对接口模型要进行评审
保证适合所有的用例
我们要评审WebApp的设计模型
发现导航错误
我们还要测试用户界面
发现表现机制和导航机制中的错误
我们还要对所选择的功能构件
进行单元测试
比如文本框
比如功能提交按钮等等
另外
我们要对贯穿体系结构的导航进行测试
在各种不同的环境配置下
实现的WebApp
并测试WebApp对每一种配置的兼容性
另外对WebApp
安全性非常重要
我们要进行安全性的测试
试图攻击WebApp
和其所处的环境的弱点
最后我们要进行
性能测试
我们通过可监控的最终用户群体
对WebApp进行测试
对可监护的最终用户群体
与WebApp之间的交互结果进行评估
我们要评估内容 导航
可用性 兼容性 安全性 可靠性
及性能等方面
我们对WebApp的测试过程应该是
首先 测试最终用户能看到的内容和界面
随着测试的进行
对体系结构
和导航设计的各个方面要进行测试
最后才转到测试技术能力
WebApp的基础设施
以及安装或实现方面的问题
这些方面的问题对最终用户并不是可见的
所以根据这张
设计的金字塔型结构的层面
我们首先测试用户能看得见的
Web内容和界面
然后测试体系结构和导航设计
然后测试WebApp的基础设施
然后再测试我们的最终的构件和程序
对于Web程序
很多情况下我们是需要数据库的支撑的
那么对于数据库我们也要进行测试
在这张图中
我们将用户提交的请求
翻译成数据库管理系统可处理的格式
这个过程中可能会发生错误
WebApp和远程数据库之间的通信
可能会存在错误
WebApp服务器
收到的原始数据的有效性
也可能存在错误
另外 我们要测试
收到的原始数据
证明它转换的有效性
另外 将这种转换应用于原始数据时
要能够生成有效的内容对象
这个我们也要进行测试
我们要发现内容对象格式方面的错误
以及 我们要测试
不同的客户环境配置的兼容性
那么 在刚才的这张图里面
我们要测试客户提交数据请求
把数据请求通过服务器
进行转换提交给我们的数据库
数据库提取相关的数据内容
生成数据对象
在由数据库提交给服务器
服务器在经过内容格式的转换
提交给客户端
这一系列的过程当中
每一个连接的过程都需要进行测试
以发现这些连接过程中可能存在的错误
另外 对于WebApp来讲
界面是非常重要的
我们要测试WebApp的界面
对于WebApp的界面进行测试的时候
我们要测试它的链接
对每个导航链接都要进行测试
确保获得了正确的内容对象或功能
另外 我们要测试界面上的表单
包括由用户填写的空白域和结构化的文档
包含在域中的数据将作为一个
或多个WebApp的功能的输入
另外 我们要测试客户端的脚本
在脚本语言
比如javascript的中
嵌入一系列可编程的命令
通过表单
或者其他用户交互处理信息的输入
另外 我们要测试动态的html
导航到内容对象由客户端使用脚本
或者层叠样式表来处理
另外 要测试客户端弹出的窗口
没有用户交互这些窗口可以是面向内容的
也可能是需要某种用户交互的表单
另外 还要测试界面当中的CGI脚本
公共网关接口脚本
公共网关接口脚本实现了标准的方法
使得Web服务器与用户进行动态的交互
例如
一旦用户提交了表单
包含表单的WebApp可能
使用CGI脚本处理包含在表单中的数据
另外 在界面中我们要测试流内容
流内容
内容对象对服务器端自动下载到客户端
而不需要等待客户端请求的
有时将这种方法称为push
也就是 推
因为服务器端向客户端要推送内容
另外 我们还要注意测试cookies
由服务器发送的数据块
并由浏览器作为特定的用户交互结果进行存储
数据的内容是特定于WebApp
比如用户的认证数据
或者用户选择的购买的物品清单
另外 在界面机制下
我们还要考虑特定的
应用系统的界面机制
测试是否与界面机制定义的功能
和特性清单相符合
包括一个或多个宏的界面机制
比如购物车 信用卡交易处理
或者是运送成本计算器
另外 在测试界面的时候
或者是WebApp的时候
我们要考虑不同的抽象级别
比如 我们只是评估特定的界面机制
表单的可用性
还是我们评估完整的Web页
包括页面机制
数据对象和相关功能的可用性
最高的抽象级别
我们要考虑整个WebApp的可用性
对于Web应用程序
兼容性是非常重要的
经常我们会遇到某些功能
用一种浏览器可以正确的使用
用另外一种浏览器就不能够正确的使用
这个就是WebApp的兼容性做得不好
兼容性测试是定义一组
通常遇到的客户端的计算配置
和它们的变型
我们在测试的时候可以创建一种树结构
并在上面标识出
每一种计算平台典型的显示设备
还有此平台支持的操作系统
可用的浏览器
可靠的internet连接速度
以及其他的类似信息
然后进行不同的情况的组合
来完成兼容性测试
导出一系兼容性的确认测试
从现有的界面测试 导航测试
性能测试和安全测试中导出
这些测试的目的是发现
可以追溯到配置不同的错误
或者配置中运行的问题
然后我们在WebApp
也要考虑它的构件及设计
集中于一系列的测试
试图发现WebApp功能方面的错误
对于WebApp
我们可以使用传统的黑盒测试
和白盒测试
来设计测试用例来进行构件级测试
另外还有一点就是 数据库测试
通常也是构件级测试的一个重要的组成部分
对于WebApp
其中很重要的一个导航测试
我们应该对导航的机制进行测试
包括导航链接
这些机制包括WebApp内部链接
和到其他的WebApp的外部链接
以及特定的外部页内的锚链接
在导航测试中
我们还要考虑重定向的问题
当用户请求一个不存在的URL
或者选择了目标已经被移除的或者
名字已经被更改的链接的时候
这些重定向就会发生作用
导航测试还要注意有书签的测试
虽然书签是一项浏览器的功能
应该对WebApp进行测试
确保当创建书签的时候
可以提取正确的 有意义的页标题
导航测试还需要测试框架和框架集
测试正确的内容 合适的布局和尺寸
下载的性能 以及浏览器的兼容性
站点地图也需要进行测试
要对站点地图的每个入口进行测试
确保链接将用户带到合适的内容
或者是合适的功能
内部搜索引擎
搜索引擎测试确认搜索的正确性和完整性
搜索引擎的错误处理特性
和高级搜索的特性都应该被测试到
另外我们要注意的就是配置测试
在配置测试我们要考虑服务器端的配置测试
和客户端的配置测试
服务器端我们要考虑WebApp与
服务器操作系统完全兼容吗
当WebApp运行时
系统文件目录和相关的系统数据
是否可以正确的被创建
系统安全措施
例如防火墙或加密
允许WebApp运行并对用户提供服务
而不发生冲突
或者是导致性能下降吗
是否已经利用
所选择的分布式的服务器配置
对WebApp进行了测试
例如 可能使用单台的应用服务器
和数据库服务器两台机器之间的
通过网络连接的通信是否被测试
那么WebApp是否与
数据库软件进行了适当的集成
是否对数据库的不同版本有敏感
服务器端的WebApp脚本运行正常吗
系统管理员错误对WebApp的运行的
影响是否进行了检查
如果使用了代理服务器
在战略测试的时候
是否已经明确这些代理服务器在
配置方面的差异
刚才是关于服务器端的配置测试
那么在客户端也需要进行配置测试
客户端的配置测试包括硬件
比如cpu 内存 存储和打印设备
包括操作系统
是Linux的
Macintosh的
还是Microsoft Windows的
有一些是基于移动的操作系统
我们都应该进行配置测试
再有就是我们常用的浏览器软件
我们用的IE浏览器 还是火狐浏览器
等等 这些浏览器的配置
也需要进行测试
在用户界面的构件Active X
Java applets等
其他的用户界面构件
也应该进行严格的测试
还有就是插件
比如QuickTime RealPlayer的插件
以及其他的插件 也需要进行测试
另外 连通性
比如我们的cable 比如DSL
常规的调制解调器等等
配置变量的数据
一定要缩减到可管理的数量规模下
我们对配置的不同的组合
要进行全面彻底的测试
才能保证我们的WebApp
在各种情况下都可以正常使用
对于WebApp
很重要的安全性测试
我们应该设计安全性测试
去探查在某些方面存在的弱点
比如客户端环境
当数据从客户端传到服务器的时候
并从服务器在传回客户端的时候
所发生的网络通信
以及服务器端的环境是否有安全漏洞
在客户端
弱点通常可以追溯到早已存在的浏览器
电子邮件程序或通信软件中的缺陷
在服务器端
薄弱环节包括拒绝服务攻击
恶意脚本
这些恶意脚本
可以被传到客户端
或者用来使服务器操作丧失服务能力
另外很重要的一点就是性能测试
服务器响应时间是否降到了
值得注意或者难以容忍的程度
在什么情况下性能变得不可接受了
哪些系统构件
对性能的下降应该负主要的责任
在多种负载的条件下
对用户的平均响应时间分别是多少
这些都是性能测试的主要内容
性能下降是否会影响到系统的安全性
当系统的负载增加时
WebApp的可靠性和准确性
是否会受到很大的影响
当负载大于服务器容量的最大值时
又会发生什么情况
这些都是我们在性能测试要考虑的内容
那么既然在性能测试中考虑负载
我们看一下负载测试需要考虑几个方面
负载测试的目的
确定WebApp和其他服务器环境
如何响应不同的负载条件
我们如何计算总的负载的吞吐量呢
我们有并发用户数量N
每个单位时间内在线的事物数量T
和每次事务服务器处理的数据负载D
那么我们通过
公式P等于N 乘以T乘以D
就可以计算出来总的吞吐量的负载情况
最后 我们还要考虑压力测试
系统逐渐降级了吗
或者当容量超出时
服务器会出现停机的情况下吗
服务器软件会给出
服务不可用这样的提示信息吗
或者用户知道他们不能访问服务器了吗
服务器的队列请求增加资源
一旦容量要求减少
是否能够释放出队列所占用的资源
当容量超出的时候事务会不会丢失
当容量超过的时候
数据的完整性会受到影响吗
当我们刚才说的访问数量 数据量
以及服务的应用的
处理的transaction的数量
迫使使得服务器环境失效
如何来证明服务器已经失效了
是否会自动通知到访问服务器的人
和技术支持的人员那里
那么 如果系统失效了
需要多长时间才能够恢复正常的状态
当容量达到80%或90%的时候
我们某些WebApp的功能
是否就会停止提供
比如计算密集型的功能
或者是数据流动的能力
是不是会受到很大的影响
那么 在这一个章节
我们学习了如何去测试Web应用程序
我们测试WebApp的程序的概念
测试过程
内容测试 WebApp的用户界面
测试WebApp的构件级测试
WebApp的导航测试
配置测试和安全性测试以及性能测试
我们这一章总共学习了这些方面的内容
希望对大家进行
WebApp测试的时候有一定的帮助
今天我们的内容就到这里
谢谢大家
-课程概述
-1.1 软件的本质
-1.2 软件工程
--1.2 软件工程
-1.3 软件过程结构
-1.4 过程模型
--1.4 过程模型
-1.5 敏捷开发方法
-第1章 习题
--第1章 习题
-2.1 需求工程过程
-2.2 需求获取
--2.2 需求获取
-2.3 需求分析
--2.3 需求分析
-2.4 过程建模
--2.4 过程建模
-2.5 面向对象建模
-第2章 习题
--第2章 习题
-3.1 设计概述
--3.1 设计概述
-3.2 设计的概念
-3.3 设计模型元素
-3.4 体系结构概述
-3.5 体系结构风格
-3.6 构件级设计
-3.7 UI设计
--3.7 UI设计
-3.8 基于模式的设计
-第3章 习题
--第3章 习题
-4.1 UML概述
-4.2 UML 及UML中的事物
-4.3 UML关系和图
-4.4 UML 图细节(上)
-4.4 UML 图细节(下)
-第4章 习题
--第4章 习题
-5.1 软件测试策略
-5.2 测试传统的应用系统
-5.3 测试面向对象的应用系统
-5.4 测试web应用系统
-5.5 测试移动应用系统
-第5章 习题
--第5章 习题
-6.1 软件项目估算
-6.2 软件过程管理
-6.3 软件配置管理
-6.4 项目版本控制及调试
-第6章 习题
--第6章 习题