概述
软件测试的自动化——把以人为驱动的测试行为转化为机器执行的一种过程。用特定的软件/程序(与被测软件区别开)去控制测试的执行,对比实际结果和期望结果。自动化测试能够使已有的手工测试过程中的重复且必要的任务自动化,或者增加一些手工测试难以执行的测试。
自动化测试优缺点
优点
- 将重复性工作自动化,解放测试人力,提高测试效率
- 可以在空闲时间运行自动化脚本,节省测试时间
- 优化资源分配,在运行测试脚本的同时,QA可以做其他事,比如设计新测试用例
- 增加软件的可信度,测试是机器执行的,排除了手工测试时因人为情绪而发生的随意性或疏忽性,测试结果更可信
- 能完成手工不易控制的工作,比如采集系统cpu占有率信息,手工计算很复杂,还要进行数据比对,使用脚本更简单,更方便。
缺点
- 脚本维护成本高,尤其是版本变动比较大,对项目来说,是潜在的风险
- 由于脚本是预设,不具有探索性思维,所以执行的内容都是一样,容易遗漏一些缺陷
自动化测试分类
(1)从软件开发周期的角度分类:
我们知道从开发开始阶段到一个软件产品上线过程,一般来说先后经历三个阶段,单元测试,接口测试,UI测试三个阶段。对于这个金字塔模型,有如下原则
1.越底层,越稳定。
金字塔主要观点认为单元测试的稳定性高,需要多投入。
2.越底层,越高效。
程序的问题,最终还得落在具体的代码上,所以底层的测试更容易发现问题。
3.越底层,越低成本。
越底层测试能越早发现问题,越早发现问题,修复的成本自然越低。
4.越底层,越难实施。
越底层的实现对技术专业性要求越高,这点跟第三点有点矛盾,往往越专业的人才也意味着人力成本越高。
对应金字塔模型,对应的自动化测试如下
- 单元自动化测试:自动化的完成对代码中的类和方法进行测试,主要关注代码实现细节及业务逻辑等方面、
- 接口自动化测试:测试系统组件间接口的请求和返回,接口测试稳定性高,更适合开展自动化
- UI自动化测试:对图形化界面进行流程和功能等方面进行测试
(2)从测试目的的角度分类:
- 功能自动化测试:检查实际功能是否符合用户需求,以回归测试为主,涉及图形界面、数据库连接和其他比较稳定而不经常发生变化的元素
- 加粗样式性能自动化测试:依托自动化平台自动的执行性能测试、收集测试结果,并分析测试结果的一种接近无人值守的性能测试,具有以下特性:
a.对脚本创建和提供类库和其他模块支撑
b.可以设定自动化任务(比如每天根据特定的场景执行一轮性能测试)
c.自动收集测试结果并存储
d.事中监控(比如场景执行过程中的异常错误自动预警邮件功能)
e.成熟的平台可以进行自动分析功能(比如哪些事物有问题、哪些资源消耗异常等)
f.安全自动化测试
自动化测试工具发展历史
基于界面的软件自动化测试框架和工具的发展大致经历了三个阶段(有人也据此将测试工具分为三代):
- 简单的录制/回放:由工具录制并记录操作的过程和数据形成脚本,通过回放来重复人工操作的过程。在这种模式下数据和脚本混在一起,几乎一个测试用例对应一个脚本,维护成本很高。而且即使界面的简单变化也需要重新录制,脚本可重复使用的效率低。
- 数据驱动(datadriven)的自动化测试:从数据文件读取输入数据,通过变量的参数化,将测试数据传入测试脚本,不同的数据文件对应不同的测试用例。在这种模式下数据和脚本分离,脚本的利用率、可维护性大大提高,但受界面变化的影响仍然很大。
- 关键字驱动(keyworddriven)的自动化测试:关键字驱动测试是数据驱动测试的一种改进类型,它将测试逻辑按照关键字进行分解,形成数据文件,关键字对应封装的业务逻辑。主要关键字包括三类:被操作对象(Item)、操作(Operation)和值(value),用面向对象形式可将其表现为Item.Operation(Value)。关键字驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。
相应地,软件测试自动化脚本的类型,从低到高的发展层次是:
- 线性脚本:通过录制直接产生的线性执行的脚本。
- 结构化的脚本:具有顺序、循环、分支等结构的脚本。
- 共享的脚本:可以被多个测试用例使用,被其它脚本调用的脚本。
- 数据驱动的脚本:数据和流程控制分离的脚本,通过读入数据文件来驱动流程进行的脚本。
- 关键字驱动的脚本:脚本、数据、业务分离,数据和关键字在不同的数据表中,通过关键字来驱动测试业务逻辑。关键字驱动脚本的特点是它看起来更像描述一个测试事例做什么,而不是如何做。
关于自动化测试的一些原则
- 易实现,复用性高的内容优先实现自动化
- 自动化代码便于维护
- 对于短期项目,自动化不能长期使用的项目自动化投入不应投入太多自动化人力
- UI自动化由于页面容易发生变动,维护成本高,且页面问题自动化不易发现,所以优先考虑使用接口自动化
- 脚本之间不要互相依赖,这样一个脚本失败不会影响其他脚本的执行
- 尽量覆盖正向逻辑,因为正向逻辑自动化测试成本较低,效果较好,逆向逻辑很多测试点写自动化案例不易实现
- 脚本尽量独立验证一个功能点(可以有少量案例验证关联性),这样脚本维护成本低,发现缺陷排查问题速度快
- 脚本要能够对错误及时抛出异常
- 脚本要闭环,比如连接数据库,断开数据库等
- 脚本要有清理能力,不然环境中会累积大量垃圾数据
- 参数要提炼出来便于配置和修改
常用的自动化框架
1、RobotFramework自动化框架
2、Python自动化框架
3、Jemeter性能自动化框架
4、Appium 移动端自动化框架
参考文档:
1、https://blog.csdn.net/kelsel/article/details/52758386
2、https://www.cnblogs.com/qinzhenhong/p/11790580.html