软件发布变得比以往任何时候都快。他们正在添加新功能,更快地响应缺陷,尤其是在生产中发现的缺陷,还有什么不是!这导致对自动化测试人员的需求大幅增加,“手动”和“自动化”测试人员之间存在巨大的薪酬差距。此外,自动化测试通过重复测试(例如回归测试)帮助公司节省时间。
如果您不熟悉软件测试或没有机会学习测试自动化,那么本文适合您。因此,事不宜迟,让我们看看我们需要学习什么才能开始使用测试自动化!
将测试自动化视为软件开发
测试自动化应该被视为软件开发的一个组成部分,这意味着它意味着编程知识。这个想法主要是通过敏捷方法推广的,例如 XP(极限编程)。自动化测试不仅涉及单元和集成级别的自动化测试(主要由开发人员完成),还涉及 API 和 UI 自动化。还有其他思想流派,例如全团队质量方法和现代测试原则,它们规定每个人都应该以自己的权利参与测试。软件开发知识对测试自动化有很大帮助,因为(除了编码)自动化中使用了许多技能,就像在“常规”功能开发中一样——比如使用版本控制、创建构建、使用数据库、API、CI/CD 管道、和更多。
选择一种编程语言开始
如果你刚开始学习如何编码,你可能会想从一种语言跳到另一种语言——因为趋势在不断变化。然而,要擅长编程,需要像解决问题的人一样思考,而不是记住特定的语法。因此,您应该在开始时选择一种语言并坚持很长时间,直到您变得非常熟悉为止。在处理 C 系列的高级语言时尤其如此。这是因为这些语言共享许多相似的概念并且具有语法相似性。因此,当您不再是最初开始使用的语言(假设是 Java)的初学者时,学习另一种语言将非常简单——只需习惯语法差异——就像了解一种语言的新方言你已经说得很好了!
学习干净的代码实践和原则
有些人试图学习太多特定的工具、框架和库,给自己带来了太多的负担,即使这不是他们的工作所必需的,因为他们认为这是让自己在不断变化的就业市场中保持相关性的唯一方法. 这可能非常耗费精力和要求;相反,您应该专注于学习和应用广泛适用和普遍适用于许多情况的实践和原则。
所以,你可以做什么:
1、保持自动化代码简单——始终牢记您编写的代码最有可能被其他人使用;尽量保持简单易读,并尽可能避免过度设计。编写易于重构和更改的代码。
2、确保使用有意义的命名约定——自动化测试的名称应该清楚。其他人应该很明显通过阅读名称来破译它的作用。变量和函数名称是显而易见的。为此,请使用 DAMP(描述性和有意义的短语)原则。
3、明智地使用评论——评论可能会有所帮助,但在评论显而易见的事情时,这样的评论只会增加噪音和混乱。此外,评论需要更新和维护,所以除非需要,否则不要为自己创造额外的工作。相反,请在您认为有必要进行额外解释的地方发表评论——例如,您正在测试一个具有许多令人困惑的集成的复杂企业系统。此外,您的测试人员是项目的新手,并且不具备所需的领域知识。
4、SRP——尽可能在测试中使用单一职责原则。这将使调试失败的测试更容易,并简化处理误报/否定。此外,确保每个类、函数等只做一件事——这将使您的自动化代码更易于维护和重构。
5、不断重构是一个永无止境的过程;随着你知识的提高,你会注意到你的代码可以改进的地方。此外,技术的变化将需要代码重构,因此将重构视为您职业生涯中的一个常数。
了解自动化中有用的设计模式
设计模式是有益的,因为它们提供了许多好处:它们是构建代码的绝佳方式,它们是众所周知的,因此您的代码将被其他人阅读,等等。
测试自动化中最著名的方法之一是 POM(页面对象模型),这是一种主要用于 UI 自动化的 OOP 方法,您网站上的页面对应于代码中的一个对象——通常是一个类。
接下来,我们有工厂原则,它涉及一个超类和许多子类。当您事先不知道需要创建什么类型的对象时,它最有用。其他常用的有Facade模式、Singleton和Fluent接口。
学习干净的代码实践和原则
我发现 Robert C. Martin(也被称为 Uncle Bob)已经很好地总结了这些。他是当今 IT 领域最有经验的人之一,他的影响力是巨大的。
学习网络工作原理的基础知识
在这里,我们需要对 Web 技术、HTML、CSS 和 JavaScript 有一些基础知识。我们还应该对 Web 浏览器的工作原理有一个基本的了解。例如,需要了解当他们输入 URL 并在浏览器中按 Enter 时会发生什么。发生这种情况时发送的请求是什么,它们是什么意思?什么是 DNS,它如何适应这个过程?什么是 IP 地址?什么是 HTTP 协议,为什么在我们执行 API 测试时它是必不可少的?此外,还应该通过熟悉 XML 和 JSON 等最常见的格式来了解数据是如何传输的。最后,了解服务器端和客户端之间的区别以及数据如何存储在数据库中——无论是关系数据库(基于表,如 SQL)还是基于文档的非关系数据库,如 MongoDB。
选择一个 UI 自动化工具开始
如果您刚刚开始,那么今天可用的工具数量之多可能会让人不知所措——我们有这么多选择既是福也是祸!但是,如果我们积极地看待它,坚持使用一种工具有其优势。当您学得好时,您将了解具有相似目的的其他工具在功能方面必须具有哪些功能以及某种工具的常见缺点。这种元知识以后将使学习新工具变得更加容易,并且花费更少的时间和精力!
使用 UI 工具时,请考虑它的易用性、支持、是否有活跃的社区、良好的教程、对该特定工具的市场需求等。您经常会注意到,学习一个 UI 工具可能更明智“陈旧而乏味”的工具——采用率高且值得信赖,而不是尚未广泛使用的新热门工具。例如,Selenium 被广泛使用(它的优点和缺点),有据可查,并且有大量的在线教程。尽管如此,Playwright 和 Cypress(比 Selenium 更容易设置,适用于简单的网站,但在处理重定向、iframe 和更改选项卡时存在问题)似乎更有吸引力,但没有广泛使用——尽管它们的采用正在稳步增长——因为尤其是赛普拉斯,因为它在剧作家之前问世。
了解 HTTP 协议以及如何自动化 API 测试
超文本传输协议 (HTTP) 是用于传输超媒体文档(例如 HTML)的应用层协议。它被设计用于浏览器和服务器之间的通信,但它也有其他用途。作为测试人员,您需要了解其基础知识,例如 HTTP 方法(GET、POST、DELETE、PUT 等)、标头、请求和响应以及最常见的状态码。然后,学习使用浏览器中的开发人员工具(网络选项卡)来深入了解正在发送和接收的 HTTP 请求。最后,学习一些 HTTP 客户端工具,例如 Postman,理想情况下是 HTTP 客户端库,例如来自 Apache 的客户端库或诸如 Rest-Assured 之类的工具。
API 测试将使您作为测试人员的生活更轻松,因为它比 UI 自动化具有许多优势,例如更早的测试(您可以在 UI 可用之前测试业务逻辑)。此外,API 测试更快更容易开发和维护;即使在自动化 UI 时,API 测试的知识也会使您受益。
假设您有一个要求用户登录的 UI。执行该测试的前提条件是用户首先登录以进行身份验证并授权访问所请求的资源。由于 UI 测试比低级测试花费更多时间,因此通过登录表单登录用户是不必要的浪费时间。相反,您可以发出 HTTP 请求以获取用户的令牌并继续测试。这样,您将获得相同的结果,但速度要快得多。
熟悉数据库基础知识
学习 SQL(或一些非关系数据库)的基础知识,以便在测试中使用 CRUD(创建、读取、更新、删除)。这将使您能够在自动化中使用数据驱动的方法,即从数据库中获取测试数据,在数据库中存储一些记录(如果测试需要),通过自动化测试更改一些数据,等等。能够访问有效的测试数据并能够使用它,在进行可靠的测试方面发挥着重要作用,因为许多错误都是与数据相关的。
选择一个测试管理工具以便于报告
一个好的测试管理工具甚至可以帮助自动化测试。选择此类工具时,请确保其 API 与报告工具集成。一些最流行的测试管理工具是——TestRail、Xray、Zephyr 等。另一件要考虑的事情是与其他工具的集成——例如,当你运行测试时,你能否获得生成的报告(关于通过、失败和跳过测试)通过 Slack、Teams 等通过电子邮件或发送给您。
始终牢记测试的手动方面
自动化和手动测试齐头并进。为了有效地进行自动化,您还需要成为一名优秀的探索性测试人员,他知道如何深入挖掘您正在测试的系统,以确定在风险覆盖方面作为自动化候选者最有利的场景,并识别是否有回报在自动化它们时进行投资,是值得的。此外,在自动化测试之前,您需要熟悉被测系统以提高您的领域知识。与领域专家进行配对测试在这方面也有很大帮助。
结论
开始自动化可能看起来很可怕和令人生畏,但不要感到紧张并试图一次学习所有东西,你应该分割你的学习并一次攻击一个主题。保持一致、好奇,并始终尝试应用您从阅读博客、查看文档和观看教程中学到的知识。
不要只是复制您所看到的并执行相同的步骤;试着给它你的扭曲;而不是自动化课程讲师正在使用的同一网站,而是尝试不同的网站。当然,这会让你的事情变得更难一些,但这是一个很好的迹象,表明你在困难的时候正在学习。
慢慢来,保持一致,并有长期目标。在 6-12 个月的专注学习中,您可以精通自动化。在那之后,你被聘为初级职位、谈判更好的加薪或获得更高薪水的工作就足够了。
最后,不要被测试自动化吓倒;它不会让你自动化你的工作。如果发生故障并且您会立即收到通知,自动化可以用作绊线或警报。这比从客户那里听到缺陷要好得多。此外,自动化将节省您的一些时间(在最初的开发和设置工作之后)。通过将重复性任务自动化,您将有更多时间用于测试人类创造力意义重大的其他方面。祝您的自动化之旅好运!