测试是软件开发过程中的一个关键部分,它允许开发人员验证软件功能、测试性能、并确定哪些缺陷需要纠正。但是,随着软件项目变得日益复杂,传统的手工质量保证测试(QA)已经无法满足开发人员的时间框架需求。因此,我们越来越多的求助于自动化测试工具和工作流,以加快测试方法,同时有效的保证QA过程中的完整性和一致性。
一、为什么自动化测试很重要
自动化软件测试既是一种工具,也是一种过程
自动化测试工具提供了在软件产品上执行测试所需的机制和功能。这些测试可以有所不同,可以从简单的脚本到详细的数据集和复杂的行为模拟。所有的测试只有一个目的:验证软件提供了预期的功能,并在可接受的参数范围内按照预期的方式运行。现在,越来越多的测试工具允许创建定制的测试,以适应软件的特定需求,例如Selenium、Appium、Cucumber等。
从过程的角度来看,自动化测试是将工具和操作添加到常规的软件开发工作流中。例如,交付给存储库的新构建可以使用一个或多个规定的工具自动接受测试方案。测试可以在非工作时间实现,几乎不需要开发人员的干预。与以前的测试运行相比,自动化测试结果被仔细的记录下来,并交付给开发人员进行评审。这种流程对于DevOps环境来说尤其重要,因为DevOps环境就依赖于CI/CD管道。
虽然方便,但自动化测试并没有取代手工QA测试。自动化测试可以更快、更准确,但一个实际的、可维护的自动化测试计划需要花费大量的时间和精力。开发人员必须了解软件需求,规划测试用例,设置测试优先级,并确保创建的任何测试都将产生准确和有意义的结果。
所以,在整个开发周期中,自动化测试和手工测试常常在不同程度上一起执行。
二、自动化测试的优点
自动化测试主要的优点在于:准确性、可报告、范围广、效率高和可重用性。
理想状况下,自动化测试消除了大部分手动交互。与此同时,在测试数量上也远远超过了人工测试人员所能处理的数量。并且,一旦创建了测试,它的脚本、数据、工作流和其他组件就可以在未来的构建或在其他项目中重用。
最后,自动化测试可不会遗漏日志记录和报告,这样可以确保每个结果都被记录下来并分类,以便开发人员进行评审。
三、自动化测试面临的挑战
自动化测试具有无可比拟的优势,但这项技术也带来了一些挑战。
首先,自动化不是完全自动的。它仅仅实现了工具、服务、平台和框架层次的自动,最后仍需要开发人员来学习并决定测试需求和标准,然后创建详细的测试脚本来工作流来执行。
其次,软件测试归根结底还是需要交互和结果收集的,而这是自动化工具所无法做到的。相类似的,某些很少使用的功能可能不值得投资自动化,这就使得人工QA测试仍占有一席之地。
当自动化测试和人工QA测试一起部署时,它们各有各的优势。例如,自动化测试最适合烟雾测试和回归测试任务。这种分担责任的最大挑战是:面对不断变化的优先事项,保持自动化和人工努力的组织和有效性。
四、自动化测试的类型
回归测试
本质上来说,回归测试是确保新代码不会破坏任何现有代码的艺术。当添加新代码或更改现有代码时,回归测试会验证其他代码或模块是否按预期继续运行。
单元测试
单元测试通常检测应用程序代码库的特定部分,如子例程或模块。单元测试通常是测试驱动开发战略的一部分,成功就意味着一个预期的功能或特性已经按计划或要求在软件需求说明中出现。
烟雾测试
烟雾测试通常是简单的go/no-go测试,旨在确保应用程序在新构建完成时仍能正常运行。例如,盐雾测试可以确定应用程序是否启动、界面是否打开、按钮是否工作、对话是否进行等等。如果烟雾测试失败,应用程序可能过于脆弱,无法进行进一步的测试。
API和集成测试
API测试用于验证应用程序API的请求和响应之间的交互。API测试不仅寻找合理的请求和响应,它还检查不寻常或边缘的情况,并评估潜在的问题与延迟,安全性和优雅的错误处理。
UI和I/O测试
UI测试可能是一个复杂的和高度详细的工作,可能包含的按钮序列和命令行变化的数量是十分惊人的。IO测试基本上是将输入数据转换为输出数据。例如,打算执行计算并导出输出的应用程序可以使用示例数据集并检查输出,以确保底层处理功能正确。
安全性和漏洞测试
安全性测试有助于确保应用程序及其组成数据在出现作物和故意尝试未经授权访问时保持安全,它可以检测授权行为以及常见的攻击载体,例如SQL注入和跨网站脚本。漏洞测试一般在执行生成之前在代码库上执行。这将检查代码是否存在已知的缺陷,如子例程中缺少错误处理或不安全的配置设置。
性能测试
性能测试旨在测量应用程序的关键性能指标,这些指标可以包含计算负载、流量级别和可伸缩性。实际上,性能测试旨在模拟真实环境,通常会将应用程序推到超出其需求的状态。
验收测试
软件开发经常使用的是SRS(softwarerequirementsspecification),SRS包含验收标准,其中概述了应用程序的预期特性和基础功能。
五、如何执行?
选择采用自动化软件测试的组织通常会纠结于范围:如果确切的定义什么是自动化测试已经什么类型的测试需要自动化。
首先,任何自动化的目标都是减少构建产品和执行活动所需的成本和时间,同时保持或提高产品的质量。这个概念应该知道组织实现所有自动化的软件测试。
其次一些体积大、范围窄的测试活动可能并不适合自动化。一个常见的敏捷测试自动化金字塔以测试驱动开发单元的形式解释了这一点。在这种测试中,一小段代码被重复测试,有时甚至一天测试好几次。而且,这种测试需要大量的主观意见或标准,这种规则是无法轻易被编纂进自动化流程中的。一个常见的例子是GUI测试,脚本可以测试UI的按钮和其他物理元素,但不能确定UI是否“看起来不错”。
但成功的自动化测试需要仔细考虑更广泛的测试策略。例如:并不是每个测试都需要自动化,或者值得投资自动化工具。尤其是当测试是一次性事件时。
另外,请密切注意测试的版本控制。新的构建通常需要新的测试,并且保持对对版本的控制,这是至关重要的一点。实际上,测试应该像其他代码库一样遵循相同的版本控制。
即使使用最好的工具和策略,也不要期望软件项目中的每个测试需求都能完全自动化,人员也是流程中的关键部分。在实现自动化测试时,尽可能的采用支持广泛功能和场景的工具或平台,为了最小化学习曲线,还要避免在测试脚本或其他编码中使用专有语言。理想情况下,测试工具应该支持通用编程语言,如Ruby、Python或Java等。
最后,如果不讨论测试自动化维护,采用自动化软件测试是不完整的。没有单一的方法来实现这样的维护,但新兴工具总能带给我们惊喜。像EggplantFunctional这样的工具使用可视化模型,因此测试人员只需要最少的建模和代码知识就可以使用它们。事实上,在测试创建和实现的过程中,通常会使用适应各种团队成员的过程和策略来选择和增强工具。
六、自动化测试框架
自动化测试不是在真空中进行的。自动化测试工具的选择和实现不足以完全交付结果,成功的测试自动化要求仔细
转载请注明:http://www.0431gb208.com/sjslczl/3615.html