前言
测试工作6年,经历过不同产品、共事过不同专业背景、能力的同事,踩过测试各种坑、遇到过各种bug。测试职场生涯积极努力上进业务和技术能力快速进步过、也有努力付出却一无所得过、有对测试生涯前景充满希望认为一片朝气蓬勃过、也有对中年危机思考不知何去何从迷茫过。一直在努力,一直在思考,一直在探索。
6年测试生涯,不同的产品、不同的人、不同的事,经历着不一样的经历,带给我不一样的思考。思考着如何不断提升自己、思考着是否一直走测试这条路、思考着如何转型、思考着如何做好现在以应对未来、思考如何可以赚更多的钱。问题一直都在,我也一直在努力寻找答案的路上。
趁着国庆有空闲时间,写写我的软件测试故事,希望对未来想要进入要进入这一行业、即将进入以及正在测试领域努力奋斗的你有一点点启发和思考。我的软件测试生涯开始于2013年的那个夏天。。(一看就是老同志。。)
初入职场
那年毕业的夏天,和舍友W踏上火车南下,一路偶有闲扯大多是在睡觉。对即将开始的工作有点期待、憧憬,对未来可以开始独立生活感到向往。入职体检、手续办理完成后正式开始上班的第一天了。依然清晰记得那一天,一同和F、C两个同事同时来到领导面前的场景。leader下面同时分管三个产品,我被分配到一个成熟产品P,其他两个同事分配到了产品C,另外一个产品是E,这个后话,暂且不提。因为产品P只有一个同事在负责,很自然他成为了我的新员工导师,我很荣幸。直到现在,虽然我几经辗转周折,但我们依然保持很好的联系。
工作就在我的导师指导下开始了。。各种业务知识、技能、测试工具、环境使用等等知识在自学和实践、犯错总结中不断学习成长。新员工实践都是在导师和leader规划的范围内有条不紊的开展着,很庆幸他们大多都是包容、忍耐和鼓励、信任对待我的成长和不足,我们相处、沟通的很融洽。大概在第4个月的时候因为另外一个产品I因为测试经理精力有限需要放手。由于这个产品i业务知识与我当前产品P有相通之处,leader想到了我。。对,一个菜鸟。leader与我师傅沟通评估我的能力决定让我去接手产品I的测试组长职位,我也答应了。当时也不太懂,也没有太大的压力,就这样跑步开始上岗了。。后来的经历才知道跑步上岗的事情太多了。就跟打战一样,没有那么多的事情给你去准备。就是给你这个岗位,给你这一份压力和责任,剩下的你自己去学习、去能力,遇到问题自己想办法克服,通过自己、通过团队、上升等等都可以。。
很庆幸,产品I在新员工负责期间也没有出啥问题,现在想想我又没有多大功劳,因为当时主要还是学习的心态去负责这个产品、去与这个团队的测试、开发成员、PM配合。去学习业务、去了解人、去提升自己。这时候谈不上管理。现在想想领导放心将产品放到我手里负责。我想主要有几个原因。第一、产品I团队开发、测试人员、PM人员稳定,技能成熟,合作的测试leader整体能力不错。团队阵型没有变化不会有什么风险。第二、产品成熟。每次版本交付需求量不大。第三、有我导师保障我,我有问题随时可以沟通。leader自己随时关注。
新员工学习为主和相对压力较小的工作任务下有条不紊的进行着,因为在产品I中承担中与其他新员工不一样的职责、也承担了相对负责的性能测试等任务。很荣幸新员工结束考核时得到了一个不错的考评,这是有点出乎意料的。
仔细回想,整个新员工期间有几个事情印象比较深刻。反思了一下以下几点如果做得更好,也许结果会更好。
1、主动沟通。导师和leader都很忙,可以主动找他们沟通,可以发消息沟通、导师空闲时间工位沟通、发消息预约时间、吃饭时间闲聊都可以。吃饭时是一个很好时间段,尽量跟导师、老员工、新员工等一块吃饭。有更多的沟通时间也可以让你更快的融入这个团队。
2、重复问题尽量不问第二遍。我的导师挺烦这个的。所以问问题得到的信息量大时我就会打断他找个本子记录回去慢慢整理。
3、跑步上岗。有好的机会该抓住就该抓住。不要害怕自己这不会那不会。不会不是什么大问题,怕的是不敢承担。多问多学多沟通,注意处理问题的方法能解决很多问题。
4、在有能力做好本职工作前提下,可以多关注一下其他角色有关的是事情。其实本来也是,测试就是一个端到端的任务,很多信息都会影响到你对测试任务的评估。包括测试计划、测试风险。
5、学习、动手、总结、分享。新员工就是一张白纸,什么都要学。业务、技术、流程、沟通的技巧等等。努力提升自己。记得印象很深的一句话,当时去管理产品I的时候,与合作测试leader定位一个工具报错的问题。shell写的。看不懂。。合作测试leader说了一句,原来管理我们的人都懂啊。。其实,当时是有点尴尬的。。当然现在这个已经是so esay了。。
转岗
这里指的是公司内部的转岗,转岗这种事情好坏也说不准。这里说一件事。主要是供读者一些思考。其实在我工作第二个年头的时候,是有机会转岗到安全测试部门的。当时同事就在那个部门要招人问了我的意向。以我当时自己考核结果和能力要去应该也能去成。当时我的思考点主要是部门和leader都挺好的,觉得就呆着未来应该也还可以。当时转岗也不像现在这么容易。也没有思考太多当前部门的测试和安全测试有多大的区别,我就没有选择走。现在想想其实有些小后悔。因为现在绝大多数部门的测试还是偏重于功能测试,安全测试属于专项测试,技能模型也不一样,前景也不不一样。其实有些小后悔,当时如果选择走,短期可能会有一些影响,但是长远来看,应该是更符合当前的期望。毕竟就业前景要好很多。所以大家在做选择的时候尽量慎重,多思考,多跟好朋友多交流。考虑的维度尽量广一些。
业务和技术
业务和技术对于测试来说,其实是存在一个木桶效应的问题。业务不熟或者技术有短板你可能都搞不好测试。业务和技术都很牛逼你的精力和时间投入肯定要都满足。所以要尽量做好知识体系构建、职业规划,确保平衡这二者之间的经历投入。相对来说,技术更通用,技术越强你就越牛逼。业务(产品)相对有局限,比如你是搞通信领域的、比如你是搞支付产品的、你是测试app的、测试嵌入式产品的等等。业务能力很强也可以成为一个很厉害的人,比如你对支付产品的汇款、转账、支付非常熟悉,支付产品的行业理解也很深入,你去求职银行业务相关的企业、阿里支付、腾讯财付通的部门应该会比其他产品转岗过去的测试人员要更有优势,以前不少同事都去了这些部门。另外,如果你一直在一个产品,精通业务的各种知识,这种人也非常厉害,可以搞TSE,可以支撑开发、产品、测试内部所有人关于业务的答疑。这种业务强的人在部门待遇和职级也会很高。
但是从个人角度来说,我会倾向于多花一点时间在技术能力提升上面。以我为例,我主要经历过几个不同产品,有传统通信领域的产品、有充值转账产品、有支付的产品、其他当前的不写了。。业务并没有太强的连续性。但是我的技术一直是通用的。不管是编码、网络、数据库还是测试基础理论、工程能力等等。重申一下,业务和技术都很重要,根据自己岗位的职责要求和自己的职业规划,做好这二者之间精力的分配。如果不知道咋规划。就做好现在。比如功能测试,你一定要精通业务。如果你是性能测试,你可能只需要关注核心流程,然后是各种性能工具使用、性能调优方法。
到这里说一点,其实个人一直还算是有点上进心的,从事工作到现在也一直努力。技能自认为还算过的去。编码也不怂,Python/Shell/Java/Autoit/DOS也都能写、数据库基础、oracle数据库管理、计算机网络、测试基础理论、测试管理、linux系统基本问题解决也还算可以。组内大部分相关的问题到我这也能闭环,但是总是感觉还是不够。说这个意思,就是希望读者可以多考虑一下,让自己在某一方面特别精通,比如搞工具开发,你可以不仅能编码,编码效率写的规范、效率高,你还能自己做规格设计。开发出的工具可扩展性、可维护性都很好等等。总之,一定要有某一方面的特长、深度,有广度加分。全才对普通人不太可能,人的精力都是有限。
有价值的2件事
这里说2个我认为对自己能力提升或者经验积累有很大帮助的2件事。
第1个就是案例学习。学习你的产品第一个版本到目前的所有的问题、现网问题、现网案例等等,快速积累经验,提高对问题的敏感性。会对你以后的测试设计有很大的帮助。通过分析这些问题你会发现各种问题,有非常简单显而易见的、比如冒泡提示,有非常难以复现需要特殊构造场景才能发现的、有用户体验方面、性能、可靠性等等,全部分析下来你会发现自己对产品的理解、对测试的理解、对站在用户角度做测试的理解会有很大的帮助。
第2个就是针对环境搭建或者常用工具测试源码的学习。这里的源码不是指的版本源码,主要指工具类源码,因为像环境搭建或者升级操作之类对测试来说是非常常规的操作但是又经常会遇到问题。工具源码通常来说体量都不会太大,你可以用个思维导图梳理一下工具的源码、一步一步拆解出关键步骤,每一步骤都是做什么的、输入输出是什么。到最后你再遇到环境搭建的问题,你会发现你很轻松的就可以解决。因为你对他们的报错日志、为什么会报错、定位方法了若指掌。你能解决的问题多了之后你会发现你可能在你们部门就会有影响力,你就有可能快速脱颖而出。另外,带来的附加价值你可能对该门语言能力会提高很多。。
以上就是我说的挺有价值的两件事。因为我这么干过,也确实从中获得不少收益。
测试职业发展
软件测试人员职业发展大概有2条途径。一种是走技术路线,初级、高级、资深测试工程师,一种是管理路线。初级、高级工程师、测试组长、测试经理、测试部长等。还有一种是非正常的路线。有业务能力强的测试转岗去搞产品经理的、搞需求调研的。有编码能力强的测试转开发的、也有转资料的、也有转岗与测试有相关性的,比如QA。还有风马牛不相及的,转岗去搞HR的、搞财经的、搞采购的、搞销售的、服务的都有。正常的发展通道居多的还是前面两条的。
总的来说,要想有个好的职业生涯、有份好的收入首先要做的是不断提高自己的业务和技能水平,提升自己的软、硬技能。对于测试,分析问题能力、沟通表达能力一定要好,对于沟通,起码的要求就是你能简单明了的把一件事情或者一个问题说清楚,因为测试经常要和各个角色配合工作。关于测试职业发展,我也没想好自己未来要从事什么,现在也就是按部就班的做好当下。自己都没想好做好的事情就不再这多说了。如果你也没想好,那就做好现在。起码收获当下,你把当下事情做好了,领导认可了。你有好的绩效,好的绩效就有好的回报。继而你可能会有好的岗位任命。做好了当下,可能领导就帮你规划好了。。见过是有这样的。。
中年危机
危机十足啊。对这个问题,对自己的未来也有过思考,但是始终也没有得到自己想要的答案,也就是现在我也没定好自己的目标。尤其在二线城市,你可以上各招聘APP看看,能力要求都挺高,但是薪资待遇还是有限。这是客观环境无法改变。所以更需要提前考虑这个问题,提前做好准备,不打无准备之战。对自己大概有个初步计划,就是把这些年的经验再梳理总结一下、把英语口语练练、测试管理中遇到的问题总结总结,踩过的坑再反省反省。。
我是如何软件测试的呢?
有些小伙伴问了?零基础怎么开始学习软件测试呢?有没有路线图。我用了五天的时候整理了今年我认为软件测试就业的主流技术栈大纲,由于内容实在太多,我就能弄成了一张长图,如果你需要的话,可以加我下面的卡片,直接管我要。
学习建议
1、一般来说,测试新人的话首先需要把基础打好,测试理论基础可以通过看一些经典书籍或网上也有很多免费的资源,选择前两本基础的看,你会受益匪浅。
2、刚开始不太建议加入过多技术群或其他论坛提问,初期遇到问题可以自己搜索自己尝试解决,当然需要控制一个止损点,不要为一个问题耗费太长时间
3、自学基础的同时一定要做好笔记,且一定是通过自己的理解后做的。可以使用思维导图把前后学到的东西给关联起来
4、读完一本书或一个阶段结束后,可以自测一下,通过找一些经典的笔试题或一些istqb中的题目,来巩固或查漏补缺,有针对性的再次巩固学过的东西
5、接下来可以找一些项目来做或去众测平台看一些基本的项目测试流程,包括基本测试文档的书写规范等等,testin众测平台是一个锻炼的不错平台,至少测试用例设计、执行及bug探索提交缺陷都是挺好的。
6、目前有好多平台会开设一些免费的公开课,通过技术讨论组可以接收消息推送,设定好时间听一些专业领域的测试方法,可以快速了解到大体的流程。(一定要经过严格筛选,选择质量高的,否则会浪费一大部分时间):
第一阶段 测试基础
测试基础是软件测试最最最重要的部分,只要你是做测试,不管是什么测试,测试的基础、理论知识都是必须学会的。 最好学到什么程度呢,最好是能够理解,并能够用自己的话给复述出来。 毕竟面试初级测试的时候,问的问题都是从基础理论上进行考核的。 那测试基础有哪些内容呢?
测试的定义、测试的分类、测试的方法、测试的生命周期。 测试计划、测试方案、测试策略、测试用例的编写。 BUG的定义、BUG的分类、BUG的六要素、BUG的生命周期。 测试和开发流程的关系、瀑布流、V字形、W字型(双V)、螺旋型、敏捷等等。 PDCA、5W2H等分析管理的方法 质量管理体系CMMI(了解) 嗯,大概就是以上的内容吧,以上全部都是理论和文档能力、只要你肯背、肯写,都是能独立的掌握的。
第二阶段 常见的测试工具
测试工具永远是软件测试人员的得力助手,不能完全依赖工具,但也不能没有工具,在学习软件过程中,要著中软件测试工具的使用,下图覆盖初、中级软件测试工程师所需具备的测试工具,要想学好,下手学习吧。
混在软件测试职业圈,工具千千万,不可能每个都会用,至少要知道有哪些工具可用,什么时候该用什么工具,每个工具能解决什么问题,然后再深入应用几款工具即可,下面就带大家总结一下。
测试管理工具
禅道:简单好用,市场主流,互联网行业居多 Jira:简单好用 QC/ALM:复杂,收费,电信/金融行业使用较多 bugzilla:功能简单 svn:代码和文档管理工具 git:但是多分支管理比svn好
接口测试工具
Jmeter(开源) postman SoapUI 推荐使用 jmeter 和 postman。
性能测试工具
loadrunner:大而全,要学精通还是有点难度,重量级工具,过去和现在都是行业老大 jmeter:基于java平台的性能开源测试工具,其实也很强大,而且比较好用 Locust:基于python的一个性能测试工具
白盒测试工具
junit/testng:java下的单元测试框架 unittest/pytest:python下的单元测试框架 cppunit:跨平台的c++单元测试框架 PhpUnit:Php语言下的单元测试框架 TestBed:一个重量级的白盒测试软件,可以进行单元测试、集成测试、静态测试,军工行业常用 Klockword:静态测试工具,军工行业常用
持续集成工具
Jenkins:比较常见的一种CI工具 Hudson
网络测试工具
以HTTP/HTTPs协议为主,网络测试工具有: wireshark fiddler charles
app自动化工具
appium:这个应该算是目前最流行的基于app的自动化测试框架了 uiautomator:安卓自动化测试框架,基本上支持安卓的所有事件操作 Monkey:安卓自带的测试工具 Monkey Runner:Monkey改进版,支持自己编写脚本测试,用Python语言 Robotium:一款国外的Android自动化测试框架,用法比较
web安全测试工具
appscan:算是用的非常多的一款工具了,扫描后能够将绝大部分的漏洞找出来 fiddler:网络抓包工具 burpsuite:暴力破解、抓包工具 skipfish:这是一个轻量级的安全测试工具,处理速度很快,每秒可处理2000个请求。
第三阶段 代码学习
好了,学完了以上两个部分,恭喜你,你已经是一个出色的初级测试工程师了。 接下来,你要考虑你的发展方向了 是成为一个自动化测试工程师呢? 还是性能测试工程师呢? 还是安全测试工程师呢? 啊!这个问题好难!我也不知道该怎么选。 反正我啥都会一点,哪个岗位都能去面一面。 关于方向的选择,看我的这篇文章
嗯,相信你心中已经有了答案了,那我们继续往下面说。 这个阶段,我们应该学习代码了,关于编程语言的选择,我推荐Java或者python。 还有数据库也是必须掌握的!在工具篇的学习里,我认为你已经可以掌握数据库的相关的应用了! 所以现在各位可以去学习编程语言了, 不过不用像开发那样,学的那么深入。 比如Java,只需要学完JavaSE的部分就够你用了。 python的话也是一样的,把基础的部分学完就行了。 总之前期你两者二选一的学习就OK了。 啥?你问我学的啥。 我当然是两种都会啊 哈哈哈哈哈哈哈,惊不惊喜!意不意外!
自动化方向
等你代码已经基本掌握了,嗯,很好,接下来就要学习各种自动化测试了。
各种单端测试框架:unittest(python)、pytest(python)、JUnit(java) WEB自动化测试框架:selenium(适用于java\python\javascript) APP自动化测试框架:appium(适用于java\python\javascript) 以上的内容,根据你学的语言进行选择。 appiunm和selenium根据你参与的项目进行选择。 不过无所谓了,反正迟早都要学会的。 这部分的教程太多了,你学会了编程的基础后,随便百度,好多博客论坛都有教程。 而且凭你那时候的水平,你都能轻松的看懂。
性能方向
对loadrunner和jmeter的掌握更加的深入。 可以手写脚本、脱离录制。 学会了多线程编程、能够手写java或者python、不用工具直接实现压测。 学习linux,毕竟性能总是和服务器打交道的。 学习系统架构的相关知识、方便你更容易的分析系统瓶颈。 说实话、性能方向的提示更难、因为需要掌握的东西太多了。 性能测试做深入了,基本上就是架构师的水平了。 可能你现在看着这个性能方向的学习一脸懵逼。 没关系、等你把上面的编程语言学会了你就不懵逼了。
安全方向
渗透测试 SQL注入 暴力破解 脱库 等等 其实安全测试基本上偏向于网络攻防了,也就是传说中的黑客了,不过我们都是好人,这个的发展方向就是白帽子。 推荐知道创宇的学习体系。 我估计你看到这里就更懵逼了。 没关系、等你把基础的东西学会就知道我在说啥了。 毕竟你现在还是一个小白嘛。 不要去纠结这种小事。
各位在这个阶段,正常情况都应该是中级测试工程师的水平了。
第四阶段 架构学习
前三个阶段学习完成后,各位就应该考虑怎么写代码更合理了。 怎么去测试更全面。 怎么才能更好的保障项目的质量。 我认为,在这个阶段,应该回头重新学习一遍测试基础。 因为这个阶段的提高是思想、方法的提高了。 上面讲的都是教你应该怎么做。 在这个阶段你要自己去发现、为什么要那样做。 跨过了这个阶段就基本上可以成为专家了。 学习都是水到渠成的,在这个时候,你应该已经掌握了不少框架了,甚至自己也能开发合适的框架了。 自动化测试框架、性能测试框架等等。 已经有了属于自己的一套东西了。 在群里或者论坛上去装逼、别人都会尊称你一声大佬了。 可能你也学会了一些其他的技术了,甚至在往全栈等方向跨进了。 总之,到了这个阶段就没什么学习路线了。
小结
上述都是一些个人体会,文笔有限写的有点零碎,但是内容都是真实感受的,如果能对一部分人有所启发那就再好不过。目前自己还是一直在思考未来,自己可以做什么,还是期望未来可以多赚钱^_^,过更好的生活。。
2023最新Jmeter接口测试和接口自动化测试从入门到精通,全套项目实战!!!