不懂开发的手工测试是新时代“文盲”
在移动互联网和大数据时代,为满足市场和业务需求,互联网应用既要实现产品功能快速迭代,又要高效保障数据安全和软件质量。这就要求 IT 研发团队必须具备持续交付的能力,而在测试这个环节,就意味着必须拥有自动化测试、持续测试和质量监控等能力,因此对测试从业人员也提出了更高能力要求。
只会点点点,不懂开发的手工测试已经无法胜任互联网测试技术体系“质量第一,效率为王”的要求,成为 IT 新时代的”文盲“。一方面,手工测试在工作中已经没有太大的晋升空间,另外也很难跳槽。尤其在经济下行,减员增效背景下,手工测试更是首当其冲,承受着各种“中年危机”、“人员优化”和裁员压力(在 TesterHome 社区能经常看到各种热门贴)。而受疫情影响,大部分中小企业经营状况愈发艰难,随着经济和就业形势变得更加严峻,恐怕新一轮的测试裁员潮在所难免!
目前 BAT、TMD 等一线互联网企业已几乎不再招募传统手工测试工程师,而只招测试开发工程师。部分功能测试任务会交给在校实习生、应届毕业生,其余则交给兼职众测和外包测试人员。而外包测试公司通常人员技术水平差,流动性高,普遍无法满足高要求,也急需变革升级。这只是测试行业在过渡期的“权宜之计”,未来的测试团队架构一定会是“测试开发工程师主导 + 少数测试专家 + 测试经理”的管理模式。
而由于当前测试开发人才紧缺(粗略统计,目前优秀的测试开发工程师占比预估仅为 1% 左右),市场上可谓高薪溢价,一将难求。一个优秀的测试开发工程师可能会同时拿到 4、5 个 BAT、TMD 大厂 Offer(年薪 30W+ 起,年薪 100W+ 也大有人在),薪资待遇甚至超过同级别研发岗位。
与此同时,测试开发技术正迅猛发展,各种新技术新应用层出不穷。以 BAT、TMD 为代表的互联网企业都在普遍落地自动化测试、全链路压测、精准化测试、大数据测试、AI+ 测试等等,更多优秀的互联网企业也在奋起直追。
可以说,现在就是转型为测试开发工程师的黄金时代!而能否在行业变化中把握住新的历史机遇,就看你是否做好了准备!
1.软件测试理论知识
这个对软件测试人员来说是必备的。其中包括软件测试基础理论和方法,例如:软件生命周期、测试用例编写方法、软件测试原则、软件测试管理相关技术、软件各个阶段评审、软件测试计划编写、软件测试过程管理、软件验收、软件测试整个过程等一些文档规范。
2.语言基础
这部分内容,可以选择从Java或者Python入门,或者其他编程语言。当然,也要看自己是适合Python还是Java,我个人推荐先入门Python,然后再去学习Java,认真学习一个月足够。第二门语言,一个礼拜就可以入门,很多思想和语法其实是相通的。
3.手动到自动
这是一个比较痛苦的过程,有些人天天看语言基础,却不知道练习的方法,导致一直入不了门。个人建议是在学习了一种语言之后,一定要找一个案例去练习,熟悉这个语言的基本使用。也可以结合Selenium去学习Web自动化测试。通过脚本编写,有助于你提高语言基础知识的理解和运用。在练习自动化脚本过程中,你会收获很多快乐,让你找到学习的乐趣,从而提升学习效率。
4.自动化脚本开发
在手动转自动之后,就需要大量的练习,如果Selenium自动化脚本开发,你起码要完成100个自动化测试用例,你需要对seleinum达到熟练使用的地步。以及快速写出自动化测试用例。
5.了解和接触框架
这里的框架,是指自动化测试框架,不是指开发用到的框架。继续深入研究Selenium和一些自动化测试框架的知识。例如,什么是框架,框架解决什么问题,框架组成组件有哪些等。
6.常见设计框架设计
前面我们有了POM设计框架的思想,接下来我们要学习数据驱动框架,关键字驱动关键,混合测试框架,还有行为测试驱动框架。
7.Linux和数据库
自动化测试进阶到一定深度,也需要用代码连接数据库去进行测试,linux和shell脚本,测试环境也会接触到。如果要做自动化部署和运维,常见的linux和shell脚本是有必要学习的。这部分内容,可以看linux和shell脚本入门系列的书来学习。
8.完全掌握一门编程语言
这个可以和写小程序结合在一起去学习和实践。如果你选Python,你可以学习Django框架进行开发一个web或者一个博客。如果是Java,你需要学会web开发入门,尝试去了解Java三大web框架,优先学习SSH
下面是我整理出来的一份软件测试工程师学习与发展知识架构体系。
大概步骤如下:
1. 做好手工测试(了解各种测试的知识)-> 2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,Javascript)或者 学习Winform
-> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架
自动化测试的最高境界是: 开发测试工具,设计自动化测试框架, 让别人用。
自动化测试的本质是:用程序测试程序。 也就是说学习“编程语言”是学习自动化测试的基础。
很多人问我学自动化测试,应该去学什么自动化工具。 我的回答是,第一步:应该先学习编程语言,以后再去学自动化测试工具
自动化测试是一定要写代码的, 编程语言水平的高低决定了自动化测试水平的高低, 有了扎实的编程技术,干什么都可以。
学习编程语言时, 要把自己当做开发人员, 系统地学习各种编程知识。
很多新手一开始,就学习复杂的自动化测试工具, 我觉得这样是本末倒置了。
如果不先理解HTTP协议, 就不会理解Jemeter, LoadRunner, Fiddler, SoapUI这些工具的。
如果不先理解HTML,DOM, 就不会理解Firebug 这种工具的
如果不先理解Win32 API, 就不会理解Windows 窗体自动化测试的原理的。
如果自己没有开发过网站, 就不会理解网站的各个方面,测试起来难免有遗漏。
总之学习自动化测试,需要循序渐进, 把基础打好。
自动化测试工程师的职位叫做: (SDET) Software Development Engineer in Test. 专注于自动化测试
手动测试工程师叫: (STE)Software test enginer. 专注于手动测试
在微软有很多SDET的职位,但是没有STE的职位, STE职位一般都是外包给外包公司的, 目前自动化测试还是非常吃香的。
自动化测试也有非常多的种类,
目前大部分项目都是Web的, 所以我们说的自动化测试,大部分都是针对Web程序的自动化测试, Web自动化测试分两类:
第一类是:模拟用户真实操作,比如,模拟点击鼠标,键盘输入,等,去操作浏览器上的控件。 (代表框架有selenium-webdriver, VS Coded UI)
这类的自动化测试的是通过高级语言(C#, JAVA, Python 等)来调用selenium的一些工具来操作浏览器,帮助我们实行Web UI自动化
第二类是:模拟HTTP请求。
应该像开发人员一样的心态去学习技术, 自动化测试需要掌握以下的知识:
了解Javascript, CSS的知识。
熟练掌握DOM和HTML知识, (用来解析Web界面)
熟练掌握XML技术,(需要用XML保存测试数据,用XML展现测试报告)
熟练使用C# P/inoke技术调用Windows API (可以用来操作Winform 窗口)
熟练掌握窗体"句柄"的概念
熟练使用C# 操作Windows 注册表
熟练使用C# 中的Process 类
熟练掌握数据库的基本操作语句 (测试数据库肯定要用到)
熟练掌握HTTP协议的知识 (请参考我的 HTTP系列博客 [HTTP协议详解])
熟练掌握C# 中的HttpWebRequest 类的用法 (用于模拟HTTP请求)
熟练掌握正则表达式
关于软件自动化测试的书,真心不多, 我查过市面上所有关于自动化测试的书,只找到下面这边书, 电子档可以点击就下方卡片
测试套件工具: JUnit, Nunit, MSTest, 这几个工具功能都一样学起来比较简单。
性能测试工具: JMeter, VSTS 负载测试, LoadRunner(收费), QTP(收费)
Web UI 测试框架:WebDriver/Selenium, VSTS Coded UI, Watri
Windows UI 测试框架:VSTS Coded UI
其他工具: firebug, Fiddler
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在编写一个包含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
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
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/
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo