【.com快译】如今,软件测试人员和利益相关者都已经意识到,实施测试自动化框架对于软件项目的成功至关重要。既可以提高测试效率,又可以减少人工干预的工作量。在本文中,我们将深入探讨真正的测试自动化框架是什么、自动化脚本如何工作以及此类框架如何在测试期间为团队提供竞争优势。定义测试自动化在任何行业中,自动化通常被解释为通过智能算法在很少或没有人为干预的情况下实现各种过程的自动化。在软件行业中,测试自动化意味着使用授权或开源版本的自动化工具对软件应用程序执行单独的测试。从技术上讲,测试自动化框架是一组自定义交互式组件,可帮助执行脚本测试并全面报告测试结果。为了成功构建自动化框架,软件质量保证专家必须通过综合考虑和设计来控制和监控整个测试过程并提高结果的准确性。同时,那些设计良好的自动化框架也可以让测试人员以实用和简化的方式进行各种自动化测试。通常,我们可以根据自动化需求的不同目标来选择和创建以下不同的框架:environments中提供测试套件,实现分布式测试,最后生成报告。最典型的例子就是Selenium自动化框架。该框架的主要组件是WebDriver。作为一个基于Web的浏览器插件,该组件可用于在Web浏览器中控制和操作应用程序的DOM模型。此外,Selenium自动化框架还附带了各种有用的编码库,以及支持记录回放的工具。Serenity是另一个自动化工具框架。它围绕Selenium网络驱动程序构建了一个加速器。为了加快测试自动化实施过程,Serenity还可以将特定组件与社区的其他工具相结合。除了以上两个工具,业界还有TestComplete、RanorexHPQTP等工具。作为已部署的预构建框架,它们都具有用户行为模拟器、报告和脚本IDE等功能。面向项目的框架此类框架的定制主要用于自动化特定的应用项目。项目特定的框架可以支持某些目标应用程序的测试自动化要求,也可以由开源库构建的组件驱动。这样的框架围绕被测系统(SUT)创建了一个友好的测试环境来运行和覆盖各种基本功能。其中包括:部署和运行开发的应用程序,通过包装器(Wrapper)的控制简化编码,执行测试用例,输出测试结果报告。项目特定的框架还应该传递组件以支持在不同操作系统和浏览器上跨多个云环境进行测试。关键字驱动的框架这里有一些框架旨在为开发人员和测试人员提供更少的代码体验。应用于代码的关键字集(例如:Login、NavigateToPage、Click和TypeText)将作为关键字存储库安装在代码库中。测试人员可以根据给定的关键字,在编写的地方引用相应的脚本,以电子表格的形式传送给关键字解释器进行执行和测试。因此,对于不太熟练的人来说,他们可以很容易地编写和理解各种自动化脚本。一个理想的测试自动化框架的主要组成部分如果你想实现一个强大的、高性能的测试自动化框架,无论你使用开源还是商业框架,你都必须包含一些核心组件。它们是:1.测试库a)单元测试您需要使用单元测试库来:通过特定的形式注释(例如@Test或[Test])定义正在使用的测试方法。执行可能影响自动化测试最终结果的断言。运行简单直接的测试。无论是通过命令行、IDE、专用工具还是CI(持续集成)系统运行测试,都需要保证单元测试能够以直观的方式运行,并提供相应的单元测试库。一般来说,单元测试库可以支持几乎所有的编程语言。其中包括:JUnit和TestNGforJava。.Net的NUnit和MSTest。Python的单元测试(以前称为PyUnit)。b)集成和端到端测试在进行集成和端到端测试自动化时,我们经常需要检查现有测试库提供的各种功能。为了消除不必要的编码负担,那些由应用程序UI驱动的API级测试需要通过组件轻松地与被测应用程序进行交互。因此,我们不能只专注于编码:连接到应用程序。发送各种请求。接收各种结果响应。本环节涉及到的重要测试库有:Selenium(主流语言都可以)。量角器(特定于JavaScript)。空手道DSL(Java特定的API级集成测试,参见:https://github.com/intuit/karate)c)行为驱动开发(Behavior-DrivenDevelopment,BDD)BDD特定的测试库通常使用行为规范进行为此,各种可执行规范以可执行代码的形式创建。虽然它们不能像测试工具那样直接与被测应用交互,但我们可以将不同的功能和预期行为场景转化为代码。借助对BDD流程的支持,我们可以创建与自动化测试的范围和意图一致的实时文档。下面是一个典型的BDD库:Cucumber(主流语言都可以)。Jasmine(特定于JavaScript)。SpecFlow(.Net特定)。2.测试数据管理在软件测试自动化和测试创建过程中,我们面临的最大挑战是如何用好测试数据管理系统。因此,随着自动化测试数量的增加,我们需要能够为特定的测试提供可用的测试数据。此外,我们的自动化框架需要提供必要的措施来根据需要输入、创建并最终清理测试数据。通常的做法是使用一套合适的模拟工具,使数据更加简化、清晰和易于处理。3.模拟、存根(Stub)和虚拟化在研究自动化测试的解决方案时,您可能会遇到以下情况:您需要将模块与单元测试中连接的组件隔离开来。需要处理应用程序集成或端到端测试中常见的繁琐依赖关系。不管以上情况,在开发自动化测试框架的过程中,都需要创建模拟连接组件行为模式,存根(参见:https://www.infoq.com/articles/stubbing-mocking-service-virtualization-差异),并选择实用的虚拟化工具。实现模型的常用机制除了上面讨论的自动化框架组件之外,还有一些实用的机制可以帮助我们创建、使用和维护各种自动化测试,包括:Wrapper方法:在使用SeleniumWebDriver组件时,我们可以处理各种错误通过创建自定义包装器。因此,在创建可用于SeleniumAPI调用的自定义包装器后,您将能够更好地处理各种超时、异常和失败报告,从而可以将更多精力放在自动化测试本身。抽象方法:抽象机制代表提高了可读性并淡化了冗余的实现细节。例如:在创建SeleniumWebDriver测试时,我们可以使用页面对象来发现诸如用户输入凭据或单击页面某处等操作。同时,我们通过跳过页面中的某个元素等方式达到高级测试的目的。此外,此类方法适用于许多类似的应用程序和自动化测试场景。测试结果报告当为“如何将测试结果报告到自动化框架中”这个问题选择合适的库或机制时,您应该牢记阅读和查看此类报告的目标受众。这里需要注意以下几个方面:Junit、TestNG等单元测试框架生成的报告主要针对CI(持续集成)服务器等接收系统。这些系统最终解释结果并以其他软件可以使用的XML格式呈现它们。如果您需要生成更具可读性的报告,请考虑与单元测试框架兼容的商业工具,例如Junit的UFTPro、NUnit和TestNG。当然也可以使用ExtentReports等第三方库输出饼图、图表、图片等具有直观描述的报表格式。CI平台为了以更快、更一致的方式测试应用程序,持续集成(CI)平台可帮助您定期构建软件并为新版本运行测试。在开发和部署新功能以及更新现有功能时,CI方法使开发人员和利益相关者有机会收到有关应用程序质量的定期反馈和更快的响应。目前TeamCity、CircleCI、Jenkins、AtlassianBamboo等都是优质的CI平台。源代码管理类似于手动测试,而自动化测试也涉及编写和存储源代码版本。每个开发公司都会使用一套源代码和版本控制系统来保存和保护他们的源代码。目前,以Git、Mercurial、Subversion、TFS为代表的源代码管理系统,不仅可以方便地管理生产环境中的系统代码,还可以进一步完善自动化测试。创建依赖项管理器的主要目的是协助收集和管理自动化软件解决方案功能中使用的现有依赖项和库的过程。其中,Maven和Gradle等工具可以管理依赖关系,从源代码和支持库协助开发自动化软件,并运行测试。此外,其他业界常见的依赖管理工具还有:Ant、npm、NuGet。在框架的建立和实施过程中,我们通常可以通过以下方法来规划和实施自动化测试方案。从客户的角度探索自动化的实际适用性,即:从产品的界面和外观构建测试,发现使用中的不足。密切关注被测系统使用的技术,通过模拟用户的真实行为,采用合适的测试自动化工具。建议采用基于阶段的实施方法。其中,每个阶段优先交付自动化测试脚本。同时,我们也可以添加各种框架功能,让各种脚本按时执行。在启动软件测试自动化之前,我们需要提前计算和预估实施后的投资回报率(ROI)、概念验证(conceptproof)、运行手动回归或冒烟测试的时间,以及每个版本的发布周期。如果我们能够仔细规划和执行上述测试自动化框架的流程,那么整个软件开发和测试环境将获得以下好处:最少的时间和最大的收益:通过构建可行的测试自动化框架和脚本,我们将能够最大限度地减少编写和运行测试用例所花费的时间,从而在更短的时间内获得更大的输出。可以说,有了一个好的自动化框架,我们就可以解决诸如:同步问题、错误管理、本地配置、报告生成和解释等难题。可重用和可读的自动化代码:各种现有的组件库代码不仅可以保持可读性并且可以随着时间的推移重复使用,而且还使相关任务(例如:报告、同步和故障排除)变得更加容易。易于访问和实施。资源优化:自动化系统的灵活性在很大程度上决定了自动化测试的效率、各组件团队的协作能力,以及企业能否从资源优化和知识共享中获益。总结在当今快节奏的软件开发生态系统中,自动化测试和脚本编写在软件测试周期的效率和覆盖范围方面发挥着不可或缺的作用。当然,这些都离不开设计良好的框架和基本的组件策略。我们可以从最小的开始,通过迭代测试和改进,避免在测试自动化的后期阶段发生冲突或被迫妥协。希望以上关于测试自动化框架的讨论能够对软件测试人员在执行测试项目时有所帮助。原标题:TheABCofTestAutomationFrameworks,作者:MitulMakadia
