一、自动化测试与测试自动化
很多人会以为自动化测试和测试自动化这两个概念没有什么不同。但是从我个人看来,这两个概念有本质上的区别。
自动化测试是指使用自动化测试工具代替人工的方式来执行测试用例。使用工具的原因一方面是为了代替人工执行那些简单、重复而枯燥的动作,从而节省人工的时间,让测试人员投入到真正有价值的探索式测试中;另一方面,像性能测试之类的的压测场景我们很难使用人海战术进行测试而只能借助于工具模拟的方式来进行。
测试自动化是指在软件测试全生命周期(STLC:Software Testing Lifecycle)过程中每一个环节都尽可能用自动化的方式来解决。所以它不仅仅关注测试执行过程,还包括测试数据准备、测试环境搭建等等都可以通过自动化的方式实现。
而今天我们要谈的是前者,也就是自动化测试。当我们在IT部门定义自动化测试时,它意味着通过不同的自动化工具在应用程序上执行测试。这些工具可以是开源的,也可以是商业的。
二、什么是自动化测试框架
在我们继续讨论自动化测试框架之前,让我们先了解一下什么是框架。
通常,框架是标准和规则的组合,当遵循这些标准和规则时,企业可以使用它们来获得最大的收益。
类似地,自动化测试框架是用于创建自动化脚本的特定方法,它是一组为自动化提供支持的原则、概念和实践。
自动化测试框架的特点:
- 在编写脚本时遵循一组严格的原则。这些原则主要关注于减少自动化脚本的维护和提高脚本的质量。
- 确保自动化脚本具有数据可行性,因此它们可以在各种数据集上执行。
- 实现可重用、健壮和高效的自动化脚本。
三、自动化测试框架架构与组件
让我们在了解自动化测试框架组件之前先来了解自动化测试框架架构。下图列出了一个最基本的自动化测试框架架构:
一个基础的自动化测试框架体系结构涉及以下主要组件:
驱动引擎
控制其他组件或者工具执行的主要代码。有些框架和执行引擎在同一个工具里面,大部分商业工具都如此,比如QTP/UFT和Tosca;有些框架需要借助外部的测试工具,比如RobotFramework框架集成Selenium或者Appium等。
数据管理
这里提到的数据管理包括三个方面:
- 参数管理:需要对输入输出参数进行统一管理,提高脚本可维护性
- 环境变量:需要对测试环境变量做到可配置管理,提高脚本的健壮性
- 测试数据:测试数据的输入,是否能支持多种文件格式的导入,甚至是数据库直接取数的接口等
对象存储库
保存对象定义的文件。
异常处理
当脚本执行出现错误的时候,需要有异常处理的机制,是继续往下执行还是直接退出?这里需要有处理错误或异常的机制。
执行机制
执行脚本的机制。是否批量执行?是否定时执行?是否可分布式执行?
测试结果及报告
存在两个层面的测试报告:
- 脚本层面:测试报告是否可以显示每个脚本的执行时间、每个步骤的执行时间、每个步骤的执行结果、错误日志和错误截图等;
- 任务层面:每个执行任务到底多少脚本执行成功、多少脚本执行失败、百分比如何等等。
以下为某公司的自动化测试框架例子:
现在您已经理解了什么是自动化测试框架及其组件,让我们来看看不同类型的框架。自动化测试涵盖了一系列测试框架。在这里,我将介绍最常见的类型。
线性自动化测试框架
线性自动化测试框架涉及入门级测试。测试人员依次创建测试脚本并单独运行它们。不需要编写自定义代码。所以测试人员不必是自动化专家。此外,快速的工作流是线性自动化框架最大的优点。
例如:
好处:
- 生成脚本的最快方式
- 不需要自动化专业知识
- 了解测试工具特性的最简单方法
坏处:
- 很少重用脚本
- 测试数据硬编码到脚本中
- 维护的噩梦
模块测试框架
基于模块的测试框架将测试用例分解为小模块。然后,它遵循非增量和增量的方法。在那里,首先对模块进行独立测试,然后对整个应用程序进行测试。这使得每个测试都是独立的。
此外,一旦测试人员编写了函数库,您也可以在其中存储脚本。由于您可以轻松地在单个脚本中进行更改,因此不需要调整整个应用程序。因此,测试需要更少的时间和精力。
好处:
- 该框架引入了高水平的模块化,这使得维护更容易、更经济。
- 这个框架是可扩展的
- 如果更改是在应用程序的某个部分中实现的,那么只需要修复表示该应用程序的那个部分的测试脚本,以保持所有其他部分不变。
坏处:
- 在为每个模块分别实现测试脚本时,我们将测试数据(我们应该使用这些数据执行测试)嵌入到测试脚本中。因此,无论何时我们需要使用不同的测试数据集进行测试,都需要在测试脚本中进行操作
库架构测试框架
使用库架构测试框架,框架识别测试脚本中具有相似性的任务。之后,测试人员根据功能对类似的任务进行函数封装。然后,库存储所有排序后的函数。因此,它促进了代码在不同测试脚本之间的可重用性。
例如,我们可以把登录作为一个公共的函数
接下来就可以在其他地方调用
好处:
- 与“记录和回放”相比,结构化脚本实现了更高级别的代码重用。
- 由于更高的代码重用,自动化脚本的开发成本更低
- 简单的脚本维护
坏处:
- 使用测试库框架编写脚本需要专业的技术知识。
- 需要更多的时间来计划和准备测试脚本。
- 测试数据硬编码在脚本中
数据驱动测试框架
数据驱动的测试框架隔离测试脚本逻辑和测试数据。之后,它在外部存储数据。这里,目标是为测试不同的数据集创建可重用的测试脚本。测试人员可以更改数据以更改测试场景。这确保了代码的可重用性。
例如:
1. 首先先在CSV、Excel文件或者其他数据源创建测试数据列表
2. 编写脚本,登录名和密码与数据源匹配
好处:
- 对测试脚本的更改不会影响测试数据
- 可以使用多个数据集执行测试用例
- 只要更改外部数据文件中的测试数据,就可以执行各种测试场景
坏处:
- 需要更多的时间来计划和准备测试脚本和测试数据
关键字(数据表)驱动测试框架
关键字驱动的测试框架将脚本逻辑从测试数据中分离出来。然后,它在外部存储数据。之后,它将关键字存储在不同的位置。与动作测试GUI相关的关键字是测试脚本的一部分。关键字将自己与对象或操作相关联。因为测试人员可以在不同的测试脚本中使用相同的关键字,所以它提高了可重用性。
一个关键字驱动框架有3个基本组件,即关键字、应用程序映射、组件功能。
- 什么是关键字?
关键字是可以在GUI组件上执行的操作。比如:对于GUI组件文本框,一些关键字(动作)是InputText, VerifyValue, VerifyProperty等。
- 什么是应用程序映射?
应用程序映射为GUI组件提供命名引用。应用程序映射只不过是“对象存储库”
- 什么是组件函数?
组件函数是那些主动操作或查询GUI组件的函数。函数的一个例子是,点击web按钮进行所有错误处理,在web编辑中输入数据进行所有错误处理。组件函数可以依赖于应用程序,也可以独立于应用程序。
例如:
步骤1:创建数据表(不同于在数据驱动框架中创建的测试数据表)。这个数据表包含要在GUI对象上执行的操作和相应的参数(如果有的话)。每一行代表一个测试步骤。
步骤2:以组件函数的形式编写代码。
一旦创建了数据表,只需编写一个程序或一组脚本,读取每个步骤,根据包含Action字段的关键字执行步骤,执行错误检查,并记录所有相关信息。这个程序或脚本集将看起来像下面的伪代码:
优点:
- 提供高的代码可重用性
- 测试工具的独立
- 独立于测试中的应用程序,相同的脚本适用于AUT(有一些限制)
- 测试可以使用或不使用AUT进行设计
缺点:
- 初始投资相当高,只有当应用程序相当大并且测试脚本要维护好几年的时候,才能实现这种好处。
- 创建关键字驱动框架需要很高的自动化专业知识。
混合测试框架
混合测试框架可以减少不同测试框架的缺陷。它通过组合不同框架的部分来利用这些优势,从而提供了灵活性。因此,测试的效率也得到了提高。
比如,登录的脚本如下:
现在您可以在主脚本中调用这个操作,如下所示:
现在您可以在主脚本中调用这个操作,如下所示:
五、测试自动化框架的好处
为什么我们有了自动化测试工具之后还必须需要使用自动化测试框架?因为自动化测试框架可以提供很多好处:
1. 优化的资源
测试框架有助于优化资源。它通过根据组织需要促进不同资源的使用来做到这一点。
例如,为了实现既定的目标,测试自动化框架提供了一组过程。这些流程必须将资源与需求匹配起来。采用的灵活性越高,资源优化就会越好。
2. 增加测试量
测试自动化框架增加了测试量。例如,新的移动设备每隔一天就会出现。不可能对所有对象执行手工测试。即使一家公司成功地做到了这一点,也要花很长时间。但是自动化测试使测试人员能够同时在数千个移动设备上运行测试。
3. 同时测试
测试自动化框架支持同时测试不同类型的设备。当测试脚本被自动化时,所有测试人员需要做的就是在不同的设备上运行它们。由于参数相同,测试人员可以快速生成比较测试报告。
4. 提高速度和可靠性
编写和运行测试对于任何软件公司来说都是非常耗时的。测试自动化框架减少了执行这些活动的时间。假设您正在测试网站的注销功能。如果有多个测试场景,对于每个场景,您都必须手动测试注销功能是否正常工作。但是如果您正在使用一个框架,您可以同时运行所有的场景并在很短的时间内获得测试结果。此外,由于使用了自动化工具,自动化测试更加可靠。这减少了出错的机会。
5. 用更少的时间产出更多的产品
测试自动化减少了同步、本地配置、错误管理和报告生成方面的挑战。自动化脚本最小化了准备和运行测试所花费的时间。随着效率和速度的提高,企业可以在更短的时间内获得更多的产出。
6. 在早期阶段修复bug
测试自动化框架有助于在早期阶段修复bug。你不需要太多的人力来为你执行,这意味着工作时间和费用也减少了。测试自动化工程师可以编写脚本并自动化测试。
7. 远程测试
有了测试自动化框架,就没有必要每天24小时呆在办公场所。例如,您可以在离开之前开始运行一个测试。几小时后你回来时,测试结果就会出来了。此外,你不需要买很多设备,因为你可以远程测试。
8. 可重用的自动化代码
您可以在不同的应用程序中重用测试自动化脚本。假设您的组织的测试人员编写了一些脚本来测试登录功能。您可以对另一个具有登录功能的应用程序使用相同的脚本。
9. 增加ROI
测试自动化框架中涉及的初始投资对许多人来说是令人不快的。但长期投资回报率很高。正如前面所讨论的,测试自动化框架可以节省时间并促进快速交付。它还减少了对更多员工的需求。
例如,如果测试框架是自动化的,那么一个公司就可以测试人员投入到更有价值的事情上,提高ROI。测试自动化工程师可以执行大多数任务,比如配置框架或运行脚本。