Testing - 测试基础 - 自动
自动化测试模型
一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库、测试数据源、测试对象识别标准,以及种可重用的模块。
自动化测试框架在发展的过程中,不断有新的模型(概念)被提出,目前经历了几个阶段:模块驱动测试、数据驱动测试、对象驱动测试。
自动化测试模型是自动化测试架构的基础。
线性测试
通过录制或编写脚本,一个脚本完成一个场景(一组完整功能操作) ,通过对脚本的回放来进行自动化测试;
优势就是每一个脚本都是独立的,任何一个脚本文件拿出来就能单独运行;
缺点也很明显,用例的开发与维护成本很高;
这种模式下数据和脚本是混在一起的,如果数据发生变也需要对脚本进行修改。这种模式下的脚本没有可重复使用的概念;
模块化与类库
把脚本中重复使用的部分代码独立出来,形成公共的模块或库,需要的时候进行调用;
优点:提高了开发效率,不用重复的编写相同的脚本;方便了代码的维护,代码的更改限制在模块之内;
数据驱动
数据的改变(更新)驱动测试自动化的执行,从而引起测试结果的改变;
可以直白地理解成“输入数据的不同从而引起输出结果的变化”;
优点是实现了数据与脚本的分离(参数化),增强的脚本的复用性;
在开发层面,易于实现;
关键字驱动
理解了数据驱动,无非是把“数据”换成“关键字”,通过关键字的改变引起测试结果的改变;
独立以编程方式实现关键字驱动似乎不太容易,一般是利用现有工具和框架;
在QTP、robot framework 等此类型的测试工具中, “填表格”式的关键字驱动封装了很多底层的东西,易用性强;
测试人员只要考虑三个问题:要做什么? 对谁做?怎么做?
自动化测试用例
| 自动化测试用例 | 手工测试用例 |
|---|---|
| 执行对象是脚本,任何一个判断都需要编码定义。 | 较好的异常处理能力,能通过人为的逻辑判断校验当前步骤的功能实现正确与否 |
| 用例步骤之间关联性强。 | 人工执行用例具有一定的步骤跳跃性。 |
| 主要用来保证产品主体功能正确完整和让测试人员从繁琐重复的工作中解脱出来。 | 人工测试步步跟踪,能够细致的定位问题。 |
| 主要定位在冒烟测试和回归测试 | 主要用来发现功能缺陷 |
自动化测试替代不了手工测试,目的仅仅在于让测试人员从繁琐重复的机械式测试过程解脱出来,把时间和精力突入到更有价值的地方,从而挖掘更多的产品缺陷。
- 冒烟测试执行的是主体功能点的用例。
- 回归测试执行全部或部分的测试用例。
自动化测试用例设计
- 不是所有的手工用例都要转为自动化测试用例。
- 考虑到脚本开发的成本,不要选择流程太复杂的用例。如果有必要,可以考虑把流程拆分多个用例来实现脚本。
- 选择的用例最好可以构建成场景。例如一个功能模块,分 n 个用例,这 n 个用例使用同一个场景。这样的好处在于方便构建关键字测试模型。
- 选择的用例可以带有目的性,例如这部分用例是用例做冒烟测试,那部分是回归测试等,当然会存在重叠的关系。如果当前用例不能满足需求,那么唯有修改用例来适应脚本和需求。
- 选取的用例可以是你认为是重复执行,很繁琐的部分,例如字段验证,提示信息验证这类。这部分适用回归测试。
- 选取的用例可以是主体流程,这部分适用冒烟测试。
- 自动化测试也可以用来做配置检查,数据库检查。这些可能超越了手工用例,但是也算用例拓展的一部分。项目负责人可以有选择地增加。
- 如果平时在手工测试时,需要构造一些复杂数据,或重复一些简单机械式动作,告诉自动化脚本,让他来帮你。或许你的效率因此又提高了
- 一个脚本是一个完整的场景
- 一个脚本只验证一个功能点
- 遵循用户正常使用原则编写脚本,尽量只做功能中正向逻辑的验证。不要考虑太多逆向逻辑的验证(逆向逻辑的情况会很多,需要编写大量的脚本,而且非正常的逻辑难以被自动化脚本所验证)
- 在整个脚本中只对验证点进行验证,不要对整个脚本每一步都做验证。
- 如果对数据进行了修改,需要对数据进行还原。
- 脚本之间不产生关联性,也就是说编写的每一个脚本都是独立的,不能依赖或影响其他脚本。
软件过程自动化
- 构建自动化:自动化从各个模块的源码构建组装成一个完整的产品
- 测试自动化:构建前自动完成相应的测试工作
- 部署自动化:对于通过测试的构建好的产品,做好成品测试后,自动化部署到生产服务器
- 自动化场合选取:尽量对稳定的对象做自动化,如API接口;GUI不建议使用自动化,投资回报比太低,变更大
- 自动化比例:基于稳定的测试环境和测试计划;在效率和质量上寻求平衡点
自动化测试的实施
适合做自动化测试的项目
软件需求变动不频繁
测试脚本的稳定性决定了自动化测试的维护成本。
如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本。
而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。
项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。项目周期较长
自动化测试需求的确定、框架的设计、脚本的编写与调试,这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。
如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。自动化测试脚本可重复使用
所测试的项目之间是否很大的差异性(如C/S系统和B/S系统的差异);
所选择的测试工具是否适应这种差异;
测试人员是否有能力开发出适应这种差异的自动化测试框架。
不同阶段对应的自动化测试
单元测试
关注代码的实现逻辑,例如一个if 分支或一个for循环的实现;
利用相应的单元测试框架集成、接口测试
关注函数、类(方法)所提供的接口是否可靠。UI层的功能测试
通过相应的自动化测试工具来模拟
自动化测试侧重于单元测试与接口测试。然后有选择有必要地通过自动化方式“部分解放”UI层的重复劳动。
三种测试的比例要根据实际的项目需求来划分。
以google为例,70%的投入为单元测试,20%为集成、接口测试,10% 为UI层的自动化测试(《google 测试之道》)。
Testing - 测试基础 - 自动的更多相关文章
- Testing - 测试基础 - 分类
对软件内部结构的深入程度 黑盒测试:又叫功能测试.数据驱动测试或基于需求规格说明书的功能测试. 白盒测试:又称结构测试.逻辑驱动测试或基于程序代码内部构成的测试. 灰盒测试:包含性能测试.自动化测试. ...
- Testing - 测试基础 - 方法
选择和使用测试方法和工具 按照测试需求用途(或测试技巧)选择 在软件开发生命周期和软件测试流程中适当地选择 按照测试人员实际技能选择 选择可提供的和可执行的 测试方法 类别及技巧 目标 使用方法 举例 ...
- Testing - 测试基础 - 探索
定义 探索性测试(Exploratory Testing)是一种自由的软件测试风格,强调测试人员同时展开测试学习,测试设计,测试执行和测试结果评估等活动,以持续优化测试工作. 其特征有:即兴发挥,快速 ...
- Testing - 测试基础 - 概念
测试是为了度量和提高被测试软件的质量,对测试软件进行工程设计.实施.维护的的整个生命周期过程. 仅仅发现Bug是测试的初步,而分析出根本原因推动问题的解决,却要有很深的功底. 不同的测试岗位从事不同的 ...
- Testing - 测试基础 - 流程
测试存在于各个阶段: 需求测试--->单元测试--->集成测试--->系统测试--->性能测试--->用户测试--->回归测试 需求测试 完整性&正确性 一 ...
- Testing - 测试基础 - 用例
测试用例 是指对一项特定的软件产品进行测试任务的描述,体现测试方案.方法.技术和策略. 内容包括测试目标.测试环境.输入数据.测试步骤.预期结果.测试脚本等,并形成文档. 每个具体测试用例都将包括下列 ...
- Testing - 测试基础 - 阶段
估算 测试对软件工作量的估算的准确性 测试评估软件系统的状况的准确性 关注点: 不准确的估算 不适当的开发过程 不真实的状态报告 如何知道对工作量的估算是正确的 估算工作量的工具很容易出错 对软件工作 ...
- Testing - 测试基础 - 理解
理解 目的 测试就是要找到关键信息,有关项目和产品的关键决策都是根据这些信息做出. 对产品质量做出总体评估. 找出并报告团队所有可能会对产品价值产生消极影响的问题(但并不意味着能发现所有问题). 重心 ...
- Testing - 测试基础 - 模型
珠玉在前,不再赘言. 软件测试模型 软件测试模型汇总
随机推荐
- asp.net中gridview的checkbox使用总结
1.在gridview中的<column>中加入 <asp:TemplateField HeaderText="选择"> <ItemTemplate& ...
- 单用户模式下修改root密码
1.重启或者开机时,在倒数3秒的界面按下任意键. 2.该界面有如下提示(e 编辑 a 更改内核选项 c 命令行 b 启动),所以我们按下"e"编辑. 3.上下键选中第二行再按下& ...
- 2013-09-25-【随笔】-Roy
路怒了. 要淡定,心态要好. 不能和不要命的傻X较劲. 路怒不好! 淡定!
- cocoapods安装以及使用,安装过程中ruby版本过低
cocoapods安装以及使用,安装过程中ruby版本过低 字数473 阅读103 评论1 喜欢2 1.打开终端 2.移除现有 Ruby 默认源 $ gem sources --remove http ...
- [leetcode 48] rotate image
1 题目 You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwi ...
- blogilo在chinaunix发布博客的设置
1. 在日志类型菜单中选择"Metaweblog API". 2. 在日志的远程发布url中输入"http://blog.chinaunix.net/xmlrpc.php ...
- 冲刺阶段 day13
---恢复内容开始--- 项目进展 今天星期三,我们将专业管理部分又继续做了完善,之前漏掉的几项功也一一补全,没能实现的数据库部分也已经进行了完善,并且对已经完成的部分进行了检测,数据库的部分还有待进 ...
- Nim编码风格
介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考. 但值得注意的是,有很多例外 ...
- windbg 基础命令实战 - 简单程序破解
以前玩游戏遇到一些实在过不去的管卡,经常会找一些游戏修改软件来修改游戏,让自己变得无比强大,将boss一路砍瓜切菜过足游戏瘾.其实游戏修改软件的功能大多都比较简单,我们可以通过windbg的一些简单命 ...
- [异常解决] 安卓6.0权限问题导致老蓝牙程序出现异常解决办法:Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...
一.问题: 之前写的一款安卓4.4的应用程序,用来连接蓝牙BLE,而现在拿出来用新的AS编译(此时SDK为6.0,手机也是6.0)应用程序并不能搜索到蓝牙,查看log总是报权限错误: Need ACC ...