13

自动化回归测试全接触:概念、方法和实践

 3 years ago
source link: http://developer.51cto.com/art/202011/630740.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【51CTO.com快译】众所周知,在软件开发的生命周期中,开发人员往往需要修改已有代码,或将新功能引入目标系统。不过,此类更改可能会通过影响现有功能对系统造成破坏。因此,我们需要执行一系列测试,以验证新的代码对系统不会造成负面影响。这便是回归测试。

在本文中,我们将从回归测试的概念入手,讨论其实施的重要性,以及那些实现自动化测试的方法与优秀实践。

什么是回归测试?

回归测试(https://en.wikipedia.org/wiki/Regression_testing)是一种软件的测试形式,能够涵盖软件系统中的各种功能性和非功能性的元素。我们可以在执行如下操作后,通过它来发现潜在的问题或错误。

  • 部署新的功能
  • 添加新的模块
  • 修复现有缺陷
  • 重构程序代码
  • 更改系统配置
  • 改善应用程序的性能

针对上述任何事件,如果采用手动的方式测试整个系统,显然既费时又费力。开发团队往往希望通过自动化测试的方式,来加快整个工作流程,以实现每修改一次代码,都能执行一系列预先开发好的测试脚本。据此,他们能够在进行连续性回归测试的同时,降低测试的总体成本,减少人为错误,并保持更高的准确性。

为何要使用自动化回归测试?

如前文所述,我们在对每个系统组件进行下一阶段开发之前,需要对其进行彻底的测试,否则就会积累所谓的技术债(technical debt)。这不仅成本高昂,而且对于开发工作流程来说也是危害极大的。

值得注意的是,错误的修复成本会在软件开发的各个阶段呈指数性增长(请参考: https://www.nist.gov/system/files/documents/director/planning/report02-3.pdf ),并且会在产品发布的时候高达30倍以上。下图是此类费用随时间增加的统计图。

BbaMzyv.png!mobile

可见,通过在开发的早期阶段进行彻底的测试,不但可以及时地发现错误,还能够避免纠正错误所带来的高昂成本。这也正是自动化回归测试发挥作用的地方。当然,除了改进错误检测的效率,自动化回归测试还能够为开发工作、及其流程带来如下好处:

  • 更高的测试覆盖范围 - 自动化能够让我们通过运行更多的回归测试,来检查系统的各个方面。显然,这是手动回归测试所无法达到的彻底水平。
  • 更高的测试投资回报率 - 尽管自动化测试有时会引发更高的初期投资,但是从长远来看,由于软件开发和维护是一个连续性的过程,因此自动化回归测试往往可以在可预见的将来,为团队节省大量的时间与金钱,并能收获更大的回报。
  • 更少的人力成本 - 使用自动化测试平台时,团队只需一名QA(质量检测)工程师即可测试脚本。相反,手动回归测试将需要数名专业人员,才能达到相似的效果。因此,自动化大幅减少了回归测试所需的总体时间和人力成本。
  • 增强的稳定性 - 手动回归测试的结果,往往取决于团队中QA专家的专业知识和测试方法。而自动化却能够确保用相同的专业技术,来测试整个系统的方方面面。
  • 重复性 - 自动化回归测试可以按需随时执行,而无需顾及QA团队是否有时间和精力。而手动测试则需要为每个新项目配备足够的QA人员。

如何执行自动化回归测试?

正如执行任何其他类型的自动化软件测试一样,我们需要遵循预定义的测试路线,才能成功地完成回归测试。

正所谓“工欲善其事,必先利其器”,我们在执行自动化回归测试前,首先也是最重要的一步是:选择合适的工具。目前市场上的自动化回归测试工具林林总总,其中比较流行的包括 SeleniumTestCompleteRanorex StudioPerfecto

接着,我们可以按照如下四步来开展自动执行回归测试:

  • 发现和计划 - 首先概述产品将要发布的范围,确定哪些测试用例可能会被包含在回归测试的套件中。
  • 设计和开发 – 在确定测试项目需包含的所有任务后,开始为每个测试用例编写自动化的脚本。
  • 测试执行 – 运行测试,并在执行过程中识别错误。
  • 测试结束 - 最后,记录和提交测试报告,进而执行其他的后续测试。

自动化回归测试的方法

目前,业界通常会使用如下三种方法,来执行自动化回归测试(请参见--https://ieeexplore.ieee.org/document/10189)。您该具体选择哪种方法,则完全取决于开发的优先级、代码库的大小、以及可用在测试中的资源。

  • 全部重新测试 - 有时候,在代码库上执行所有现有的回归测试是一种最佳选择。尽管需要初期大量的投入,但是只要设计合理,就能够发现一些不需要回归的环节。当然,客观地说,该方法对于大型代码库几乎是不可行的。
  • 基于优先级重新测试 – 按照重要性和紧迫性的顺序,执行测试用例。在确定具有最高优先级的测试用例时,往往需要QA专家给出专家意见。而且,优先级测试应涵盖所有关键的代码路径,以发现那些严重的错误。
  • 选择性重新测试 - 您可以选择回归测试套件中的一个子集来执行,而不是重新运行整个测试套件。在后续的回归周期中,您只需执行那些可以在代码库上复用的测试用例,并将过时的用例剔除出去。

此外,您还可以使用混合回归测试技术,即:先执行优先级测试,然后再运行其他必要的测试,以避免遗漏并实现全覆盖。

自动化回归测试的实例

如前所述,我们可以根据对代码库所进行的更改,来采用不同形式的回归测试。有些是在添加新的功能后执行,而有些是在修复了系统中已知错误后执行。下面,让我们来讨论回归测试的一些实际案例:

  • 场景1:假设有一个具有数据库管理功能的应用,其核心功能有三个,即:数据添加、数据保存、以及数据删除。当我们在新版本中,引入允许用户对数据进行修改的“数据更新”功能时,则需要通过执行回归测试,来确保该功能不会影响到既有的“添加”、“保存”和“删除”功能。
  • 场景2:某个系统具有管理员、版主、客户和作者,四个角色模块。如果管理员模块出现了错误,那么就会导致作者使用其凭据,以版主的身份登录到后台系统中。因此,测试团队需要反馈开发团队修复该错误。而在实施了有效修复后,测试团队将再次检查系统,以确保具有修复功效的代码能够正常工作,且不会影响到其他模块与功能(该过程便是回归测试)。

根据上述的场景,我们来讨论其中的登录验证功能,即:用户输入其登录凭据(如用户名和密码),然后单击登录按钮。其中,用于测试此功能的分步实施代码如下:

7n2MVzf.png!mobile

如下代码则展示了当我们对该功能性代码进行测试时,生成的具有登录功能的类:

jIrUzu3.png!mobile

上述代码实为手动回归测试的示例。如果我们使用诸如Perfecto之类的自动化回归测试工具,则无需对测试脚本进行硬编码。我们只需做到:首先,确定可能用到的回归测试,并记录每个测试用例的工作流程。接着,使用Perfecto仪表板对测试方案进行建模。如下图所示,我们可以让Perfecto协助将工作流程转换为测试脚本。

e2EFRv.png!mobile

在工作流程准备就绪后,我们即可执行测试并捕获结果。而在完成测试之后,Perfecto将返回对应的测试通过或失败状态,并为每个执行的命令提供详细的反馈。据此,您可以相继开展分析测试结果,生成报告,以及重新测试更改等工作。

自动执行回归测试的最佳做法

在执行回归测试时,开发团队往往会碰到包括:时间与资源有限,测试时间过长,测试用例增多等各方面的挑战。为了避免“踩坑”,并能够成功地完成自动化回归测试,我在此为您罗列了如下实践建议:

  • 选用可靠的自动化工具,以扩大测试的范围,并利用其自动化的优势。
  • 在整个项目中采用常规化的测试方案。
  • 通过独立可重用的回归测试,以节省时间。
  • 在修改代码库后,应重新运行过往已成功完成的测试。
  • 通过定期更新回归测试包,以确保与更新的产品版本相对应。
  • 为每个新发现的错误编写各种测试。
  • 确保所有集成测试用例都被包含在回归测试的套件中。

希望上述实践经验能够帮助您平滑地开展回归测试,并获得预期的结果。

小结

回归测试是在减少潜在技术债,并改善软件项目维护态势的有效方法。借助自动化测试工具,开发团队不但能够简化测试的整体工作量,并且可以确保产品在交付到生产环境之前的稳定性与代码质量。

原文标题:All You Need To Know About Automating Regression Tests,作者: Dickson Mwendia

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:庞桂玉 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK