根据《The Newstack》报道:软件测试平均消耗企业应用预算的30-40%。如果你参与了软件开发过程,那么你就会明白软件测试的重要性。如果bug在早期被发现,修复的成本无论是从金钱还是时间来考量,都会更低。
随着软件开发项目的不断扩展,它们往往会变得更加复杂,随着项目开发周期变得越来越短,依靠手工测试来跟上进度可能会很有挑战性,所以越来越多的公司选择了自动化测试。因为这能够让他们在合理的时间范围内达到测试目的。
但是什么是自动化测试,为什么它很重要?这是我们将在本指南中讨论的内容。
自动化测试有什么好处?
执行自动化测试的主要目的是减少构建产品所需的成本和时间,同时确保产品构建达到高标准。
来源:XBOSoft
通过自动化测试,自动化工具和操作被添加到软件开发流程中。这样不仅速度更快,而且覆盖范围更广。如果测试是自动化的,那么每次都执行相同的测试,意味着你可以更快地找出更多的bug。自动化测试还可以出具更好的测试报告,最终,它在整个过程中节省了时间和费用。
如果自动化测试的结果是可以接受的,那么就部署软件。如果没有,软件就会返回给开发人员,由他们进行必要的调整。假设有一个web应用程序在chrome浏览器上运行得很好,但是在旧版本的chrome浏览器上打开时,这些元素会现了故障。你可以利用Selenium测试自动化来识别所有的浏览器及其历史版本,在此基础上你可以重新编写代码。
我们应该用自动化测试完全取代手工测试吗?
随着自动化测试的实现,手工测试将会消失,这是IT行业的最大神话之一。然而,手工测试并没有消亡,至少在未来几年内不会消亡。自动化测试的主要目的是通过处理重复的测试用例来帮助减轻测试人员的带宽,这样手工测试人员就可以提出更独特的测试场景。另外,有一些特定类型的测试用例不能通过自动化测试来测试。例如,如果你的测试脚本与验证码有关,那么使用自动化测试是不可取的。
让我们看另一个例子。假设你正在开发一个web应用程序,你想要测试的特性之一基于用户的输入返回数据,比如根据用户的活动显示在仪表板上的值,你可以通过自动化测试确定度量标准是否被正确计算。但是,你不能确定的是对于人类用户来说,仪表板是否具有视觉吸引力和直观性。你需要注意QA测试人员的细节。因此,在需要借助人工智能来测试web应用程序时,仍然需要手动测试。
我们还必须记住,自动化测试并不是自动的。开发人员在确定所需的标准集之后仍然创建测试脚本和工作流程。这些测试可能被重复使用,但仅用于共享相同标准和需求的软件。
自动化测试和手工测试都有它们的优点。关键是确定每个方面的哪个方面最适合你的软件,并相应地使用它们。
自动化测试的类型
自动化测试不是指单一的测试。有多种测试类型可以用来检查软件的性能、安全性和其他方面。以下是最常见测试类型的概述:
回归测试
这些确保现有代码或模块继续按预期运行,即使添加了新代码。在每次构建之后,通常会重复回归测试。
冒烟测试
也称为构建验证测试,冒烟测试用于检查应用程序最重要的特性或功能是否按预期运行。如果应用程序没有通过冒烟测试,它将被返回给开发人员进行调整。
跨浏览器测试
这些测试确保你的web应用程序在不同的浏览器上运行良好。由于不同的浏览器有不同的搜索引擎,它们之间可能会有一些差异,因为某些浏览器可能不支持某些元素。多亏了像Selenium这样的开源自动化测试框架,它使得自动化浏览器测试变得更加容易,为网络测试人员节省了大量的时间和精力。使用Selenium自动化测试测试人员能够确保网站在所有浏览器、浏览器版本和操作系统上完美呈现。
响应测试
除了在不同的浏览器上测试之外,你还需要确保你的网站能在不同的移动设备上运行。由于每个移动设备都有不同的视图端口,因此你需要确保你网站上的内容响应迅速,并在不同的移动视图端口上进行适当调整。现在,你的自动化测试脚本无法判断内容是否按照设计呈现。然而,使用一个开源的自动化测试框架,比如Selenium,你可以收集不同屏幕分辨率下你的网站的整页截图,然后你可以自己轻松地比较它们。
用户界面测试
这用户界面测试表示应用程序的前端。这是产品中最难测试的部分,因为用户输入变化很大。尽管用户界面可以像命令行界面一样简单,但用户界面测试中可能出现的按键序列或命令行变化可能很大。
输入/输出测试
这与用户界面测试相关联,并检查应用程序是否正确地将输入数据转换为输出数据。例如,你可以使用样本数据集来检查应用程序是否旨在执行计算,并以应有的方式导出输出函数。
单元测试
这些评估软件平台的单个单元。一个单元是任何软件中最小的可测试部分,通常只有一个或很少的输入,它通常还会导出一个输出。
API测试
API 测试有助于验证应用编程接口中请求和响应的交互。这些可以涉及各种端点,包括数据库、大型机、用户界面和网络服务。
集成测试
在集成测试中,所有的单元被合并,所有的单元被一起测试。进行这些测试是为了确保当不同的单元相互作用并且应用程序按预期工作时没有bug。
验收测试
这些是确保项目完成的测试。它们很难自动化,所以它们通常被保留在项目开发周期的最后阶段。
性能测试
这些评估应用程序在压力下的性能。这些测试的结果是添加限制或警告以防止意外问题的基础。
随机性测试
在随机性测试中,主要的想法是看看当你提供随机输入时,web应用程序是否会崩溃。
在测试软件时,你可以选择以分层的方式或快速连续的方式使用这些测试中的一个或多个。有意义的方法取决于需要检查的应用程序问题。在这里,信息技术团队需要确定哪些测试需要自动化,哪些不需要。
执行自动化测试的策略
执行自动化测试的主要目的是减少构建产品所需的成本和时间,同时确保产品构建达到高标准。在决定自动化哪些测试时,企业应该注意哪种方法将产生最高的投资回报。
迈克·科恩的敏捷自动化测试金字塔可以帮助建立一个实现自动化测试的好策略:
来源:Search Software Equality
传统测试旨在寻找bug。在传统的测试场景中,开发人员编写代码来实现特性,然后QA测试人员检查要修复的bug。
然而,通过敏捷测试——如上面的金字塔所示——你有了一个更坚实的基础,因为大部分测试是在单元级的自动化测试中完成的。你在金字塔上爬得越高,你需要运行的测试就越少。
敏捷测试系统告诉我们,测试套件应该包括编写许多小而快速的单元测试。此外,为了对你的web应用程序进行端到端测试,还需要进行一些高级别的测试。通过进行敏捷测试,不是寻找bug,实际上是避免了bug的产生!
自动化测试框架
仅仅决定什么时候自动化,什么时候不自动化是不够的。对于一个好的自动化策略,确定测试执行环境中涉及的指导方针、报告、过程和工作流同样重要。你使用的自动化测试框架也很重要。
除了定义你可用的资源、报告的方式以及创建测试所涉及的工具和语言之外,你的自动化测试框架还应该优化这些测试,以便将人工干预的需求降到最低。
你的自动化测试框架旨在帮助开发人员和测试人员更有效地工作。你需要一个优化的系统,使他们能够在项目的每个阶段轻松地创建、执行和报告。
Selenium提供了很多自动化测试框架,几乎在所有的主要编程语言上,你可以根据你的需求和团队对Selenium自动化测试的理解来使用它们。
选择正确的自动化测试工具
选择自动化工具需要仔细考虑,以确保效率和有效性。你应该首先从许多可用的工具中检查哪些工具测试与你的产品相关的特定问题。一些工具针对特定问题进行测试,而其他工具则作为一体化解决方案进行推广。使用一个工具来解决多个问题当然更有效,但前提是它必须做到彻底。
你的自动化测试工具要适合操作系统的现有开发框架。此外,它应该与软件开发工作流程中的其他工具集成,理想情况下,它还需要支持用于自动化测试的开发人员本地编程语言,如Python或Java。
自动化测试的未来
自动化测试领域是一个不断发展的领域,人工智能和日益复杂的机器学习算法的使用促进它的发展。这使得相关工具能够在未来专注于与软件测试最相关的领域,并解放开发人员,减少开发人员的工作量,提升工作效率。人工智能的发展还能够让越来越多的流程在未来实现自动化。
我们也很有可能看到机器人过程自动化(RPA)的巨大进步。RPA技术使用人工智能来模拟潜在的用户动作,从而有效地自动化测试过程的另一个步骤,与此同时,RPA在低代码软件开发平台中也使用得越来越频繁。
来源:Hackernoon
这些技术——RPA、人工智能、低代码编程,甚至自动化测试本身——都还处于相对初级的发展阶段。随着技术以前所未有的速度发展,很难预测软件开发的未来。正是这些无限的可能性使得软件自动化测试领域更加令人兴奋。
总结
在本文中,我们探讨了自动化测试的重要性,尽管自动化测试正在兴起,并且在减少停机时间和成本方面发挥着重要作用,但它永远不能取代手工测试的复杂性。因而认识到什么需要自动化,什么不需要自动化是很重要的。在执行Selenium自动化测试时要注意的重要一点是,它支持许多编程语言和许多框架,这让根据团队技能集和易用性采用不同的框架变得很容易。
作者:佚名