jjzjj

职言 | 编码是测试自动化职业生涯的关键:你准备好了吗?

爱吃 香菜 2023-04-03 原文

Verily Life Sciences是一家健康管理公司,前身为Google Life Sciences。2015年,谷歌改组为Alphabet,业务调整之后,谷歌原有的健康业务分离出来。同一年,Google Life Sciences也更名为Verily,目前该公司已经获得包括Alphabet、淡马锡、银湖资本等多轮投资。

本文作者为该公司一名软件测试工程师,希望他的职业经历和经验能够给大家带来启发,以下为作者观点。

我在研究自动化开发方面投入了大量的时间和精力,但我成为自动化开发者的时间并不长。我花了很多年时间打基础,现在我正在为一个Appium/Java移动测试自动化框架做概念验证。

对我这个试图进入自动化领域的手动测试员来说,最大的警醒是,自动化不是依靠学习单一的测试工具,就像以前Rational Rose、Segue SilkTest和Mercury Quick Test Pro所主导的那样。现在,这要困难得多。为了在测试自动化方面做得够好,你必须学习如何编码。

我并不是说所有的QA工程师都必须知道如何编码。但是,如果你是一个试图进入测试自动化领域的手动测试员,你的时间可能更应该用在学习编程语言,这比学习自动化工具的来龙去脉更合适。

我自学了如何编码,并获得了作为自动化开发人员的工作,你也可以。所有这一切只需要五个比较难的步骤。

为什么要学习自动化开发?

传统上,质量保证工程师的角色一直是一个非编码的角色。作为一名软件质量保证工程师,你在软件开发团队中的主要角色是终端用户的代言人,通过客户的眼睛来看待产品。你需要像终端用户一样使用和检视产品。这个过程就是一次探索性测试,正如Cem Kaner在Testing Computer Software一书中的描述:

“对某一输入的预期边界是什么?如果你超越这些界限,给出意想不到的或非正常的响应,只是为了看看被测试的系统将如何表现,会发生什么?”

通过自动化回归测试套件,你将有更多的时间来探索你正在测试的系统以及它的行为方式。

在波士顿的一个有关测试话题的咖啡座谈会上,我问道:“希望转向自动化的手动测试人员如何学习如何编码?” 这很快演变成了另一个问题:QA工程师是否应该学习编码?

The Mob Programming Guidebook的作者Llewellyn Falco回答说:“每个人都应该知道如何编码!”。这就像阅读和写作。你可能没有写过一本书,但你应该知道如何阅读和写作"。

我同意。当我在学校学习软件工程时,一旦我开始学习更多关于商业分析师角色、数据库开发和软件开发的知识,我的测试能力就得到了提升。因此,我建议以下五个步骤。

第一步:选择一种语言,任何语言都行

你选择什么作为你的第一个编程语言并不重要。如果你想进入自动化测试领域,Java、JavaScript、Python、甚至Ruby都是不错的选择。下面是一个简单的介绍:

Selenium WebDriver/Java是企业软件测试中最受欢迎的组合,也是需要了解的一种很好的全能语言。但要注意的是,尽管最新的版本在很多年前就出现了,很多公司仍在从Java 7过渡到Java 8。

JavaScript与许多不同的JavaScript前端框架配对很好,比如VueJS。Protractor是由谷歌创建的,用于测试AngularJS应用程序。Nightwatch.JS和SeleniumJS与Node.JS和服务器端JavaScript配对良好。也可以尝试学习E6,即最新版本的JavaScript。

有了Python,你可以快速地把能用的东西组合在一起。使用Python的Selenium不那么冗长。

Ruby是另一种容易学习的语言。当Ruby on Rails处于鼎盛时期时,开发者只要想创建一个简单的网络应用就会使用它。但是在自动化领域,似乎没有那么多的需求了。

第二步:编码,编码,编码

不久前,我还是一个没有工作的软件测试员,没有多少编码经验。我在研究生院时有一些编码经验,但那是十年前的事了。所以,为了重新适应编码,我研究了免费电子书Learning Python the Hard Way中的所有例子。如果你需要大量的手把手指导,这本书就很适合你。

使用Python也有帮助,因为该语言的启动时间相对较短。然后我购买了Java for Testers,以使我更容易掌握Java编程语言。“邪恶”测试员Alan Richardson的任何作品都是金子。

但是,仅仅阅读关于编码的文章是不够的。你必须编码! 我记得当我第一次开始尝试学习Richardson的Selenium WebDriver in Java在线课程时。我到处听讲座,看视频,甚至在火车、飞机和地铁上。但由于我没有和老师一起实际编码,所以没有沉淀下来。

当你在学习在线课程时,如果视频显示教师在IntelliJ中输入代码,你也应该这样做。在我的例子中,我把屏幕的左半部分设置为在浏览器中播放视频,而在右半部分我打字并试图运行代码示例。

如果你仍然需要更多的指导,可以考虑报名参加大规模开放式在线课程(MOOC)。许多组织提供免费或廉价的在线课程。以下是几个例子:

edX,Mooc.org的一部分,将自己描述为 “向世界各地的学习者提供来自世界上最好的大学和机构的高质量课程”。

可汗学院,“提供练习题、教学视频和个性化的学习仪表板,使学习者能够在课堂内外按照自己的节奏学习”。

