文章目录
自动化测试
自动化测试就是把手工测试转化成用机器、软件、程序来测试产品的过程
自动化测试的意义
- 缩短软件开发测试周期,可以让产品更快投放市场
- 测试效率高,充分利用硬件资源
- 节省人力资源,降低测试成本
- 增强测试的稳定性和可靠性
- 提高软件测试的准确度和精确度,增加软件信任度
- 软件测试工具使测试工作相对比较容易,但能产生更高质量的测试结果
自动化测试应用场景分析
首先要考虑的是什么样的项目适合自动化?
决定项目是否采用自动化测试,通常要关注以下几个方面:
- 需求变更有计划性,并且频率不高
- 项目周期长,资源丰富
- 脚本重复利用率
- 代码规范
考虑了什么样的项目可以使用自动化,接下来我们要了解的就是在一个项目中,我们也要区分哪些部分适合自动化
某种普遍存在的观点:认为自动化测试更适合做回归测试和API测试,手工测试更适合做验收测试和GUI测试
正确的观点:什么区分了手工测试和自动化测试,实际上与API还是GUI,回归还是功能都没有关系,应该从代码是业务逻辑相关还是基础性代码出发。
业务逻辑代码对应终端用户使用的那些功能,是实际完成工作的
基础性代码则确保业务逻辑代码运行在合适的环境中起支撑作用而彼此之间相对独立,并不存在业务关系的
很明显,两种代码都要测试。手工测试更适合测业务逻辑,因为这部分人类学习起来要比交给自动化容易。
自动化测试工具
QTP
QTP是一个侧重于功能的回归自动化测试工具,提供了很多插件
QTP支持的脚本语言是VBScript
QTP的高可用性:
- 支持录制和回放
- 支持 lower level 模式
- QTP 的编辑器支持两种视图:Keyword模式和 Expert模式
Selenium
Selenium是开源的自动化测试工具,但是仅支持web页面的测试
Selenium的录制回放成功率非常低
熟悉Java、python的人喜欢Selenium
UFT
UFT是QTP的新名字,叫统一功能测试框架,新的功能如下:
- insight智能图像识别
- 多脚本调试
- PDF文本验证点
- 支持开源CI
- 支持移动设备
RFT
RFT是IBM的一款适合于功能测试、回归测试的自动化测试工具
针对与Java、.net的对象技术和基于web应用程序的录制与回放
因为录制与回放功能对于程序运行的环境依赖性太大,因此更多使用该工具的测试团队采用了自己手动写脚本的方式来提高脚本的易读性以及可维护性
但是因为帮助文档和教程很少很不系统,环境要求比较高,参数化只支持xml格式文件来存储测试数据,回放速度很慢,所以传播和使用范围不大。
WINRUNNER
老一代的自动化测试框架
只支持c语言的模式阻碍了它自身的拓展性
Sikuli
创新的图形化编程技术
以图像检索技术为基础,提供了一套基于Jython(python在Java中的完整实现)的脚本语言以及集成开发环境
使用者可利用屏幕截图直接引用GUI 元素进行编程,完成交互操作
自动化测试工具选择
- 开源免费
- 使用灵活、简单
- 后期用例易于维护
- 支持多种语言
- 容易与单元测试框架结合
- 可支持多浏览器同时,支持远程启动其他服务器
- 高度复用性
- 代码可自主掌控,对于搭建框架、平台等有不可替代的优势
Selenium脚本示例
安全测试
web安全测试流程
测试顺序排序
- 功能测试
- 自动化测试
- 安全测试
- 性能测试
性能测试
性能测试概念
- 软件系统的性能测试是一个很大的概念,覆盖面非常广泛
- 对软件系统而言,包括执行效率、资源占用、系统稳定性、安全性、兼容性、可靠性、可拓展性等
- 性能测试是描述测试对象与性能相关的特征并对其进行评价而实施和执行的一类测试
- 主要通过自动化等测试工具模拟多种正常、峰值以及异常负载条件下来对系统的各项性能指标进行测试
性能测试的核心活动
-
确定测试环境
- 物理环境、生产环境、测试团队可利用的工具和资源
-
确定性能验收标准
- 确定响应时间、吞吐量、资料利用总目标和限制
-
计划和设计测试
- 确定关键场景
- 确定典型用户的可变性,以及如何模拟这些变化
- 确定测试数据
- 确定需要收集的度量值
-
配置测试环境
- 确保测试环境已经配置妥当,可以进行资源监控
-
实现测试设计
- 根据测试设计逐步展开性能测试
-
执行测试
- 执行和监控测试
- 保证测试、测试数据以及结果收集有效
- 监控测试和测试环境,确保进行有效的测试以保障结果分析的正确性
-
分析结果、报告以及重复测试
- 整合并且共享结果数据,不仅要对单个数据进行分析,还要从一个功能交叉的测试团队角度来分析数据
性能测试目标
- 评估软件发布准备
- 评估基础结构是否恰当
- 评估已开发软件的性能是否满足要求
- 提高性能调整效率
性能测试的种类
- 负载测试
- 压力测试
- 容量测试
- 配置测试
- 并发测试
- 可靠性测试
- 稳定性测试
负载测试和压力测试
负载测试:
- 侧重于确定当前测试中的系统或者应用软件在工作负载条件下,或者在实际运行阶段加载预期的容量时,系统或者应用软件所具备的相关性能特性
- 通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标下,系统所能承受的最大负载量
- 负载测试是通过逐步加压的方式来确定系统的处理能力,确定系统能够承受的各项阀值
压力测试
- 确定当系统或者应用软件在某些超过实际运行阶段所预期的条件下时所具备的性能特性
- 通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并获得系统能提供最大的服务基本
- 压力测试时逐步增加负载,使系统某些资源达到饱和甚至失效的测试
LoadRunner介绍
LoadRunner是一种适用于介绍各种体系架构的负载测试工具,它能预测系统行为并优化系统性能
LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户操作行为和实行实时性能检测,来更快的查找和发现问题
LoadRunner主要特点
- 广泛支持业界标准协议
- 支持多种平台开发的脚本
- 创建真实的系统负载
- 强大的实时监控与数据采集功能
- 精确分析结果,定位问题所在
LoadRunner工具组成
- 虚拟用户脚本生成器
- 压力产生器
- 用户代理
- 压力调度
- 监控系统
- 压力结果分析工具