# 为什么测试人员学习测试自动化(仍然)如此困难
作为测试自动化顾问和技术培训师,我帮助过许多测试人员在测试自动化领域迈出了第一步或 下一步。我见过许多测试人员从测试自动化新手成长为该领域经验丰富的老手。但是,我也看到他们中的很多人都在挣扎。
以下是这些斗争的一些根本原因,以及我关于如何克服它们并能够真正精通测试自动化的建议。
测试自动化绝对需要软件开发技能
俗话说,测试自动化就是软件开发。创建可靠、可维护且可扩展的测试自动化解决方案需要良好的软件开发技能,这意味着测试自动化工程师应该很好地掌握编写软件所需的内容。
这不仅意味着您应该能够使用 Java、C# 或 Python 等语言编写代码,还意味着您应该了解 SOLID 等软件开发模式并能够应用面向对象的四大支柱进行软件开发包括(封装、继承、多态和抽象)。
问题在于理解这些原则、能够应用它们以及知道何时和何时不应用它们都需要时间。并且不要被低代码工具供应商声称您不需要成为开发人员即可使用他们的软件所迷惑。这些工具通常只不过是代码之上的抽象层。
虽然这类工具没有任何问题(有一些很棒的工具),但使用它们并不能免除您应用通用软件开发原则和模式的责任。忽略此建议的后果需要你自己承担。最终会把自己逼到一个角落,要处理大量难以维护的低代码自动化。
我的建议: 如果您想在测试自动化方面做得更好,请学习(面向对象)软件开发的基础知识,以帮助您制定更好的测试自动化解决方案。以下是一些很好的资源,可以帮助您:
- 计算机科学导论(CS50),来自哈佛大学
- “将面向对象的编程原则应用于测试自动化设计”,作者:Angie Jones
- SOLID 原则的可靠指南,作者:Sam Millington
仅拥有一种工具、库或语言的经验是不够的
一旦你知道如何很好地运用你的工具或语言,还有更多的事情要做。正如木匠不能只用锤子搭建桌子一样,如果你只知道如何使用单一工具、库或编程语言,你也不能成为一名多才多艺的测试自动化工程师。您需要了解各种这些工具,才能知道它们中的哪一个(或它们的哪个组合)是解决给定问题的最佳选择。
这些知识超出了测试自动化工具的领域。为了让您的测试经常有效地运行和使用,您可能还需要了解一两件事,使它们能够像这样运行。其中包括版本控制系统、持续集成协调器和模拟工具等等
我的建议: 虽然知道如何正确处理特定工具是一个好的开始(同样,这包括知道如何在这样做时应用良好的编程实践),但至少要掌握以下每个类别中的一个工具:
- 单元测试框架(Java 的 JUnit 或 TestNG,C# 的 NUnit 或 MSTest,Python 的 pytest 或 unittest 等)
- API 测试库(REST Assured for Java, RestSharp for C#, requests for Python, etc.)
- UI 测试库(Selenium、Cypress、Playwright、WebDriverIO 等)
- 用于单元测试的模拟库(用于 Java 的 Mockito、用于 C# 的 Moq、用于 Python 的模拟等)
- 用于集成测试的模拟库(WireMock、Hoverfly 等)
- 版本控制系统(Git 是你最好的选择)
- CI 编排器(Jenkins、GitLab、Azure、DevOps 等)
这是一个很长的清单,但现实是没有简洁的测试自动化成功的道路。我最好的建议是不仅要更多地了解工具本身,还要了解工具背后的原理(它是做什么的?它是如何工作的?它在更广泛的测试自动化范围中的位置是什么?),因为这使得选择开发新工具(甚至是新编程语言中的类似工具)要容易得多。
迈出一小步,你最终会到达那里。即使是一千英里的旅程也始于一步。
学习材料通常只涵盖基础知识
当您开始测试自动化之旅时,或者任何时候您想学习一种新工具或语言时,都有大量内容可以帮助您入门。如果您首选的学习方法是观看视频,这并不重要;阅读教程、博客文章或书籍;或参加现场培训课程。一定会有一些东西指导您迈出第一步。
但是,大部分材料都没有超出基础知识,现实生活中的情况往往看起来不像您在文章或培训课程中会遇到的情况。内容制作者和培训师经常故意这样做;他们试图教授一个概念或原则,当示例、练习或业务案例很小时,这会更容易完成。当您尝试将学到的知识应用到现实生活中时,您可能很难只见树木不见森林。您每天必须使用的项目或测试自动化套件可能比您在学习过程中使用的要大得多。
我的建议: 如果问题很大,就把它缩小。将您面临的挑战分解为微小的步骤,并一一完成。在进行下一步之前,请确保您已成功完成一个步骤。不要害怕向更有经验的同事寻求帮助或审查,不仅要尝试了解完成某个步骤后某事是如何完成的,还要了解该步骤如何对整体解决方案做出贡献。没有人希望您从一开始就成为专家。
您可能会遇到这样的情况:很难获得经验丰富的同事的时间和注意力。高级自动化工程师很少,并且通常有很多工作要做,开发人员也是如此(不要忘记他们通常也可以帮助您)。如果您发现很难与他们预约时间,请不要在尝试自己完成所有事情时陷入困境。一起工作(结对或群体编程)是完成工作和分享知识和经验的更有效的方式。
最后,任何高级工程师最重要的职责之一就是帮助其他人也达到他们的水平。
平滑过渡的两个步骤
对于许多测试人员来说,成为一名经验丰富的测试自动化工程师可能是一条漫长而坎坷的道路。然而,通过遵循我上面提出的建议——专注于模式和原则而不是工具和技巧,并将大问题分解为更小、更易于管理的问题——你将自己成为一名测试自动化老手。