Udemy,“一个在线学习和教学的全球市场,学生们通过学习专家讲师讲授的超过45,000门课程的广泛资料库,掌握新技能,实现自己的目标”。

你在寻找有关Java编码的信息?EdX、哈佛和麻省理工学院的MOOC提供了三个新的Java入门课程。

第1部分:开始用Java编码

第2部分:写好代码

第3部分:基本数据结构和算法

如果你是一名移动测试员,了解安卓应用开发的内部运作将有助于你弄清如何设置Appium。我还推荐谷歌Android开发者网站,它可以:

引导你安装Android Studio,一个用于PC或Mac的集成开发环境(IDE)。教程引导你了解事情如何运作。

提供免费课程,如Android初学者系列。

告诉你如何创建你的第一个应用程序。

虽然训练营不会让你成为一名程序员,但许多开源工具、语言和框架的文档都可以在网上找到,免费的在线教程也是如此。

第三步:创建GitHub账户并探索

如果你还没有,请注册一个GitHub账户。GitHub是一个神奇的地方,在这里你可以寻找最新的开源自动化工具集,并从工具的创造者那里获得指导和最新的信息。他们还提供样本测试,所以其他人可以学习他们的工具集。你会发现这样的工具:

SeleniumHQ,它有关于这个头号GUI自动化工具在C#、JavaScript、Java、Ruby和Python中的所有最新绑定的文档。

Appium,用于移动应用的Selenium WebDriver

Protractor,一个基于Node.JS的自动化工具,你可以用来帮助测试AngularJS应用程序。

REST Assured,基于Java的框架,帮助你测试RESTful APIs。

GitHub的美妙之处在于,只要你允许GitHub仓库中的代码公开展示,它就是完全免费的!

你是否有任何代码样本或项目想纳入在线编码组合?把它们上传到GitHub,并在简历中加入你的账户链接。GitHub有一个广泛的帮助部分,介绍如何创建一个账户并上传你的代码。你还会了解到代码是如何被处理的,从分支到合并再到创建拉动请求。

第四步:写一个快速和简单的自动化测试

现在是时候通过在你最喜欢的网站上编写你的第一个自动化测试并将结果放在GitHub上公开了。一旦我掌握了窍门,我就开始四处寻找可以自动化的东西,比如Dave Haeffner的The Internet,这是一个为初级自动化开发者创建的实践测试网站。

你有自己创建的自动化解决方案吗?分享它,并获得反馈!

第五步:认为你够了解?继续练习。

最重要的是一旦你被聘为测试自动化工程师,不要停止练习编码。学习是一个永无止境的旅程。

每当我学到一些有价值的东西,我就会想出一些示例代码,然后尝试写一些代码演练,放在我的博客上。我一开始很简单,以The Internet作为我的测试站点。然后,经过几个月的工作经验,我试图找出如何使亚马逊的网站自动化的方法。从那以后,我开始修补API测试,先是用Apache的HTTP组件,然后是Postman,最后是用Java REST Assured库。目前,我正在摸索Appium Desktop,一个我想用来探索移动应用程序的工具。

剩下的就看你自己了

我可以用第一手经验告诉你,如果你经历了这个过程,你更有可能被雇用为自动化开发人员。为什么?因为你可以向雇主证明最重要的技能:你是一个愿意自学成才的人。


资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走…


现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

有关职言 | 编码是测试自动化职业生涯的关键:你准备好了吗?的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  3. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  4. ruby - Ruby 的 AST 中的 'send' 关键字是什么意思? - 2

    我正在尝试学习Ruby词法分析器和解析器(whitequarkparser)以了解更多有关从Ruby脚本进一步生成机器代码的过程。在解析以下Ruby代码字符串时。defadd(a,b)returna+bendputsadd1,2它导致以下S表达式符号。s(:begin,s(:def,:add,s(:args,s(:arg,:a),s(:arg,:b)),s(:return,s(:send,s(:lvar,:a),:+,s(:lvar,:b)))),s(:send,nil,:puts,s(:send,nil,:add,s(:int,1),s(:int,3))))任何人都可以向我解释生成的

  5. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  6. c - Ruby - 源代码 - 编码风格 - 2

    查看Ruby代码,它具有以下proc_arity:staticVALUEproc_arity(VALUEself){intarity=rb_proc_arity(self);returnINT2FIX(arity);}更多的是C编码风格问题,但为什么staticVALUE在单独的一行而不是像这样的:staticVALUEproc_arity(VALUEself) 最佳答案 它来自UNIX世界,因为它有助于轻松grep函数的定义:$grep-n'^proc_arity'*.c或使用vim:/^proc_arity

  7. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

  8. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

  9. ruby - 更改字符编码 - 2

    我在使用Ruby1.9.2p290更改文本文件的编码时遇到问题。我收到错误消息invalidbytesequenceinUTF-8(ArgumentError)。问题(我认为)在于字符集似乎是未知的。如果我执行以下操作,则从命令行:$filetest.txt我得到:Non-ISOextended-ASCIIEnglishtext,withCRLFlineterminators或者,或者,如果我这样做:$file-itest.txt我得到:test.txt:text/plain;charset=unknown但是,如果我这样做,在Ruby中:data=File.open("test.tx

  10. ruby-on-rails - 在 rails 中显示 base64 编码的图像 - 2

    我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve

随机推荐