写在前面的话
不知不觉已经毕业两年半,工作三年了在同一家公司并未跳槽,今年在合适的契机选择了换一家公司,在这里想总结一下三年的工作经验和这次的面试经验。
我毕业于一个本科院校,二本,学习网络工程出来的。到大三毕业的时候,暑假选择了出来找工作实习,现在想来有好有坏吧。
为何选择软件测试是因为当时觉得自己对开发的把握不大,觉得自己不能胜任,虽然各种编程语言自己都有了解。当时想作为一个女生觉得自己可能做开发要欠缺些。软件测试在大三的时候在网上找课程,大概有些了解,也会基本的功能测试,就从事了软件测试行业。
第一个项目
18年运气还算不错,在一个运维小公司做了一个星期运维,当时实在觉得老板太抠门就放弃了,重新找软件测试的实习岗位,连续几天面试最后找到一家外资企业,可能我英文还不错,也有了一点优势吧,实习待遇都不用提了,反正自己也是抱着学习的态度的。
实习一年时间,在开始几个月是完全在接触新事物的,最开始就是功能测试,难度主要在于对业务的把控,这个主要靠自我的接收能力。项目是一个基于B/S架构的系统,分为前后台。当然这个什么架构都是后来才知道的。除了功能测试,项目还做自动化测试,我们用Python+Selenium写自动化脚本。但是主要还是以功能测试为主。最开始什么都不懂,自我对测试的意识就是点点点,能熟悉业务就好,觉得测试的职位很容易被替代,也忧虑和担心要不要转行。后来思想发生了些许转变,这个后面再说。
这个项目我实习呆了九个月,学习了功能测试和自动化测试,接收能力还不错就安排我去做另一个项目,这个项目跟之前做的项目有一些接口的衔接,属于偕同项目。两个项目是同一个公司的项目,我们在同一个办公室做事。忘记了说,我们做的是外包项目。
后面这个项目才是我学习了很多东西的项目,一方面是软件测试的思想,一方面是软件测试技术。当然现在我接触的还不够多,并不认为自己非常厉害了,我认为自己在软件测试的路上还有很长的一段要走。
第二个项目
第二个项目我呆了两年半。
先说说我们的开发测试流程吧,由于是外包,需求来自客户,客户是美国的,产品经理和测试经理都是美国人,那边也有一些测试和开发,但主要测试开发在我们这边,外包项目的局限性很大,客户并不是专业的软件开发团队,我们做的东西是他们对外销售的产品,他们公司之前也不是做软件方面的。
客户提供给我们需求,我们测试团队和开发团队一起评审需求,随着系统的逐渐增大变得复杂,需求会有一些业务方面的问题,我们会把问题总结起来用英文整理通过管理工具JIRA发给他们,然后在等待他们的回答期间会编写测试用例。
然后问题回复过来之后再更新用例,开发也开始做代码。代码完了之后就开始进行测试。测试发现缺陷就报bug,开发改了之后测试再验证缺陷是否已修复。大概就是这样。
这个项目前后版本加起来也有五六年了,测试开发比例大概1:1吧,这也算是比较多的测试了,工作不是很忙,有时候也清闲,可以自己学习很多东西,当然不学习的人也多。我们这属于项目外包,现在外面还有很多人员外包的项目,这点对员工来说非常没有归属感。基于这些原因,在后来选择工作的时候,我更偏向于做产品的公司。
继续说第二个项目,最开始也是去熟悉业务知识,有一些复杂的业务逻辑,需要对整个系统有完整的把控。同样我们也是功能测试和自动化。这个项目并没有做性能测试,功能测试我们会用数据库工具来查看或者修改一些数据,我们用的MySQL,这是我学习到蛮多的东西,虽然大学学过,但总不如在项目中体会到的多。
数据库工具在软件测试中,每个测试员的利用程度都不一样,但是利用的越多,对软件测试工作肯定是越好的,这都是见仁见智的。这个项目也有欠缺的地方,测试工具接触的太少,几乎没有,我开始去接触测试工具都是迫于找工作面向市场的压力。
三年的思想转变
三年多获得最多的应该还是思想的转变吧。
其实想来觉得自己也算悟的慢的了,三年才领悟到这个软件测试岗位的真正职能,当然每个人领悟到的肯定不一样,我领悟到的内容大概只是对自己的职业定位吧。在贴吧还经常看到有人说软件测试热门又简单,就是点点点,不辛苦很轻松。
以前这些也曾是我对测试的认识,我身边也不乏这样认知测试岗位的人,我现在的想法变了,像k同事说的,软件测试可深可浅:
做的浅的,但凡脑袋比较灵光,很容易上手,但是这部分人很容易被替代;
做的深的,看个人兴趣和认知悟性吧,能知道自己需要一些什么技能能帮助自己做好测试工作,各种编程思想,脚本语言,几种系统的基础命令,这些都是必不可少的。
思想转变
然后工具是另一方面,还要了解开发的框架逻辑思想。可以说并不简单,我个人认为好的测试人员是比开发人员的难度大的,不求全部精通,但要知识广。
所以我们需要看很多技术类书籍,应该学习很多技术,这应该是一个好的技术人员的必备条件。做到后者是能做出一些成绩的,越往上走,越有一些做的浅的被淘汰。
我是靠自己领悟的,工作不如学习有老师教,出了社会,工作岗位上带你的人能给你讲业务都是仁慈了,怎么也不可能把所有肚子里消化过的东西全部吐出来给你。
当然,这样的同事也存在着,还是要靠自己在日常工作中去发现,去与人交流。
技术转变
1、学会Python
深入学习自动化测试开发的基础。这部分主要包含python基础的语法,数据类型,数据结构,面向对象的python程序设计;
当然如果要深入理解核心技术点的原理,机制等,需要查阅python官方文档及技术站点,甚至查看python源码,这就需要深入学习的能力了;
2、熟悉Python常见内库
Python的优点之一就是它有非常丰富的自有库和第三方库,这也是Python开发速度快的原因之一。所以要实现业务逻辑,就需要掌握内嵌模块或者第三方模块。
3、掌握自动化测试框架和常见库
举例:
接口测试——Requests、Postman
性能测试——Locust
APP自动化测试——Appium、UIAutomator
Web自动化测试——Selenium
数据库的连接和操作——pymysql库
4、掌握了自动化测试工具的设计思路
学习UnitTest,pytest、Page Object的设计模式,学习Jenkins,实现持续集成,快速测试,迭代。
5、当然,实践是检验真理的唯一标准
任何技能的学习都是建立在实践上面的,IT行业就特别强调项目经验。不练习,就像是花了半天时间去学习开枪的理论,结果根本没有机会摸枪,你觉得你打得准吗?想要学好软件测试,对技术有更深的理解,就一定要多去实操,没有熟练度的加成,你学的再多也只是纸上谈兵,一旦面对了真正的问题,你就会无从下手。
要学软件测试其实不难,难的是坚持和相信自己,我的经验是既然已经选定软件测试你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
还有就是不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。
最后我想对测试员说...
总结一下,这三年中我发现以下这些特质都将成为一名测试员在求职和工作中的“潜在力量”,比如:快速学习、系统性学习、学以致用、系统性思考、强大的推动力、技术思维、突出的沟通能力、条理性、抗压性、乐观精神、抗挫折能力、迅速调整的能力、迭代改进的意识、ownership、团队合作、愿景和规划……你一定也要一点点地拥有它!
当然真正的能力,还是来源于工作中的积累,关于技能提升,不管是自学也好,还是参加培训机构,都是需要一个正确的方向去引导你学习,这样学习起来也会比较轻松,不会走多余的弯路,思路很重要。
学习的动力其实是一个很简单的东西,说成目标可能会更好理解一点,你想学成之后能达到什么程度,这样你也能在学习的过程中不被困难所难倒,也会有源源不断的动力促使你前进。
在此分享一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的软件测试技术栈,非常珍贵,肝完进大厂!妥妥的。相信你看完一定会有帮助(莫做收藏党)
这份总结内容涵盖极广,包含了16个技术栈:测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、管理工具、Python基础、Selenium相关、性能测试、LordRunner相关等
- 测试理论(测试基础+需求分析+测试模型+测试计划+测试策略+测试案例等等)
- Linux( Linux基础+Linux练习题)
- MySQL(基础知识+查询练习+万年学生表经典面试题汇总+数据库企业真题)
- Web测试
- API测试
- App测试
- 管理工具
- Python基础(Python基础+编程题+集合+函数+Python特性等等)
- Selenium相关
- 性能测试
- LordRunner相关
- 计算机网络
- 组成原理
- 数据结构与算法
- 逻辑题
- 人力资源
一、软件测试基础
软件测试的步骤是什么?
如何录制测试脚本?
应该考虑进行如何测试的测试方法
怎样估计测试工作量?
测试设计的问题
当测试过程发生错误时,有哪几种解决办法?
测试执行的问题
测试评估的目标
如何提高测试?
C/S模式的优点和缺点
B/S模式的优点和缺点
…
二、Linux
grep和find的区别? grep 都有哪些用法?
查看IP地址?
创建和删除一个多级目录?
在当前用户家目录中查找haha.txt文件?
如何查询出tomcat的进程并杀掉这个进程,写出linux命令?
动态查看日志文件?
查看系統硬盘空间的命令?
查看当前机器listen 的所有端口?
…
三、Python
统计python源代码文件中代码行数,去除注释,空行,进行输出?
python调用cmd并返回结果?
冒泡排序
1,2,3,4 这4个数字,能组成多少个互不相同的且无重复的三位数,都是多少?
请用 python 打印出 10000 以内的对称数(对称数特点:数字左右对称,如:1,2,11,121,1221 等)
给定一个整数 N,和一个 0-9 的数 K,要求返回 0-N 中数字 K 出现的次数
判断 101-200 之间有多少个素数,并输出所有的素数
一个输入三角形的函数,输入后输出是否能组成三角形,三角形类型,请用等价类- 划分法设计测试用例
…
四、MySQL
你用的Mysql是哪个引擎,各引擎之间有什么区别?
如何对查询命令进行优化?
数据库的优化?
Sql注入是如何产“生的,如何防止?
NoSQL和关系数据库的区别?
MySQL与MongoDB本质之间最基本的差别是什么
Mysql数据库中怎么实现分页?
Mysql数据库的操作?
优化数据库?提高数据库的性能?
什么是数据的完整性?
…
五、Web
Web测试和app测试区别?
WEB测试环境搭建和测试方法
WEB测试教程
WEB测试要点及基本方法
Web测试页面总结
…
六、接口测试
什么是接口
如果模块请求http改为了https,测试方案应该如何制定,修改?
常用HTTP 协议调试代理I具有什么?详细说明抓取HTTPS协议的设置过程?
描述TCP/IP协议的层次结构,以及每一-层中重要协议
jmeter,一个接口的响应结果如下:
接口产生的垃圾数据如何清理
依赖第三方的接口如何处理
测试的数据你放在哪?
什么是数据驱动,如何参数化?
…
七、性能测试
你认为性能测试的目的是什么?做好性能测试的工作的关键是什么?
服务端性能分析都从哪些角度来进行?
如何理解压力测试,负裁测试以及性能测试?
如何判断是否有内存泄漏及关注的指标?
描述软件产“生内存泄露的原因以及检查方式。(可以结合- 种开发语言进行描述)
简述什么是值传递,什么是地址传递,两者区别是什么?
什么是系统瓶颈?
…
八、selenium
如何开展自动化测试框架的构建?
如何设计自动化测试用例:
webdriver如何开启和退出一个浏览器?
什么是自动化测试框架?
Selenium是什么,流行的版本有哪些?
你如何从命令行启动Selenium RC?
在我的机器端口4444不是免费的。我怎样才能使用另一个端口?
什么是Selenium Server,它与Selenium Hub有什么不同?
你如何从Selenium连接到数据库?
你如何验证多个页面上存在的一个对象?
XPath中使用单斜杠和双斜杠有什么区别?
如何编写SeleniumIDE/ RC的用户扩展?
如何在页面加载成功后验证元素的存在?
你对Selenium Grid有什么了解?它提供了什么功能?
如何从你的Java Class启动Selenium服务器?
Selenium中有哪些验证点?
什么是XPath?什么时候应该在Selenium中使用XPath?
…
九、计算机与网络
一台计算机的IP是192.168.10.71子网掩码255.255.255.64与192.168.10.201 …
请简述DNS、活动目录、域的概念。
10M兆宽带是什么意思?理论下载速度是多少?
什么是IP地址?
OSI七层网络模型的划分?
TCP和UDP有什么不同?
HTTP属于哪一层的协议?
HTTP和HTTPS的区别?
cookies和session的区别?
HTTP的get请求和post请求的区别?
HTTP1.0和HTTP1.1有什么区别
TCP的连接建立过程,以及断开过程?
客户端使用DHCP获取IP的过程?
写出某个网段的网络地址和广播地址?
…
十、人力资源
你的测试职业发展是什么?你自认为做测试的优势在哪里?
你找工作时,最重要的考虑因素为何?
为什么我们应该录取你?
请谈谈你个人的最大特色。
一个测试工程师应具备那些素质和技能?
还有问一下你是怎样保证软件质量的,也就是说你觉得怎样才能最大限度地保证软件质量?
为什么选择测试这行?
如果我雇用你,你能给部门带来什么贡献?
…
最后
整份文档一共有将近 200 页,全部为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习!