软件测试自动化,是一项让计算机代替测试人员进行软件测试的技术。他可以让测试人员从繁琐和重复的测试活动中解脱出来,专心从事有意义的测试设计等活动。如果采用自动比较技术,还可以自动完成测试用例执行结果的判断,从而避免人工比对存在的疏漏问题。设计良好的自动化测试,在某些情况下可以实现“夜间测试”和“无人测试”。在大多数情况下,软件测试自动化可以减少开支,增加有限时间内可执行的测试,在执行相同数量测试时节约测试时间。 软件测试自动化通常借助测试工具进行。测试工具可以进行部分的测试设计、实现、执行和比较的工作。通过运用测试工具,可以达到提高测试效率的目的。所以测试工具的选择和推广使用应该给予重视。部分的测试工具可以实现测试用例的自动生成,但通常的工作方式为人工设计测试用例,使用工具进行用例的执行和比较。 软件测试自动化的设计并不能由工具来完成,必须由测试人员进行手工设计,但是在设计是却必须考虑自动化的特殊要求,否则无法实现利用工具进行用例的自动执行。为此,就必须在测试的设计和内容的组织方面采取一些特殊的方法。 对于软件测试自动化的工作,大多数人都认为是一件非常容易的事。其实,软件测试自动化的工作量非常大,而且也并不是在任何情况下都适用,同时软件测试自动化的设计并不比程序设计简单。• 自动化测试的优点 通过自动化测试,可以使某些任务提高执行效率。除此之外,还有其它优点: ①对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。 ②可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。 ③可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。 ④更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。 ⑤测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。 ⑥测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。 ⑦可以让产品更快面向市场。自动化测试可以缩短测试时间,加快产品开发周期。 ⑧增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。 总之,通过较少的开销获得更彻底的测试,提高软件质量,这是测试自动化的最终目的。 • 自动化测试中常见的问题 在软件测试自动化的实施过程中会遇到许多问题,以下是一些比较普遍的问题: ①不现实的期望。一般来说,业界对于任何新技术的解决方案都深信不疑,认为可以解决面临的所有问题,对于测试工具也不例外。但事实上,如果期望不现实,无论测试工具如何,都满足不了期望。 ②缺乏测试实践经验。如果缺乏测试的实践经验,测试组织差,文档较少或不一致,测试发现缺陷的能力较差,那么首先要做的是改进测试的有效性,而不是改进测试效率。只有手工测试积累到一定程度,才能做好自动化测试。 ③期望自动测试发现大量的新缺陷。测试第一次运行时最有可能发现缺陷。如果测试已经运行,再次运行相同的测试发现新缺陷的概率就小得多。对回归测试而言,再次运行相同的测试只是确保修改是正确的,并不能发现新的问题。 ④安全性错觉。如果自动测试过程没有发现任何缺陷,并不意味着软件没有缺陷。可能由于测试设计的原因导致测试本身就有缺陷。 ⑤自动测试的维护性。当软件修改后,通常也需要修改部分测试,这样必然导致对自动化测试的修改。在进行自动化测试的设计和实现时,需要注意这个问题,防止自动化测试带来的好处被高维护成本所淹没。 ⑥技术问题。商业的测试工具也是软件产品,并不能解决所有问题,通常在某些地方还会有欠缺。测试工具都有适用范围,要很好的利用它,对使用者进行培训是必不可少的。 ⑦组织问题。自动测试实施并不简单,必须有管理支持及组织艺术。• 测试自动化的限制 测试自动化可以带来非常明显的收益,但也有其限制,主要有: 1.不能取代手工测试 2.手工测试比自动测试发现的缺陷更多 3.对测试质量的依赖性极大 4.测试自动化不能提高有效性 5.测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。 6.工具本身并无想像力 另外,人工测试比测试工具更优越的另一个方面是可以处理意外事件。虽然工具也能处理部分异常事件,但是对真正的突发事件和不能由软件解决的问题就无能为力。• 什么是应首先被自动化的测试? 软件测试的自动化过程是一个渐进的过程,并不需要一开始就对所有的测试进行自动化,这通常也是不现实的。如何选择首先被自动化的测试成了最先遇到的问题。 有些测试,完全没有必要进行自动化,因为自动化它们所需的时间比手工运行它们全部的次数所需的时间总和还长。例如,手工运行一个测试要10分钟,而且一般每个月运行1次,那么一年需要120分钟。但如果自动化这测试需要10小时,那么这个测试需要连续不断运行5年才能收回成本。 有些测试,虽然执行的时间不长,但过程繁琐,需要执行的动作非常多。比如,一个运行10分钟的测试,可能需要击键150次,打开4~5个窗口,切换操作。如果将其自动化,可以提高可靠性,也是值得的。 对软件进行的功能性测试,是测试软件系统在做什么。这些测试可以明确的知道应该在什么情况下输入什么,会有什么样的输出。这样的测试是非常容易被自动化的,也能从自动化中获得较大的收益。 对软件进行的性能测试,包括在不同的系统负载下进行的测试。这些测试需要采用工具辅助完成,非常适合进行自动化。 如果在测试中,运行10%的测试需要花费90%的时间,那么将这10%的测试自动化是值得的。 以下列出了选择首先进行自动化时要考虑的因素:
• 工具的选择:创建还是购买 在评估了商业市场后,你可能会发现在你的限制之内没有符合你需求的工具。这时需要考虑是否自行开发自己的工具,还是等待市场上出现满足要求的新工具。 自行开发新工具有以下特点: 1、它将是最合适你的需求的 2、可以在工具中补偿被测软件缺乏的可测试性 3、工具可以假设很了解被测程序,因而减少了实现测试自动化所需的工作 4、在文档、帮助和培训方面可以不用提供很好的支持 5、工具可能具有某些典型的问题,如结构、可扩展性等 6、用户界面不友好 商业工具有以下特点: 1、获得一个指定功能和性能标准的工具的费用可能比自行开发一个工具的成本要低 2、在文档、帮助和培训方面必须提供良好的支持 3、工具通常应该很有吸引力 4、即使使用一个商业工具,可能无法完全避免建立自己的工具 但即使决定自行开发测试工具,也不要试图生产一个可以广泛使用的商业工具。• 自动化脚本之线性脚本 线性脚本是录制手工执行的测试用例得到的脚本。这种脚本包含所有用户的键盘和鼠标输入。如果仅使用线性脚本技术,每个测试用例可以通过脚本完整地被回放。线性脚本中也可能包括比较,比如检查某个窗口是否弹出。 手工运行10分钟的测试用例,可能需要20分钟到2个小时才能完成测试自动化的工作。因为录制的脚本需要维护,尤其是增加部分内容后的维护和测试需要花费很多时间。而且自动化以后的测试执行的时间会大于10分钟。 线性脚本有以下的优点: 1、不需要深入的工作或计划 2、可以加快开始自动化 3、对实际执行操作可以审计跟踪 4、用户不必是编程人员 5、提供良好的(软件或工具)的演示 线性脚本适用于以下情况: 1、演示或培训 2、执行量较少,且环境变化小的测试 3、数据转换,如将数据从Notes数据库中转换到EXCEL表格中 线性脚本有以下缺点: 1、过程繁琐 2、一切依赖于每次捕获的内容 3、测试输入和比较是“捆绑”在脚本中的 4、无共享或重用脚本 5、线性脚本容易受软件变化的影响 6、线性脚本修改代价大,维护成本高 7、非常容易受意外事件的影响,引起整个测试失败• 自动化脚本之结构化脚本 结构化脚本类似于结构化程序设计,含有控制脚本执行的指令。这些指令或为控制结构,或为调用结构。控制结构中包括“顺序”、“循环”和“分支”,和结构化程序设计中的概念相同。调用结构是在一个脚本中调用另外脚本,当子脚本执行完成后再继续运行父脚本。 结构化脚本的优点是健壮性好。也可以通过循环和调用减少工作量。 结构化脚本的缺点是脚本更复杂,而且测试数据仍然“捆绑”在脚本中。 结构化脚本侧重于描述脚本中控制流程的结构化特性。 • 自动化脚本之共享脚本 共享脚本是指脚本可以被多个测试用例使用,一个脚本可以被另外一个脚本调用。这样可以节省生成脚本的时间;当重复任务发生变化时,只需修改一个脚本。 建立共享脚本的时间可能更长,因为需要建立更多的脚本,且每个脚本需要进行适当的修改,达到脚本共享的目的。 共享脚本可以是在不同主机、不同系统之间共享脚本,也可以是在同一主机、同一系统之间共享脚本。 共享脚本的优点有: 1、以较少的开销实现类似的测试 2、维护开销低于线性脚本 3、删除明显的重复 4、可以在脚本中增加更智能的功能 共享脚本的缺点有: 1、需要跟踪更多的脚本,给配置管理带来一定的困难 2、对于每个测试,仍然需要特定的测试脚本,因此维护费用比较高 3、共享脚本通常是针对被测软件的某部分,存在部分脚本不能直接运行 要获得高质量的共享脚本,需要接受一定的训练。在开始编写脚本时,多花些时间进行设计是值得的。通过共享脚本技术,还可以建立脚本库,达到最大程度的共享。由于共享脚本需要被多次使用,所以与脚本相配套的文档更应该引起注意。 共享脚本侧重描述脚本中共享的特性。 • 自动化脚本之数据驱动脚本 数据驱动脚本技术将测试输入存储在独立的数据文件中,而不是绑定在脚本中。执行时是从数据文件而不是从脚本中读入数据。这种方法最大的好处是可以用同一个脚本允许不同的测试。对数据进行修改,也不必修改执行的脚本。 使用数据驱动脚本,可以以较小的开销实现较多的测试用例,这可以通过为一个测试脚本指定不同的测试数据文件达到。将数据文件单独列出,选择合适的数据格式和形式,可将用户的注意力集中到数据的维护和测试上。达到简化数据,减少出错的概率的目的。 数据驱动脚本的优点有: 1、可以快速增加类似的测试 2、测试者增加新测试不必掌握工具脚本语言的技术 3、对第二个及以后类似的测试无额外的维护开销 数据驱动脚本的缺点有: 1、初始建立的开销较大 2、需要专业(编程)支持 3、必须易于管理 • 自动化脚本之关键字驱动脚本 关键字驱动实际上是比较复杂的数据驱动技术的逻辑扩展。将数据文件变成测试用例的描述,用一系列关键字指定要执行的任务。在关键字驱动技术中,假设测试者具有某些被测系统的知识,所以不必告诉测试者如何进行详细的动作,只是说明测试用例做什么,而不是如何做。这样在脚本中使用的是说明性方法和描述性方法。描述性方法将被测软件的知识建立在测试自动化环境中,这种知识包含在支持脚本中。 例如,为完成在网页浏览时输入网址,一般的脚本需要说明在某某窗口的某某控件中输入什么字符;而在关键字驱动脚本中,可以直接是在地址栏中输入网址什么什么;甚至更简单,仅说明输入网址什么什么。 关键字驱动脚本的数量不随测试用例的数量变化,而仅随软件规模而增加。这种脚本还可以实现跨平台的用例共享,只需要更改支持脚本即可。 • 脚本预处理 预处理是一种或多种预编译功能,包括美化器、静态分析和一般替换。脚本的预处理是指脚本在被工具执行前必须进行编译。预处理功能通常需要工具支持,在脚本执行前自动处理。 美化器是一种对脚本格式进行检查的工具,必要时将脚本转换成符合编程规范的要求。可以让脚本编写者更专注于技术性的工作。 静态分析对脚本或表格执行更重要的检查功能,检查脚本中出现的和可能出现的缺陷。测试工具通常可以发现一些如拼写错误或不完整指令等脚本缺陷,这些功能非常有效。静态分析可以检查所有的缺陷和不当之处。类似于程序设计中的PC-Lint和LogiScope的功能。 一般替换也就是宏替换。可以让脚本更明确,易于维护。使用替换时应注意不要执行不必要的替换。在进行调试时,应该注意缺陷可能是存在被替换的部分中,而不是原来的脚本中。 • 自动比较技术 测试验证是检验软件是否产生了正确输出的过程,是通过在测试的实际输出与预期输出(例如,当软件正确执行时的输出)之间完成一次或多次比较来实现的。进行测试自动化工作时,自动比较就成为一个必须的环节。有计划的进行比较会比随意的比较有更高的效率和发现问题的能力。 自动比较的内容可以是多方面的,包括基于磁盘输出的比较,如对数据文件的比较;基于界面输出的比较,如对显示位图的比较;基于多媒体输出的比较,如对声音的比较;还包括其它输出的内容的比较。 比较器可以检测两组数据是否相同,功能较齐全的比较器还可以标识有差异的内容。但比较器并不能告诉用户测试是否通过或失败,需要用户自行判断。 比较可以是简单的比较,仅匹配实际输出与预期输出是否完全相同,这是自动化比较的基础。智能比较是允许用已知的差异来比较实际输出和预期输出。比如,要求比较包含日期信息的输出报表的内容。如果使用简单比较,显然是不行的,因为每次生成报表的日期信息肯定是不同的。这时就需要智能比较,忽略日期的差别,比较其它内容,甚至还可以忽略日期的具体内容,比较日期的格式,要求日期按特定格式输出。智能比较需要使用到较为复杂的比较手段,包括正则表达式的搜索技术、屏蔽的搜索技术等。 |
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。