初学者自动化测试–终极指南
共 5576字,需浏览 12分钟
·
2020-08-04 18:38
有人说,从手动测试人员过渡到自动化开发人员是一个自然的过程,并且是测试领域的另一个演进部分。我与之交谈的许多测试人员都描述了他们手动测试相同的过程并一次又一次地查看测试文档是多么的不舒服……他们看到自己担任自动化测试角色,同时也增加了薪水(这也很重要)。
尽管从手动测试人员到自动化开发人员的过渡是显而易见的,但这并不意味着并不困难,很多时候我遇到了一个问题–“ 我怎样才能过渡到自动化测试?”。
我决定创建一个指南,解释如何进行这种转换,以及测试人员应该采取哪些步骤来实现他或她在自动化测试中的第一份工作。
尽管这两个角色(手动和自动化)都位于同一部门下,并且通常由同一个人(例如QA经理)来管理,但过渡仍然需要从头开始获得自动化知识。
在下图中,您将能够看到手动测试人员要成为自动化开发人员所需要学习的所有步骤。我将在本指南中解释这些步骤中的每个步骤,同时提及您在每个步骤中需要学习的确切主题,并包括有助于实现自动化学习目标的有用资源 ?
*尽管许多自动化开发人员并不熟悉所有这些图表步骤,但是这是我们在自动化过程中应始终努力的目标。不要害怕需要学习的科目数量。您不需要全部学习,当然也不必同时全部学习。
面向对象编程语言
自动化开发人员实际上是软件开发人员。因此,您首先应该学习的基本知识是某种支持面向对象方法的编程语言。在自动化领域的通用语言中,值得一提的是Java和Python,它们也被认为更易于学习。此外,自动化开发人员还用C#,JavaScript编写,还有一些还用Ruby编写。
无论您选择哪种语言,该语言的原理都相同:数据类型,变量,运算符,语句,OOP(类,对象,方法,构造函数,继承,抽象类,接口,多态性),异常和错误,文件, 常用表达…
资源:有很多用于学习不同语言的教程,涉及独立学习时,我总是更喜欢从视频(腾讯课堂/B站)中学习,而不是从书本中学习。
开发展生态系统
开发生态系统涉及所有互补的学科,这些学科完成了您决定学习的编程语言的核心研究。这些是与特定语言无关的主题,它们将在编写高效,干净和无错误的代码的过程中为您提供帮助。这是此类别下的(部分)主题列表:数据结构,算法,干净代码,应用程序编程接口(API),设计模式,版本控制管理(Git),存储库,构建管理工具(Maven / Gradle / Ivy…), Package Managers (NPM / Composor / Nuget / Pip / Gems…)
单元测试框架
现在,我们开始接近测试和测试自动化世界,在这个世界中,我们有许多用于单元测试的框架。这些框架使我们能够使用诸如注释或属性之类的元数据功能,将编写的代码转换为可测试的代码。此外,使用这些框架,我们可以插入测试功能,各种执行机制,报告等。
有一些流行的框架,例如:
Java的JUnit和TestNG
C#的MSTest,NUnit和xUnit
适用于Python的unittest和pytest
Mocha,Jasmin或Chai for JavaScripts
在开始使用单元测试框架时,您应该学习以下两个主题:注释/属性,运行程序(具有并行),断言,测试套件,CI集成。
服务器端和客户端
在这一部分中,我们将深入研究服务器端和客户端,并理解为什么我们需要同时了解两者:
服务器端
网页服务
数据结构
API测试
数据库测试
客户端
HTML,CSS,JS
网页
移动
桌面
让我们从服务器端开始。
服务器端– Web服务
在我看来,Web服务及其各种协议是自动化开发人员在尝试专门研究服务器端测试时应首先学习的内容。为一些沉重的名字加上大括号:
简单对象访问协议(SOAP)
代表性状态转移(REST)
Web服务描述语言(WDSL)
通用描述,发现和集成(UDDI)
服务器端– 数据结构
数据结构是我们在服务之间传输的数据类型,它们是最终由文件表示的不同格式,其中大多数采用XML和(主要)JSON格式。您应该熟悉这些格式,并学习可以从中提取信息的语言,例如:Xpath和JSONPath。
服务器端:API测试
服务器端测试的主要部分以API测试的形式出现–将API请求发送到另一端,同时期望它返回响应(我们稍后将对其进行解析,编译和测试)。没有GUI,也没有元素或对象(在客户端测试中确实存在,例如:按钮,文本字段等)。关于API测试,我们没有“外观(web界面)”。
同样,您还必须在这里学习如何使用工具和API测试框架,例如:REST保证,REST Sharp,Http Client。为了编写API测试,您必须学习的重要主题是:
方法:GET / POST / DELETE / PUT / PATCH
动态有效载荷
连载
反序列化
认证方式
服务器端:数据库测试
数据库测试在行业中不那么普遍,但是为了连接到数据库,我们需要学习与它们一起工作的所有层,例如:JDBS(Java数据库连接)– Java API,定义了客户端可以访问的方式其他数据库。该API包括不同的接口,例如:Driver,Connection,Statement,ResultSet…甚至在.NET世界中也是如此。框架本身已经捆绑了一些API,例如:SQL,OLEDB,OLDB等。
几乎每个DB都具有可以与我们的代码进行交互的任何编程语言准备的框架或API。我们只需要熟悉它们的功能以及如何使用此类框架即可。
客户端-HTML,CSS,JS
现在出现了一个问题–如果我们只是测试而不是构建它,为什么我们甚至需要了解开发Web应用程序背后的技术?好吧,最明显的答案是–如果我们使Web应用程序自动化并且我们的自动化引擎知道如何读取HTML页面,那么我们最好也能知道这一点。HTML页面还涉及CSS(负责应用程序的设计)和JavaScript(负责网站的动态)。您无需成为前端开发人员,但是您一定应该熟悉基础知识,甚至还需要一些知识。
在HTML级别上,我们应该知道什么是DOM,如何构建Web应用程序,什么是HTML标签(尤其是常见的HTML标签),属性,浏览器的开发人员工具(非常重要,尤其是控制台,元素和网络部分) 。
客户端–网络
Web自动化是自动化测试行业中最受欢迎的,并且具有最大的生态系统。领先的平台(目前为止!)是硒webdriver的,难怪新一代网络的自动化工具,如TestProject建立在硒的顶部。尽管最近我们已经看到越来越多的非基于Selenium的Web自动化工具,例如:Cypress,Puppeteer,Nightwatch.js和TestCafe。
无论哪种方式,由于其中的许多测试自动化工具和解决方案(不仅用于Web)都基于WebDriver协议(以前称为JSON Wire Protocol),因此,我们应该彻底了解其生态系统,WebDriver和WebElement接口,什么是RemoteWebDriver以及实现它们的所有功能:定位器,同步,开关,操作,页面对象,交互浏览器,JSExecutor,事件监听器。
客户端–移动
大多数从事移动测试的自动化开发人员通常都使用Appium编写测试,但是也有其他平台(例如:EarlGray,Esspresso,Robotium,Selendroid,Calabash),尽管它们在当今的自动化测试市场中是少数。还有诸如TestProject之类的新一代免费自动化工具,可大大简化Appium的框架设置并提供基于Appium的移动录制和开发工具。
Appium的最大优势在于:
支持两种最受欢迎的操作系统:Android和iOS(哦,甚至支持Firefox OS)。
支持WebDriver协议,因此,来自Selenium Web自动化领域的任何人都不会
觉得过渡到Appium太困难。实际上,对于Selenium和Appium,该框架可以(并且应该)是相同的,这是一个巨大的优势,无需像UFT(也支持移动设备)那
样开始编写新框架。
因此,您需要学习的Appium主题通常会在您熟悉Selenium WebDriver之后出现。Appium的代码库实际上是Selenium的扩展,我们需要集中精力。另外,我们应该学习Appium的体系结构,该体系结构与Selenium不同(这里我们有Appium Server而不是ChromeDriver / GeckoDriver等)。
因此,学习完Selenium后,您应该专注于以下主题:Appium驱动程序,Appium方法,Appium手势,Appium环境(客户端-服务器),Android调试桥(ADB),XCode。
客户端–桌面
尽管台式机应用程序的自动化测试比上述Web和移动设备少见,但仍然有一些组织需要它,例如气源。例如,特别是如果他们有一个用Winform或WPF编写的中央后台系统,并且他们需要对其进行一些繁重的测试。我必须说,支持桌面应用程序的工具数量相对较少,而且大多数工具并不常见且不那么成熟。
在这个市场中,我觉得商业工具是领先的工具(相对于Web和移动应用程序市场,后者拥有领先的开源解决方案以及完全免费的工具(例如TestProject))。一些流行的商业工具包括:TestComplete,Ranorex,UFT,Tosca,它们在此桌面自动化领域中做得很好(但需要高额的许可费用),而在免费和开源方面–我们主要拥有WinAppDriver和Winium(不再维护)和白色。
通常使用WebDriver协议继续使用这些免费工具,实际上操作大致相同,但是对象的初始化会有所不同。
测试自动化基础架构
这可能是任何自动化开发人员角色中最重要的部分(以及学习编程语言)。
到目前为止,您已经学习了如何编写Web,移动,桌面或服务器自动化测试,太好了!现在,您需要学习如何使用强大,智能,模块化,防弹(尽可能多)防自动化的自动化基础结构很好地编写它,并且能够将我们的项目保持尽可能长的时间可以并且用最少的精力。
对于任何项目来说,对可靠的测试自动化基础架构的投资是最长,最关键的,并且结合了模块化组件(就像做难题或连接乐高零件一样)。
这些是编写自动化测试基础结构所需要学习的主题:对象存储库,故障机制,恢复,报告系统,屏幕快照,屏幕强制转换,外部配置文件,多个客户端支持,并行执行,日志记录系统,数据库支持,数据驱动程序测试,关键字驱动测试,行为驱动开发,时间表。
开发运维
好的,因此DevOps世界并不完全是自动化测试的世界。但是,即使在DevOps中,我们也使用自动化过程,尽管不一定要进行测试,这会使许多人感到困惑。那么,为什么我将DevOps包含在此最终自动化测试指南中??
因为我们(自动化开发人员)与经典的DevOps团队互动,所以我们需要知道如何将我们的测试套件“连接”到版本发布的自动过程中(换句话说,就是CI / CD)。
因为在小型初创公司中,很可能自动化开发人员也是DevOps成员(他甚至可能负责更多任务-真正的全栈测试自动化)。
我们现在在敏捷环境中工作(快速软件开发),并渴望拥有自动CI / CD管道,这一事实使了解与自动化相关的所有DevOps角色变得非常重要。您应该集中精力学习以下内容:持续部署,持续集成,构建工具,网格,Git和基于Docker的虚拟化系统。
Git
Git使我们能够有效地管理代码。我的意思是,我们无法将代码保存在本地计算机上,对吗?我们通常不是团队中唯一的开发人员,这意味着其他开发人员将需要从事相同的项目,每个人都向项目贡献自己的代码行。因此,我们需要一个地方来管理我们正在创建的所有代码!我们还希望将其保存在某种类型的云存储库中(例如GitHub)。
这是每个软件项目的工作方式,我们的软件自动化测试项目也是如此。
使用Git时,您应该学习的主题是:推,拉,合并,Github,BitBucket,GitLab,Branch,Fork。
CI工具
在本指南中,我已经多次提到此CI术语- 持续集成过程旨在帮助我们更快,更有效地发布软件版本。这不是一个简单的任务,尤其是考虑到通常一个研发团队包括几个开发团队,并且自动化团队当然也是该过程不可或缺的一部分-负责编写,维护和上传测试套件。团队协作是这里的关键。
有一些CI工具,其中最流行的是Jenkins,还有诸如Bamboo,TeamCity等。
自动化开发人员至少应至少知道如何使用此类工具(甚至其中一种),并熟悉如何编写:作业,调度程序,管道,参数,依赖项,插件,报告。
结论
那么,我们从这份(详尽的)指南中学到了什么??
首先,我们已经了解了每个手动测试人员要转变为测试自动化开发人员所需学习的确切步骤,这些步骤包括:学习,学习以及更多的学习内容 ?是的,有很多东西可以学习在自动化测试的美好世界中,请不要给人留下错误的印象-并非所有自动化开发人员都知道所有这些主题。并非所有软件开发人员都了解所有开发技术(编程语言和框架等)。