自己已经做了好几年的手工测试了,越来越觉得如果一直在手工测试的道路上前进,并不会有很大的发展,所以通过自己的努力,已经成功的转入自动化测试的方向,那么想快速的转入自动化方向,我们应该怎么做呢?
首先我们先来说一下手工测试和自动化测试的区别:
手工测试
手工测试主要是通过手工操作的方式来测试功能是否符合要求,存在许多主观因素,有可能因为测试人员的失误导致功能点的漏测或者由于测试人员的主观因素给开发人员提一些并不是bug的bug,浪费大家的时间,且大多数是重复性工作,容易产生厌烦心理。
自动化测试
自动化测试主要是使用工具,利用代码自动执行测试用例。这种方法主观因素较少,对就是对,错就是错,并不会因为测试人员主观的因素影响测试结果。而且除去编写自动化脚本的时间,进行自动化测试的时候,效率高,节省了测试人员的时间。而且在做版本的回归测试的时候,自动化测试占明显优势。
为什么要向自动化测试方向发展?
手工测试可替代性太强。只要你会分析需求,只要会编写测试用例,就可以进行手工测试,而且3年的手工测试和5年的手工测试并没有什么大的区别,企业在招聘的时候更倾向于3年的应聘者,因为3年和5年的手工测试,工作能力差不多,3年的手工测试该会的都已经会了,并且3年的应聘者的期望薪资要低于5年的应聘者,所以手工测试的工作时间越长反而越没有竞争优势。
反观自动化测试,需要有一定的代码基础和逻辑思维能力,及随时处理脚本编写过程中的各种问题的能力,这个随着工作经验的增长,各种能力也会随之增长,所以说经验越丰富的自动化测试工程师越吃香。
进阶自动化,需要做什么?
如果我们想向自动化测试方向发展,需要做什么?
1、选择一个适合自己且自己喜欢的自动化测试工具。
选定工具之后,再针对这一工具做相应的学习,注意选定工具之后,不要轻易的修改,不要听说其他工具比较流行就再去学习其他工具,这样换来换去一样都学不好,平白的浪费了自己的时间
2、学习一定的代码基础。
不同于手工测试,自动化测试的一些逻辑处理是需要依赖于代码来实现的,虽然说现在自动化的测试工具都有脚本录制的功能,但简单的脚本录制并不能完全满足于我们自动化的需求,有一些逻辑还是需要我们通过代码来实现,所以在学习自动化测试工具的基础上还要学习简单的代码。
3、将自己学习的自动化测试的知识用到日常的工作中。
如果你只是学习而不实践的话,那么你对自动化的了解就仅仅停留在你学习过的知识上,但是现实的工作中我们会遇到各种各样的问题,这个是在学习的过程中不会遇到的,解决问题的过程也是一个学习的过程,通过不断的解决问题,不断的查找解决问题的方法,我们能更深入的了解自动化测试工具的使用,而并不是仅仅的停留在表面。
这个我自己就深有体会,我是通过看视频教程的方式来学习自动化的,在看视频教程的过程中也都跟着视频做一些练习,但是在真正的工作中使用这个工具的时候,发现要测试的系统并不像做练习的系统那么简单,有这样或者那样的不同,在写脚本的过程中也会遇到这样或者那样的问题。
这些在学习的过程中是没有遇到过的,因为视频里的讲师都是选择一些他们经常使用的系统来做演示,选择做练习的功能也都比较简单,但是在实际的工作中我们会遇到各种各样的场景,并不只是视频教程里讲授的那一点点。所以,我们在学习的过程中要多拿真实使用的系统做练习。
4、我们在练习的时候要将这看成一个任务而不是练习。
如果只是练习的话,遇到问题我们就会觉得反正只是练习而已,这个场景有问题,我们换另一个场景练习;如果我们将这个作为一个任务呢?那就是必须完成的,遇到问题必须解决问题,而不是逃避问题。
5、选择一个培训机构进行系统的学习。
不是说人人都需要去培训机构进行学习,但是总有那么一部分人,自学没动力,没人催促,久而久之也就忘记要学习这回事了;或者是完全没有测试经验或者代码经验的新人,在自学完全没有头绪的时候,这个时候可以选择一家可以信赖的培训机构进行系统的培训,这样比自学的效果会好一点,并且多人一起学习更有学习的氛围,遇到问题也可以相互沟通解决。
6、跟测试大佬一起学习交流。
别忘记在工作过程中一定要不断地充电学习,找一个优秀、无私的“教练”是成功的关键,否则自己很难突破的,起码短时间内是绝对不可能的!最后就是要适时地停一停,对以前的自己好好总结一下,才能为第二次腾飞做好充分的准备!
“赠人玫瑰手留余香”!我也想做你们测试发展道路上的人生导师,把我的经验分享给大家,帮你们更好的突破自己,提高自己!
授人以鱼不如授人以渔,这里给大家整了一套涵盖软件测试面试资料和自动化测试工程师进阶路线的快速学习方法和资源。
《自动化测试工程师进阶路线》
1. 自动化测试必备Python编程内容

2. Web UI 自动化测试基础内容

3. Web UI 自动化测试实战内容

4. APP UI 自动化测试基础内容

5. APP UI 自动化测试实战内容

6. API 接口自动化测试基础内容

7. API 接口自动化测试实战内容

8. CI/CD持续集成专项技术

9. 自动化测试框架实战技术

根据这个学习架构路线,不断地去摸索与提升,突破技术的瓶颈,可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。我也是走过这样一段路,才能获得更多高薪职位的机会,付出终有回报,也算是对我能力的一种认可吧,真正的证明了自己的价值。至少税后30+的薪水是我当前状态下比较满意的。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element