本文简要地介绍 STAF/STAX 测试自动化框架,并且展示如何使用它来构建一个框架,在复杂试验台中实现测试自动化和持续集成。
回归测试往往用于确保软件变更不会在软件中引入新的问题或故障。另外,还可以用它来确保您不会重新引入之前修复的错误。如果软件对第三方组件和库有诸多依赖项,比如 XML 处理 API 或 JPA 等数据库提取 API,那么新问题的引入会非常常见。在这些情况下,数据库架构的一个小小的改动就可能会导致难以预测的应用程序行为变更。如果软件本身很复杂,对常见代码段的一个小小的更改都会招致不可预测的副作用。
当需要对某个中间件软件的先前版本或不同平台提供持续支持时,这提高了在维护或开发期间引入问题的概率。在某个数据库中间件版本中有效的补丁或功能可能在不同的版本中带来灾难性的后果。而且在添加功能时,只有中间件的较新版本可用的 API 可能会给使用先前版本的客户端带来损害。在支持不同平台时,要对依赖于命令行接口或脚本的功能进行完全测试。否则不同的行为可能会在 Windows® 和 Linux® 等不同的操作系统中出现。
回归测试针对整体软件,并考虑该软件与其他组件或应用程序的相互依赖性。在开发期间,要专注于正在开发的特定模块或功能。您可以在实现模块或功能时递增式地测试它们,而且有时需要使用存根引用其他尚未实现的功能。如果增量测试结构化良好并且足够独立,以至于您可以在给定环境中(比如必要中间件软件、机器或配置)重复它们,那么您可以在未来的回归测试中重用它们。这一结构及其独立性减少了返工,并改进了测试质量,因为每一段代码在开发时都经过详细审查测试。
当您在一组架构、操作系统和中间件版本上测试开发中的功能时,可以考虑使用自动化增量测试。以针对 Linux、AIX®、Windows 7 和 Windows XP 支持的一个命令行接口为例。在开发期间,在这些操作系统中每个操作系统上执行测试可能都需要花费不少资源和时间。在某些情况下,测试新功能所需的时间超过开发它所需的时间。考虑到许多功能是由不同">开发人员在一个项目中同时开发的,这一情况变得更加麻烦。让这一格局变得更加复杂的是,用于测试的机器数量通常是有限的,即使使用的是虚拟机。测试通常需要一个预配置环境,包括数据库服务器、应用程序服务器,等等。专用于测试的机器越多,更新和配置它们所需的时间就越多。由于自动化增量测试由一个工具在一组环境或试验台中运行,您可以节省在每个环境中手动运行测试所需的时间,从而更好地共享资源。
自动化回归测试可以使用与增量测试一样的试验台。例如,将回归测试设置为一天运行一次之后,无需消耗通常可能用于开发和增量测试的资源。您可以设置冗长的回归测试,让它按照更长的间隔运行,比如在周末运行。
STAF/STAX Framework
软件测试自动化框架 (STAF) 是一个开源框架,包含专门适用于构建自动化解决方案的一组内置服务。这些服务是可重用的组件,提供了 STAF 中的所有功能。每个 STAF 服务提供一组特定功能,比如:
日志记录 文件系统操作 安全性和进程调用 一组请求的定义
其他服务,比如电子邮件服务、FTP 服务和计时器服务,都不是内置的,但可轻松插入框架中。
STAX 服务是一个在 Java 环境中实现的特殊服务,或支持通过 XML 调用其他 STAF 服务的执行引擎。它还提供了以下支持:
并行执行 执行控制的用户定义的粒度 对嵌套测试用例的支持 控制执行时长的能力 在运行时导入模块的能力 对现有 Python 和 Java 模块和包的支持
STAX 定义的 XML 元素能够像编程语言一样运作,包含语言的所有必要元素:
循环 条件 错误处理 函数调用
可以使用元素脚本嵌入 Python 脚本,从而支持更复杂的逻辑和对于定义 Python 模块的访问。
Python 代码由 Jython 运行。Jython 选择使用 Python 编程语言语法,让其在 Java 平台上运行。这样可以实现与 Java 库和其他 Java 应用程序的集成,从而提高 Java 开发人员团队的工作效率。
STAX 的一个有趣特性是,它允许导入包含辅助功能的现有 STAX 文件。该特性改进了自动化代码的组织和代码的重用。
STAF 作为一个守护进程运行,监听来自预配置端口的请求。STAF 服务通过这些请求加以访问,这些请求是所需命令的指令。 Stafcmd 是 STAX 定义的元素,可用于表示一个请求。如 清单 1 所示,一个请求包含:
命令运行的位置 运行它的服务 实际命令
清单 1. 清单 1 一个请求的示例
<stafcmd> <location>'lab01.mydomain.com'</location> <service>'FS'</service> <request>'CREATE DIRECTORY /tmp/CVT_TEMP' </request></stafcmd>
清单 1 中的代码请求在机器 lab01.mydomain.com 上创建目录 /tmp/CVT_TEMP。定义该命令的服务是 ‘FS’(文件系统服务)。如果命令运行位置不是 ‘local’,请求命令的 STAF 实例发送请求到指定位置。这一通信对于调用方来说不明显。一个在本地机器中创建目录的请求拥有相同的语法。惟一的区别在于,由您指定位置 ‘local’,然后 STAF 了解到必须在本地(而非其他机器中)运行命令。