时光飞逝,转眼间在阿里工作了8年,工作压力大,节奏快,但是从技术上确实得到了成长,尤其是当你维护与大促相关的系统的时候,熬到P7也费了不少心思
我的职业生涯开始和大多数测试人一样,刚开始接触都是纯功能界面测试。那时候在一家电商公司做测试,在这个吃技术的IT行业来说,不断学习是至关重要的。但是我之前做的是最基础的业务工作,随着时间的消磨,让我产生了对自我价值和岗位意义的困惑。
一是感觉自己在浪费时间,另一个就是做了快2年的功能测试,感觉每天过得浑浑噩噩,薪资也从不见涨,岗位也一直得不到提升,身边的许多同事要么升职加薪,要么跳槽去了更好的公司工作,特别觉得自己碌碌无为。
直到在认真思考过后,决心想入职大厂,在经过几个月努力后,成功入职腾讯,到现在已经八个年头了,特别感谢当初自己的决心和勇气,本人也是个爱学习的人,把这几年的工作经验整理成了一份完整的笔记。此笔记已助朋友拿到腾讯,阿里,美团等10个offer !
软件测试所有方向的学习路线
刚开始学习,如果你连完整的学习步骤都没有规划好,基本不可能学会测试。
笔者的成功上岸,也得益于从网上找到了一些优质的笔记、教程和一些大佬的指导
在此,也将学习软件测试所有方向技术点做的一份整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
软件测试学习(工作)技术路线:
软件测试的方向可以选一选,选好方向才能对应去学习内容,先了解下可以从事哪方面工作,这里简单介绍一下,学习软测之后可以做什么工作:
- 需求的功能测试
参与需求评审会议,制定测试计划,编写测试用例,评审测试用例,执行测试用例,提交Bug,回归验证Bug,发送测试报告,进行线上验证等一系列活动。
- 自动化测试工程师
利用自动化测试工具例如Robot Framework,Python+unitest/pytest,Selenium等完成页面UI自动化或接口自动化,提升测试效率,尽早暴露问题。
- 性能测试工程师
根据项目需求,对重要接口制定压测方案,利用Jmeter等测试工具进行压力测试,配合开发同学找到系统瓶颈,并产出压测报告。
- 测试开发工程师
有些公司有专门的测试平台、测试工具,来完成Bug统计与质量分析,接口自动化统计等等功能,这部分开发工作会由测试开发工程师来承担。测试开发对技术,编码要求更高。
初级软件测试工程师专业技能储备
1)了解计算机以及软件测试相关的基础知识
a.计算机基础知识
计算机组成部分,操作系统分类,常见的系统架构(B/S和C/S),常用的DOS命令
b.软件测试基础理论知识
软件测试的目的、定义、原则,产品质量模型,软件测试的基本流程
2)常用的Linux命令
在软件测试中,有时候需要我们自己去搭建测试环境,或者是在服务器部署自动化项目。而服务器基本都是使用Linux系统的,所有我们需要掌握一些基础的Linux命令
3)SQL语句
在软件测试中,测试结果的校验或者自动化中的测试数据准备,都会操作数据库来完成。所以对于数据库的最基本的增、删、改、查的SQL语句,需要能够独立完成编写
4) 手工测试用例的编写(最重要)
作为一个软件测试工程师,最基本的要求就是用例编写的能力。如何编写出一份高覆盖率,低重复率的测试用例,是初入软件测试行业应该去不断追求的能力。
5 ) 缺陷的管理
了解在团队中,如何管理测试人员提出的BUG,从而保证项目的BUG能够及时被修复
掌握以上的技能,对于一个初入软件测试行业的同学而言,就肯定可以站稳脚跟了。
中级软件测试工程师专业技能储备
1、接口测试相关专业技能
无论是自动化测试还是性能测试,甚至之后往测试开发方向发展,最基础的就是针对接口进行测试。所以要想做好中级软件测试工程师,第一步就是能够完成接口测试。
1)接口以及接口测试相关的理论基础知识
包括接口及接口测试的概念,接口测试的原理,接口测试的流程,http协议,Restful接口风格。这些内容都需要有所了解
2)接口工具的使用:Postman和Jmeter
接口测试,可以使用代码,也可以使用工具。通常情况下,接口测试最多还是使用工具来完成.原因无他,“高效”。
3)抓包工具:Fiddler和Charles
在测试过程中,我们为了定位前后端的问题,就会使用抓包工具,查看接口返回的结果。从而定位问题是前端的,还是后端的。
这两个工具,我们一般二选一去学习就可以了,因为他们的作用都是一样的。
2 . 编程语言学习
自动化测试的实现方式,主要还是依赖代码来完成的。所以要能进行自动化测试,首先需要掌握一门编程语言。目前行业主流的自动化测试的编程语言为python和java。我个人推荐python,因为对于新人而言,上手的难度比较低一些。如果可以全天学习,python也就差不多10天就能入门
3、自动化测试学习
Python学完以后,我们就可以开始自动化测试方面的学习。
自动化测试的目的,主要还是为了降低回归测试的时间。
软件测试中的自动化测试,分为UI自动化和接口自动化。
通过以上的学习之后,我们再来看你具备哪些能力?
SQL语句,Linux常用命令
手工测试用例的编写以及缺陷的管理
使用抓包工具进行前后端问题定位
使用Postman或Jmeter进行接口测试
使用Python进行接口/UI自动化测试
高级测试工程师需要掌握的知识点
这一阶段你需要加宽你的知识体系,同时更加深入的了解前段进阶,代码质量,测试架构,微服务及中间件,容器化,自动化测试设计,测试架构,CI/CD,测试左移,测试阶段,测试右移。
测试开发和研发岗的区别,其中一点就是研发更注重深度,而测开更注重广度。
比如:你要了解CI/CD,因为你做的测试平台/工具,可能需要接入到CI/CD的流水线,或者运维的监控系统中
再比如:你做性能测试的时候,如果你对架构设计的核心知识不了解,那么在做全链路压测,服务降级等测试的时候,可能就会遇到很多问题难以解决。
找到一份测试开发JD来对照,也可以看到这个岗位对中间件,性能测试。私有化平台都有了解。
除了加宽你的知识体系,还需精进你的代码能力。
简而言之,大厂Java用的多,如果你想去大厂,基本上就得熟悉Java,不然面试很容易被pass掉。
面试真题分享
个人信息
- 自我介绍 项目(重要)
- 项目中最大的挑战,花费最长时间的项目,比较有成就感的事情
- 项目中印象最深的bug
- 有什么想问的吗
- 适合业务测试还是技术测试
- 为什么选择字节
- 分别用3个词描述自己的优缺点
测试
- 对测试开发的认识,为什么想做测试开发,测试测开的理解
- 软件的分类
- 什么是接口测试
- 微信红包的测试用例
- 微信评论功能的测试用例
- 测试一下支付宝付款码,设计测试用例
- 黑盒测试的方法
- 白盒测试的方法
- 软件测试的流程
- 登录功能怎么设计测试用例?
- 网上银行转账是怎么测的,设计一下测试用例。
- 给你一个网站,你应该如何测试?
- 一个有广告的纸杯子,请设计测试用例?
- 想象一个登录框,包括ID、密码、登录、取消,记住密码(复选框),尽可能的写出你想到的测试点?
- 测试淘宝购物车的测试案例
- 设计一下抖音上下滑动视频的测试用例
- 设计抖音app用户登录测试
- 中断测试
- 测试在一个场景下,推荐滤镜
- 朋友圈点赞评论测试用例
情景问题
- 如果抖音一个地区的许多用户无法下载视频的原因
- 如果用户收到了银行短信提示已经扣款成功了,但是商家没有收到钱,你觉得会是什么问题
- 输入一个url,请问发生了什么?
- 如何实现一个用户登录功能
- 高并发下减少事务带来的性能消耗?
- 如果一个API接口出现一个不稳定出现的bug,如何去确定?
- 如果提交bug,开发告诉你不存在,如何处理?
- 访问页面加载缓慢的原因以及如何解决
- 如何你和你的领导意见不一致,你会怎么做
- 如果图片上传失败,分析原因
- 针对评论功能,你如何设计接口,主要回答需要传递的参数有哪些?
- app页面白屏了什么原因
- 全链路压测中,找到了某一个服务器CPU负载率100%,磁盘和内存使用率正常,请问你会怎么去分析可能的原因
- 设计买火车票的系统,输入出发站和到达站,返回所有可能的结果
- 添加购物车请求后发生了什么
- 淘宝用户支付失败的原因
如果你在软件测试行业有许多的不解的困惑,那么欢迎和我一起在业内的交流群里面沟通探讨。群里面有免费的教程资料以及各阶段测试资源,希望能帮助你突破眼前的瓶颈
Python基础
- python的内存池机制
- python数组和列表的区别
- python你常用哪些包,标准库
- 面向过程和面向对象的语言区别
- 反射
- python的数据结构
- dict和list的底层实现
- python装饰器,作用,用法
- 编译型语言和解释型语言 解释型语言的优点
- 垃圾回收机制
- GIL锁
- is和==
- __new__和__init__区别
- 用python写出多线程,循环打印123
操作系统
- 读写锁,不同点,应用场景
- 线程和进程的区别是什么
- 什么是死锁,死锁的条件
- 如何预防死锁,!避免死锁,死锁发生的检查
- 堆和栈的区别以及存储模式有什么区别
- 内存泄漏和内存溢出
- 多线程和多进程,以及应用场景
- 进程通信方式
- 多线程如何实现的
- 计算机内存管理的方式
- 进程调度方法
- 什么是Linux用户态和内核态
- 进程的状态,进程状态就绪和等待状态的区别是什么
- 虚拟内存是干嘛的
- 线程池
- 线程安全的实现方式
- 进程和线程的上下文切换
- 协程
计算机网络
- TCP三次握手,四次挥手的过程
- 为什么客户端要在TIME_WAIT状态等待一段时间
- CLOSING状态
- 如果server端没有收到第三次ack,但是收到了client端发送的数据,server端会怎么处理
- 讲一讲get和post
- http状态码
- TCP和UDP
- 一次HTTP请求的过程(输入URL到返回的全过程)
- http和https
- 无状态和无连接
- OSI七层模型,各层有哪些协议
- HTTP协议 请求报文结构
- TCP如何保证可靠传输,丢包怎么办
- 讲一下滑动窗口
- TCP三次握手中SYN和ACK包有什么不同,包含什么
- UDP想要可靠怎么实现 RUDP
- 半连接攻击
- TCP粘包和拆包
- cookie和session是什么,为什么要用cookie和session
- DNS协议和作用
- DNS的查询方式
- ARP协议作用、工作方式
- 以太网数据包的大小最大为多少
- 三次握手过程中是否存在安全问题?描述一下存在什么样的安全问题?针对这样的安全问题如何防御?
- web攻击,CSRF攻击
- TCP如何进行拥塞控制?拥塞控制如何判断发生拥塞?
- TCP快重传如何判断丢失?
- https证书在哪存放
- 长连接和短连接以及他们分别适用的场景
数据库
- sql语句 取一个月内的id分组 取一个年级中每个班级年龄最小的同学名字 成绩表输出前三名的成绩,后三名呢 拷贝A表的数据到B表 查询每门科目都大于80分的学生名字 筛选出每个小时的记录 考察where 考察聚合函数 where和having的区别 一个数据库sql查询重复个数 在学生成绩表中查询平均分不及格(低于60)的学生id及平均分 查询总成绩最高的人的姓名 user表中在一个时间段内登陆三次的用户id limit的用法
- 数据库引擎及他们之间的区别 InnoDB MyISAM MEMORY:
- mysql的日志怎么查询
- (多次)查询速度慢的原因,如何解决
- 数据库的事务是什么?怎么使用
- 主键、外键、索引的各自的含义以及区别
- 事务的特性(ACID),讲一下每个特性的意思
- 索引的类型
- 什么是聚簇索引、什么是非聚簇索引
- 索引的数据结构是什么
- 前缀索引
- MySQL/MongoDb 端口号
- 数据库有几种表之间的连接形式(左连接,右连接,内连接,完全连接)
- 说说redis中的数据结构和应用场景
- 三大范式
- 数据库隔离等级
- 为什么要用b+树索引而不用hash
Linux
- 常见命令 查看进程ps 查看所有进程长格式ps -ef 打印当前文件夹文件 ls -al a所有文件 l详细信息 软链接 ln -s a target 硬链接 ln 创建目录 mkdir 修改权限 chmod 查看文件: 移动文件mv 也可以重命名 复制文件cp 删除文件 rm -r 递归删除 -f删除只读文件 通配符?单个字符,*多个字符,[a-z]字符集 grep 正则搜索 显示行号-n 查询个数-c 反选-v 查看指定进程 ps -ef | grep pid 查看命令历史 history 查看磁盘空间df -hl 查看文件大小du 查找文件 find [目录] 以名字查找-name “h*”以h开头 终止一个进程 kill -9 pid
- 如何防止新人误操作rm -rf
- 找进程号为199的进程 ls -ef|grep 199
- 某文件中含关键词的行数 grep -c "key" ./file
- 该目录下以.log结尾的文件中包含关键词a但不包含关键词b的行数 grep "a" ./file | grep -cv "b"
面试资料
我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以点击下面的名片免费领取。