2020年开年,一不小心,【新冠】黑天鹅从头上飘过,持续影响全国乃至全球的经济,软件行业公司也迎来了不少的冲击,那么一个值得打算入行软件测试行业,或者已经在软件测试行业耕耘多年的老司机来说,2023年软件测试行业,还值得入行吗?这个行业将来又将如何发展呢?下面作为一个十年资深测试,我谈谈我个人的看法。
鉴于笔者从13年入行IT行业,经历了只有开发没有测试的阶段,经历了14年只要会基本的功能测试在一线就能薪资过万的阶段,经历了17年只要会一点自动化,会一点性能就能蒙骗过面试官的阶段,更经历了19年所有面试官对于求职者的要求逐步提高,开始思考这个求职者当前具备的技能是否值得培养,工作态度,技能背景是否能够快速满足岗位需求的阶段,那么2023年软件测试行业又将是一个怎样的趋势呢?
相信从10年的市场变化,不难猜出2023年技术薄弱的测试工程师会逐渐被淘汰出局. 一波测试工程师的失业潮是在所难免的
虽然笔者我也一直在呼吁身边的朋友赶紧脱离落后的测试技能, 赶紧走入前沿的技术领域,但是看到很多人还是在原地踏步,他们生活越来越艰难, 工作也是犹如鸡肋,行尸走肉,得过且过也是挺着急的。从主流的招聘网站也能看出来初级测试岗位在减少,但是高级测试工程师的需求反而越来越多,职位薪资也是越来越高, 由此看出测试行业在向正规化,国际化发展。测试行业的门槛在提高。
互联网唯一不变的就是无时无刻不在变化
以往的深刻教训难道还不够多吗?诺基压是如何退出舞台的,苹果,头条,某多多崛起的速度用了几年?仔细算算貌似仅仅3年。摩拜女神仅仅用了三年的时间收获10个忆功成身退,连中石化都变成全国连锁买菜了。互联网还有什么是做不到的?只有你想不到没有做到。软件测试行业更是在飞速发展。
随着测试工程师技能的提升,甚至很多的开发人员都开始转入测试岗位,那么对于还处在功能测试阶段的人来说,第一个是工作上已经没有太大的晋升空间,第二个是也很难跳槽. 最好的结果是凭借多年的经验转管理。我跟行业的很多测试经理交流过, 大部分工作超过6年的人, 在测试执行上会倦怠, 在测试技术的改进上已经无法入门, 还不如招实习生。
所以未来测试人员肯定是功能测试,自动化测试,性能测试等为一体的全能型人才。
测试行业经过自身的净化洗涤会有新生. 典型的变化就是薪资从以前的3k-10k的范围, 整体提升到1w-3w之间。甚至在BAT等一线资深大佬已经年过50-100万。市场对于测试人员技术含量的要求, 责任的要求必然会带来整体的回报. 现在只要技术好,工作3年拿个两三万的月薪已经不再是遥不可及,甚至已经很正常。
五、独行踽近,众行致远!只有抱团才能取暖,欢迎加入软件测试技术群:695458161 共同进步,共同成长!
初级测试工程师:月薪6-15K之间。必须掌握的技能:
1.软件测试理论、测试流程、需求分析、测试用例的设计、编写、评审,bug工具的使用等。
2.版本控制工具SVN,Git的使用。
3.掌握Linux操作系统的基本使用
4.掌握数据库Mysql或者Oracle的使用,包括增删改查,多表查询,子查询,联合查询等。
5.掌握接口测试工具的使用:如postman,jmeter等,以及抓包工具Fiddler的使用
6.掌握基本的python和自动化脚本的编写
7.掌握基本的性能测试。
8.掌握基本的App专项测试。
如果上面这些核心技术你都掌握了!那么恭喜你可以去寻找一份功能测试的工作了!那么这时候你就要思考第二个问题:如何升职?如何获取更高的薪资?
中级测试工程师:月薪15-30K之间。必须掌握的技能:
这个阶段你必须搞定自动化测试或者性能测试其中一项,能够独当一面!
对于性能测试来说,业界很多都是在“耍流氓”,性能测试普遍存在的现象如下:
只测不调,无法给出研发和运维人员执行建议
无法定位问题,缺乏清晰的逻辑和数据证明价值
性能测试工具≠性能测试
性能测试技术体系落后,急需拥抱开源软件
这些问题的出现,其实就是反映出了目前在做性能测试的现状:所以在这里笔者建议先从自动化发现发展更有利。
那么自动化需要具备的技能如下:
UI自动化:python或java熟悉一门语言,selenium,unittest,htmltestrunner,ddt数据驱动,PO模式,UI自动化框架等。
接口自动化:requests,pytest,allure,jenkins持续集成,接口自动化框架,日志处理,错误截图等
App自动化:appium,uiautomatar,各种定位,sdk,adb命令等
高级测试工程师:年薪50-100万之间。必须掌握的技能:
1、精通专项测试:自动化测试方向、性能测试方向、安全测试方向、测试架构建设等。
2、具备一定的管理能力:测试计划、进度跟进、任务分配、沟通、协调能力;
3、具备优化测试流程的能力:可以根据不同公司不同部门不同系统的特点,进行测试流程规划、设计和优化的能力;
4、业务能力:对所在行业的业务知识有深刻的认识和理解;
5、认知水平:了解行业发展趋势和前沿动态,并可以先进的理念、技术成功落地能力;
如果你觉得此文对你有帮助,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣点击下面小卡片:
很好奇,就使用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