简介:在一个自动化测试系统中按日程安排一项测试是实现在特定的日期和时间内执行任务的重要组成部分。它不但能够帮助您更有效地使用测试资源,而且能够帮助您监视测试结果。本文介绍了关于这方面一些应当考虑的事项,日程安排子系统的构件的基本情况,它所包含的功能,以及怎样使用 Java 语言开发一个日程安排等等。
向自动化测试添加日程安排的优势与挑战
测试软件、系统硬件,以及不同软件平台之间的防火墙都可以使用测试自动化系统。您可以使用为执行回归测试设计的自动化框架,以创建任务,执行它们,并根据不同的实验资源分析测试结果。这些框架适用于命令行界面以及图形用户界面。自动化系统的一个重要组成部分是安排一项任务的过程。
本文可以让您对自动化系统的结构有一个基本的了解,该系统与日程安排机理集成在一起,以支持您使用日程安排功能来设计和开发一个自动化框架。文中还向您提供了使用 Java 语言开发一个自动化框架的概述。
日程安排中测试自动化的优势
您可以将日程安排看做自动化系统的子系统。在自动化框架中加入日程安排功能,使得您可以安排每日的,每周的,每月的任务,如有需要可以重复安排。您还可以使用日程安排者来选择实验资源来执行测试回归。这减少了人为干预的概率,并在未来指定的时间自动执行。日程安排者可以帮助您管理回归测试的时间与资源,并有助于提高测试的性能,因此提高了成功率。
挑战
● 收集关于执行环境的信息
当您需要资源来执行任务时,得到适当状态的实验室资源通常来说是非常困难的。检入是非常重要的。
● 团队的地理分布
使用自动化系统的团队可能来自于不同的国家。他们的时区与系统的时区可能不同,自动化服务器就是在系统上运行的。每个日程的时间与日期必须与自动化系统的时间保持同步化。
● 飞行时提供需要的信息
有时,需要提供一些额外的信息,例如在执行时,构建和沙箱层次。日程安排者应该能够处理执行期间用户执行的更改。
● 与自动化系统的其他构件联合工作
日程安排是自动化系统的子系统,这样它就可以与自动化系统的其余构件集成了,以产生需要的结果。构件之间交流或者协调不足在测试实验资源中产生严重的硬件问题。
● 满足每一个和所有团队的日程安排需求
每一个团队都有其自己的自动化需求。有些团队可能需要执行日常的任务。挑战在于理解来自所有团队的需求,并开发一种日程安排机理,来处理所有不同的需求。
自动化系统的结构
测试自动化系统有两个主要的构件:
● 用户界面
→ 图形化用户界面
→ 命令行界面
● 测试引擎
图形用户界面(GUI)提供了一种管理测试的简单方法。它有助于创建运行不同实验资源的测试回归,以测试安装在其上的图片。
命令行界面是执行测试的另外一种方法。在这里,用户必须要执行一点更多的操作,以创建和管理其测试和测试回归,因为测试与测试回归的创建与管理需要频繁的用户交流。
测试引擎会接受来自 GUI 或者命令行界面,或者两者的测试与测试回归,并在实验资源上
自动化系统的构件如图1 所示。它包含了用户界面,测试引擎以及测试系统。接下来的章节描述了这些构件的功能
图 1. 一个自动化系统的功能
用户界面
这种界面可以是一种基于网络的 GUI 或者命令行。您可以使用网络技术来开发一个基于网络的界面。对于一个不使用浏览器的程序来说,一个命令行界面起的作用十分有限。作为测试自动化系统的一部分,用户界面发挥着重要的作用。这就是测试自动化开始的地方。不同的用户界面伴随着不同的特性。其中有些界面包含了以团队的格式维护用户工作区域。下面就是用户界面的主要任务:
1、提供一个用户友好性的界面
2、提供一种轻松的方式来创建测试和测试回归
3、为测试提供测试执行环境
4、显示测试结果
5、分配管理的资源
测试引擎
测试引擎就是测试自动化系统的核心,因为它使用不同的实验资源来运行测试。这种类型的软件用于测试软件,硬件,或者一个完整的系统。选择一个合适的测试引擎非常重要。它取决于您想要实现自动化的测试的类型。不同的测试引擎提供了不同的功能。例如,IBM? Rational? Build Forge? 以及开放源 STAX 引擎提供了并发特性以及测试的序列性执行。有时,测试自动化框架包含了测试引擎,它支持框架处理的自动化。测试引擎主要有以下任务:
1、对程序或者图片执行(运行)测试或者测试回归
2、重复测试
3、收集测试结果
4、分析测试结果
5、监视执行结果
6、向测试员发送关于失败信息的电子邮件通知
自动化进程
多个平台的微观开发需要收集来自开发员的源代码,并将代码整合成一个单元。当实验资源安装该单元之后,它需要多种测试来确认它的正确性。这种测试的自动化降低了测试员执行测试所需要的时间,这样他们就可以将更多的注意力放在微观开发上了。
很明显,自动化需要减少手动与测试相交流所需要的时间与工作量。通过运行脚本或者运行命令都可以执行测试。您可以以任何语言来编写脚本。测试引擎应该能够分析这些脚本访问并执行测试。
框架的选择,与测试引擎一起,都是自动化进程的重要部分。测试自动化系统中可以使用多种框架,例如开放源软件测试自动化框架(STAF),或者您可以创建自己的框架。
许多公司通过创建自己的自动化框架和测试引擎,来处理自动化。在您拥有自动化系统的两个构件之后,您可以在自动化进程之中使用它们来执行以下的任务:
1、使用用户界面来创建和管理测试以及测试回归
2、提交测试以在程序或者图片上运行
3、对程序或者图片(测试引擎)执行测试
4、通知测试员需要注意的事项
5、生成和分析测试结果(测试引擎)
6、如果测试失败的话向测试员发送电子邮件
日程安排的自动化系统
带有日程安排功能的自动化系统如图2 所示。
图 2. 日程安排者的自动化系统
它包含了一个或者多个名为安排者的构件。安排者的作用在于识别您想要执行任务的类型。如果它的类型是安排类型的,那么安排者将会指导引擎安排任务;或者,他会让测试引擎直接执行测试。您可以通过用户界面来安排执行。
构建在日程安排功能之上的自动化框架
自动化框架,它包含了日程安排特性,可能需要在一个系统上运行自动化服务器。来自不同团队的用户可能位于不同的地理区域,这使得日程安排的时间也有差异。日程安排者应该能够识别时区差异,并根据用户的请求来安排任务。
自动化框架可以帮助您基于 图3中给出的选项来创建日程安排。如果有需要,您还可以指定安排的日期和时间,并重复日程安排。图3 中描述的安排表安排了日常的任务,并计划到三天之后。它还显示了运行测试的日期。用户界面还提供了安排准备期间选择测试系统和任务的选项(屏幕截图中没有显示出来)。
图 3. 带有日程安排者 UI 的自动化框架
● 空白日程(TimerTask TTask,等待较长的时间)
● 空白日程(TimerTask TTask,等待较长的时间,长时间的重复)
● 空白日程(TimerTask TTask,Date targetTime)
● 空白日程(TimerTask TTask,Date targetTime,长时间重复)
● 空白的 scheduleAtFixedRate(TimerTask TTask,长时间的重复,长时间的重复)
● 空白 scheduleAtFixedRate(TimerTask TTask,Date targetTime,长时间的重复)
创建和删除一条任务
注意:
您可以使用 Java 中的 Timer 类,用以下的方法取消或者甚至删除安排的任务:
● void cancel() // cancel the timer thread
● int purge () // delete the cancelled task from timers queue
拥有日程安排功能的自动化系统的框架
接下来的框架描述就是一种解决方案,您可以使用它来理解自动化框架的操作。正如前面所描述的那样,自动化系统包括用户界面,测试引擎,测试的系统。自动化框架包含了以下的基本构件:
● 用户界面,它可以是基于网络的
● 存储您想要执行任务的数据库
● 一个持续性检查执行任务数据库的进程
● 从以上进程中获取任务的安排者
● 执行日程安排者提供任务的测试引擎
图 5 描述了自动化系统构件之间的完整交流:
用户添加执行的任务,以及安排的日期与时间,和测试的系统。
该信息存储在数据库之中。
daemon 会不断运行进程,以从数据库中获得任务,将其交给日程安排者,然后添加包含系统健康状况测试的信息。
然后日程安排者会将任务交给测试执行引擎,与测试系统相交流。
图 5. 自动化系统构件之间的完整交流
网络框架的其他责任在于得到测试的结果并分析它。日程安排者帮助您管理自动化系统的以下方面:
● 测试回归,它包含了您对测试系统想要执行的任务
● 测试系统
● 如有需要的话,执行测试回归和重复的日期与时间
性能评价
自动化不但能够帮助您更有效地管理花在重复性测试上的时间,而且能够帮助您分析测试的结果。它能让您将更多的注意力放在微观开发上,而不是把大把的时间花在测试上。一旦开发员进行微观开发,那么通过管理和安排回归测试,执行构建的全部测试操作,只不过是一次点击的操作而已。因此,它降低了手动测试期间人为交流和干预的频率。
日程安排功能,在另一方面上,降低了重复测试期间的出错率。图 6 中的图显示了测试系统最新构建全部测试的性能改进。条形图显示了每日,每周,每月进行的测试,测试自动化框架的日程安排功能能够帮助您实现全部这些功能。
图 6. 性能评价条形图
为了进一步深入研究 Rational 软件为测试和自动化提供的功能,您可以查看其他相关资料。
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/