一、主要内容
1、自动化测试技术概述
2、自动化测试的实践策略
3、测试设计的自动化技术
4、测试执行的自动化技术
二、自动化测试的技术概述
自动化测试就是把人为的驱动测试行为转化为机器执行的一种过程。就是模拟人手工的测试步骤,通过执行由程序语言编制的测试脚本自动的完成软件的测试设计、测试执行、单元测试、功能测试等相关的工作。对于整个测试技术来讲,测试自动化不仅是技术、工具的问题,更是一个公司和组织的文化问题。
1、自动化测试
(1)测试活动的自动化
(2)测试过程管理的自动化
(3)测试自动化不仅是技术、工具的问题,更是一个公司和组织的文化问题
(4)自动化测试执行技术
-
执行测试用例或脚本,自动操作被测对象及测试环境中周边设备来完成测试步骤和结果检查,自动判断出测试用例的执行结果的相关技术
(5)自动化测试设计技术
-
通过某些信息由生产算法自动地生成测试用例和测试脚本的相关技术
2、考点:自动化测试的目的
![](https://i-blog.csdnimg.cn/blog_migrate/09238133dda7545c413be578541349f6.png)
三、自动化测试的分类
1、按自动化的流程环节划分
-
自动化测试设计
-
自动化测试执行
2、按测试目的划分
主要是测试软件的性能,完成人工无法完成的测试,例如存在大量的并发时服务器的工作状态
主要是做漏洞检查、信息安全的验证、完成人工无法完成的测试,提高测试效率
-
功能自动化测试
-
主要是验证软件的功能,提高测试的效率
-
-
非功能自动化测试
-
性能自动化测试
-
信息安全自动化测试
-
3、按测试工具所访问和控制的接口划分
-
用户界面自动化测试工具
-
接口自动化测试工具
4、按测试工具所重点对应的测试阶段划分
-
单元自动化测试工具
-
集成自动化测试工具
-
系统自动化测试工具(系统级别自动化测试为用户界面自动化测试)
5、按测试对象所在操作系统平台划分
-
Web应用测试
-
安卓移动应用测试
-
IOS移动应用测试
-
Linux桌面应用测试
-
Windows桌面应用测试
四、自动化测试的优缺点和局限性
1、优点
-
提高测试质量
-
提高测试效率,缩短测试工作时间
-
提高测试覆盖率
-
执行手工测试不易完成的测试任务
-
更好地重现软件缺陷的能力
-
更好地利用资源
-
增进测试人员与开发人员之间的合作伙伴关系
-
能执行测试步骤更长,综合性更强的测试用例
-
更快地反馈软件质量情况
-
提高系统稳定性和可靠性
2、缺点
-
产生开发成本
-
需要测试技术团队
-
脚本维护成本高
-
无创造性
-
引入更多的复杂性
-
容易出现偏离原始的测试目标
-
可能引入额外的错误
3、自动化测试局限性领域
-
定制型项目
-
周期很短的项目
-
业务规则复杂的对象
-
人体感官与易用性测试
-
不稳定的软件
-
涉及物理交互
4、自动化测试不正确的期望
-
自动化测试可以完成一切测试工作
-
测试工具可适用于所有的测试
-
测试工具能使工作量大幅度降低
-
测试工具能实现百分之百的测试覆盖率
-
自动化测试工具容易使用
-
自动化测试能发现大量的新缺陷
5、考点
(1)自动化测试的优势
![](https://i-blog.csdnimg.cn/blog_migrate/ec576e391f066bdd2d8617c379de395b.png)
(2)自动化测试的局限性
![](https://i-blog.csdnimg.cn/blog_migrate/af5211b0ecbe92e85852a3fe5922fadb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c54f9accc25262e286ca46990fe18d04.png)
五、自动化测试的通用架构
![](https://i-blog.csdnimg.cn/blog_migrate/e0a2798ae1b2163e223b9dd147d4af18.png)
-
测试生成层:由层面的模块来产生测试用例
-
测试定义层:生成测试用例的具体描述、或测试脚本的文本
-
测试执行层:该层次提供了测试执行所 必需的功能
-
测试适配层:每个模块的主要任务是与被测试对象或测试环境中的各个设备直接接口交互,并为测试定义的测试用例提供一致的接口
-
测试框架:仅在通用自动化测试框架中的提供任何自动化测试系统都应支持通用功能的模块
六、自动化测试实践策略
1、自动化测试金字塔
![](https://i-blog.csdnimg.cn/blog_migrate/3fd425285bd48c72743094158dea86fd.png)
-
测试金字塔中,自动化测试投入越早,层级越低,投入产出比越高
-
单元层:单元测试,最有价值的测试,应使用相应的单元测试框架来规范地实施单元测试
-
服务和接口层:集成、接口自动化测试,它的价值居中
-
用户界面层:用户界面自动化测试,可看出它的价值最小,大部分测试人员都是对用户界面层的功能进行测试
2、适合和使用自动化测试工具的情形
-
被测试系统具备足够的易测试性
-
需求稳定,不会频繁变更
-
每日构建后的测试验证
-
研发和维护周期长,需要频繁执行回归测试
-
软件系统用户界面稳定,变动少
-
需要在多平台上运行的相同测试案例
-
项目进度压力不太大
-
测试人员具备较强的编程能力
3、开展自动化测试的必要条件
-
具备足够的易测试性
-
软件需求变动较少
-
项目周期较长
-
自动化测试脚本可重用
七、测试设计的自动化技术
1、基于模型的测试技术
通过模型描述软件的需求和期待的行为,自动地生成测试用例和脚本,测试建模仍然需要人工实施,而测试生成则由生成算法来自动完成
(1)优点
-
测试设计的自动化能改善工作效率和较少人为错误
-
尽早建立测试模型能改善沟通,提前发现需求中的缺陷
-
使得不了解测试设计技术的业务分析人员也能实施测试设计
-
提高测试覆盖,从而改进软件产品的质量
-
缩短测试设计的周期,加速测试活动
(2)缺点
-
从模型生成测试用例数量可能过多
-
建模需要一定的投入
-
模型也可能描述错误
-
模型的抽象可能带来理解上的困难
(3)工具实现
-
微软的Spec Explorer
-
嵌套在 Visual Studio,用户可以通过Spec Explorer对一个软件系统的期望行为进行建模,并自动生成能够在Visual Studio的测试框架下运行的测试代码
-
-
GraphWalker
-
基于MBT的自动化测试工具,支持python,功能类似于微软的Spec Explorer
-
-
Stoat
-
支持安卓,通过动态的探索应用软件的用户界面来构建用户界面模型,然后基于模型生成测试用例的
-
-
MBT On Cloud
-
国内基于云的测试建模系统,可通过浏览器直接绘制生成对应的测试用例或测试脚本
-
2、基于搜索的测试技术
把测试数据生成问题转化成为搜索问题,即从软件运行的输入域中搜索所需的值以满足测试需求,经典的基于遗传算法的测试生成
(1)优点
-
把测试用例生成问题灵活转化为在特定软件对象的输入域中搜索更有的问题
(2)缺点
-
变异操作可能产生大量输入事件序列无效的测试用例
-
移动应用软件是事件驱动的,其测试输入是一条事件顺序敏感的事件序列,而遗传算法的三种操作很可能破坏这种顺序关系,从而产生大量无效的测试用例,影响测试效率
(3)工具实现
-
Sapienz
-
第一个将基于搜索的测试技术加到安卓应用的技术,主要是基于遗传算法生成输入事件然后进行搜索和优化,最大限度的提高了代码覆盖率和发现软件崩溃的错误
-
八、测试执行的自动化技术
1、测试工具的选择
-
UFT
-
Robot Framework
-
Selenium
-
Appium
![](https://i-blog.csdnimg.cn/blog_migrate/560a9e4201d8a70d10fb8add13fa5192.png)
2、自动化测试语言的选择
-
Python
-
Java
-
Go
![](https://i-blog.csdnimg.cn/blog_migrate/64009730d1bfa32c869a6ea4779256aa.png)
3、测试输入的设计与实现
-
制定测试计划
-
此过程需要明确自动化测试范围、测试目的、测试内容、测试方法、测试进度要求
-
-
分析测试需求
-
将软件需求转换成测试需求的过程,是建立在测试计划中的测试内容的基础之上,进行细化明确测试点
-
-
设计测试用例
-
自动化测试用例是针对自动化测试框架、应用脚本技术进行用例解析
-
原则:一个脚本是一个完整的场景;一个脚本只验证一个功能点;重点测试功能中的正向逻辑;测试用例对应的测试脚本尽可能互相独立;整个脚本中只对验证点进行验证
-
-
搭建自动化测试框架
-
在用例设计工作开展的同时可着手搭建测试环境,典型要素:公用的对象;公共用的环境,公共的方法,测试数据
-
-
编写测试脚本
-
是具体的测试用例的脚本转化,包括:准备、执行、断言和清理
-
一个完整的自动化测试通常包含:验证功能是否正确、覆盖边界条件、验证异常和错误的处理
-
-
执行测试
-
脚本调试结束后,便可以再检验模式下测试被测试软件
-
4、测试输出结果的收集和分析
-
测试结果
-
每次测试结束,测试工具都会把测试情况显示在测试结果报告中,测试结果报告会详细描述测试执行过程中发生的所有主要事件,如检查点、错误信息、系统信息或用户信息
-
-
跟踪测试缺陷
-
测试记录的缺陷要记录到缺陷管理工具中去,以便定期跟踪处理,开发人员修复后,需要对此问题执行回归测试
-
-
持续集成和自动化测试
-
持续集成是频繁地将代码集成到主干,持续集成强调开发人员提交了新代码之后,立刻进行构建,单元测试,根据测试结果,可以确定新代码和原有代码能否正确地集成在一起。
-
持续集成好处快速发现错误,防止分支大幅度偏离主干,持续集成目的是让产品可以快速迭代,同时还能保持高质量
-