相关分类 分类展开/收起
自动化测试
在软件测试中,自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的测试。对于持续交付和持续集成的开发方式而言,测试自动化是至关重要的。

随着软件系统规模的日益扩大,以及应用领域的不断拓展,对软件系统的测试也变得更加困难和复杂,传统的人工测试的局限性也越来越明显。自动化软件测试技术可以克服传统测试技术的许多问题。自动化测试所依据的是一套严密的测试法则和评估标准,具有完整的自动测试过程。因此,它可以避免测试人员惯性思维所导致的测试疏漏,也可减少由于手工测试中繁复的重复工作所导致的人为差错。

概述


自动化测试的意义和优点


自动化测试(尤其是单元测试的自动化),是极限编程和敏捷软件开发的一个关键特征,这也被称为测试驱动开发(TDD)。单元测试的用例可以在代码编写完成之前就设计好,并作为功能的一种定义形式存在。随着新的代码不断完成编写,单元测试随之进行,缺陷被不断找出,因而代码也不断得到改进。由于开发人员能够及时发现缺陷然后立即作出改变,修复的代价大大减小,这种不断发展的开发方式被认为比瀑布模型这类开发结束再测试的方式更为可靠。

使用单元测试框架(如JUnit、NUnit等“xUnit”类型测试框架)执行自动化测试是目前软件开发行业的大趋势。单元测试框架的应用使得各部分代码开发完成后立即进行相关单元测试来验证它们是否如预期在运行成为可能。

手工完成一些软件测试的工作(例如大量的低级接口的回归测试)十分艰苦耗时,而且寻找某些种类的缺陷时效率并不高,因而测试自动化,提供一种完成这类工作的有效方法。

一旦自动化测试方法开发完成,日后的测试工作将可以高效循环完成。很多时候这是针对软件产品进行长期回归测试的高效方法。毕竟,早期一个微小的补丁中引入的回归问题可能在日后导致巨大的损失。

自动化测试的局限性


尽管长期来看(尤其是针对回归问题的)自动化测试,可以带来开支上的节省,将所有测试短期内全部自动化还是可能产生巨大的开销[2],通常情况下业内采用手工测试和自动化测试相结合的方法完成测试工作。

尽管测试“自动化”了,但测试结果分析、测试脚本维护和编写仍然需要人力投入。

自动化测试的分类


测试自动化有许多途径,下面列出一些广泛应用的一般方法:

基于图形用户交互界面测试(GUI Based Testing)。基于用户界面(GUI)的测试使用能够产生图形用户界面操作(如出表点击、键盘输入等)的测试框架,模拟用户动作来以观察、验证程序是否正确的响应。

接口测试(又称基于API的测试,API Based Testing)。接口测试指的是通过调用接口(API)绕过GUI,,以应用到验证的行为进行测试。通常API动绕过测试的应用程序的用户界面。它也可以测试公共的接口,以类、模块或图书馆都经过测试,有各种各样的输入参数来验证返回的结果是正确的。

图形用户界面(GUI)测试


许多测试自动化工具提供记录与回放宏的功能,这允许用户记录他们在交互式用户界面上进行的鼠标点击、键盘输入等操作。这样在之后的测试当中,播放宏便可以自动测试这些交互,与正常情况下的交互反馈进行对比便可完成针对GUI的测试工作。这种方法几乎不要求用户具有软件开发经验,并且可以应用于几乎任何具有GUI的应用程序。然而,这些特点也带来了一些可靠性和维护性问题:任何按钮的重命名或是移动都会让宏出现错误,用户便需要重新录制宏。

这类工具有一种用于测试网站的变种,其“界面”不是应用程序而是网页,由于网页依赖HTML渲染器展示用户界面,因此这类变种不再关注操作本身,而是代为渲染HTML并监听DOM事件来完成宏的记录与回放。在这里,"接口"的网页。然而,这一框架利用了完全不同的技术,因为它是渲染HTML并听事件,而不是操作系统的活动。无头浏览器(一种没有用户界面的浏览器,专用于网页功能性测试)或Selenium Web Driver通常用于网站的测试工作。

接口测试


接口测试是被广泛使用的软件测试方法之一,它使软件测试工程师能够忽略GUI的影响,对软件功能本身进行测试。它是程序逻辑测试中非常关键的一步。通常情况下在开发的早期阶段,接口测试就会开始执行来确保代码始终是准确无误的。

接口测试也作为集成测试的一部分,用于判断系统是否满足功能、可靠性、性能表现和安全性的要求。由于接口测试不使用 GUI,它主要通过字符方式与测试者进行交互。

探索更多内容