首页 > 代码库 > 自动化测试的组成部分:SEARCH
自动化测试的组成部分:SEARCH
在考虑自动化测试用例时,不仅仅要考虑测试的执行步骤。在运行任何步骤之前,程序必须处在能够执行测试的状态。在测试执行后,至关重要的是知道测试是否通过,并且测试结果一定要被保存到某处以待检查或进一步分析。另外,还可能需要清理测试中生成的垃圾(文件、注册表设置等)。最后,测试一定要易于维护和易于理解,以便任何人在任何需要的时间都能运行或修改。
自动化测试的含义远比自动执行原来人工执行的测试步骤多得多。好的自动化测试利用计算机的能力去执行人力无法有效执行的测试。自动化测试不是测试工程师的替代品。能思考的人执行测试的作用远远超过机器。但是如果有效地利用,自动化测试会节省大量的时间和开支。
Keith Stobie和Mark Bergman在他们1992年的论文“How to Automate Testing: The Big Picture”中用缩写“SEARCH”来描述测试自动化的组成部分。“SEARCH”代表的是设置(Setup)、执行(Execution)、分析(Analysis)、报告(Reporting)、清理(Cleanup)和帮助(Help)。
1、设置
设置指的是将被测软件的测试环境和配置信息等准备好,让实际的测试操作可以开始执行。
2、执行
这是测试的核心,包括检验软件功能的特定步骤、充分的错误处理、或者一些其他的相关工作。
执行测试用例的方法是多种多样的。一种简单的执行形式是编写并运行一段脚本或程序。
3、分析
分析是确定测试通过还是失败的过程。这是最重要的步骤,也常常是测试中最复杂的步骤。
有时候,分析这一步挺简单,但是用来确定一条测试是不是通过的标准可能会非常复杂。测试准则是测试用例所预期的测试结果的源头。
4、报告
报告包括分析结果的显示和传播,例如日志文件、数据库、或者其他分析过程所生成的文件。
比较小的项目经常直接用测试日志文件作为测试报告。测试日志文件记录着测试用例和测试套件运行通过或失败的结果。只要这些日志文件不是太多,就可以直接用作测试报告。
另一种比较常用而且有效的办法是测试日志文件的自动解析。日志文件解析程序可在运行测试用例之后独立执行,既可以用来解析一个日志文件,也可以用来解析成批的日志文件。解析程序可简单地记录测试用例名和运行结果,也可以记录可能用得到的重要数据,如测试分类,被测的产品组件,以及可用来分析测试失败结果的相关信息。
5、清理
清理阶段将软件返回到已知状态使得接下来的测试能继续执行。
在可能的情况下,自动化测试应该尽量将运行环境回归到测试运行前的状态,以保证后续的测试能正常执行。失败的测试反映的应该是产品中的问题,而不是前面测试留下的垃圾数据或环境设置的结果。环境清理对于那些需要很长时间设置测试环境的用例尤其重要。 虽然理想的工作流程应该是在测试执行后清理环境,但现实中却不一定处处可行。例如,如果一个有内存泄漏或内存破坏(memory corruption)问题的测试用例每次在运行完之后重设环境,就会掩盖这里的内存问题。反过来,如果所有的测试都不作环境清理,分析失败的测试结果的根源就会很困难。一个折中的处理方式是在所有的自动化测试用例后加上环境清理的步骤,同时重复运行另一组测试,不作环境清理的步骤。例如,在运行附带环境清理的自动功能性测试同时,在另一些计算机上重复运行一组不附带环境清理的场景测试。
6、帮助
指的是使测试用例在其生存周期中保持可维护性和健壮性的帮助系统。
有时测试工程师会因为经验的增加转去负责更关键的部分,或转到公司内其他的产品组。他原来负责的测试程序就会转交给其他的测试工程师维护、设置、运行和进行测试结果分析。SEARCH的最后一个步骤就是为了确保自动化测试在整个产品生命周期里的运行和维护。 测试代码和产品代码一样,必须是可维护的。除了清晰合理的结构和代码注释,帮助这个阶段还包括建立一系列相关文档。测试目标、已知的限制、设置步骤以及如何解读运行结果等都应包含在文档之中。 对大多数测试工程师来说,建立文档是SEARCH中最没有吸引力的一个步骤,但这一步可能成为这些自动化测试程序整个生命周期中最重要的一个环节。
开发自动化测试时,考虑从设置到维护的整个测试构造是很重要的。自动化程度很高的自动化测试可以把 SEARCH 的每个步骤都自动化,但有时只把部分步骤自动化就很有用。例如有些情况下,可以将程序的安装和设置自动化,之后执行关键的、或探索性质的人工测试。或者,你可以采用某个系统把测试结果记录到测试用例管理器,作测试结果的自动分析和报告。大多数情况下,一个成功的做法是自动化大部分的步骤。
很多测试自动化的努力遭遇失败,其原因在于它们只自动化测试执行的环节。一个完整的自动化方案要求自动化不仅仅测试执行这一个环节。在一个自动化策略中,如果没有一个把应用程序准备好到测试可以执行状态的计划,也没有自动的测试结果报告和分析,就很少能带来什么益处。许多人在想到测试自动化时主要考虑测试执行的自动化,其实其他测试阶段的自动化也很有用。用“计算机辅助测试”这个术语来描述对测试各个阶段自动化的概念,可能要比“测试自动化”这个术语更合适。彻底的自动化绝不仅仅是执行一个测试。执行测试需要各种支持性任务,在计算机上开发的工具和实用程序提供了自动化这些任务的好的解决方案。
注:本文为《微软的软件测试之道》一书10.3.和10.4章节内容整理后的阅读笔记,感谢本书作者Alan Page。