从外包菜鸟到测试开发,薪资一年翻三倍
本文为霍格沃兹测试学院优秀学员学习心得与面试经验分享。
本人本科就读于某普通院校(很普通的那种技术示范学院),毕业后懵懂的加入了软件测试这个行业,至今有三年工作经验。通过在霍格沃兹测试学院的这段学习经历,我的职业角色完成了从功能测试到外包测试,再到测试开发的转变,并顺利拿下某互联网企业测试开发岗位 Offer,年薪 35W+(跳槽两次,薪资一年内翻了近三倍)!这里特别感谢各位老师和同学的帮助,也分享下自己的一点学习心得和成长经验。
吃过手工测试的苦,才懂测试开发的甜
我之前主要在两家公司呆过,工作的第一家公司是某通讯服务小公司,在接近 2 年时间里,大部分都是以功能测试为主,还一度被派出差,以及兼职各种产品、运维、运营的活,感觉自己都不像一个测试人员。出差期间(半年左右),根据工作需要学习各种技能,对 Linux 操作逐渐熟练起来,这也为我后面学 Docker、持续集成等打下了基础。
出差归来,我主动提议公司去搞 UI 自动化测试。虽然当时用公司提供的 Java 代码框架,还非常落后低级(需要由测试人员来维护 Excel 编写用例元素定位),但总算是初步接触了自动化。而且,在编写用例时候遇到很多方法在框架里没实现,更是一度激发起自己修改代码的冲动。尤其是在后期的时候,面对越来越多的本地化客户环境,却无时间去编写自动化,每天都加班加点到各个环境去手动点击,实在是忙不过来,非常痛苦也愈发感到自动化测试和持续集成的好处。
2020 疫情期间的大胆抉择:跳槽 + 报班学习
在 2020 过年放假期间冷静思考下,觉得自己不能再这么点点点下去了。虽然当时正赶上疫情爆发,身边大多数亲友都建议不要跳槽,然而恐惧最终被自己内心深处的那个声音所战胜,决定不再迁就,开始寻找新的工作机会。
干货公开课,助力我第一次成功跳槽
在找工作的时候,在网上看到了霍格沃兹测试学院的《测试开发实战进阶》课程简介,课程内容很系统,与自己想学的很接近,但一开始考虑价格原因并没有直接报名,只是加了助教好友,蹭了很多公开课。然后惊喜的发现只是公开课所学就很有裨益,直接用到了找工作面试中,并成功让我在疫情期间收获到多家公司的 Offer,然后就正式报名了测试开发课程。
第一次跳槽,我从多个 Offer 中最终选择了去某互联网大厂做外包测试。虽然是外包岗位,薪资也较低,但感觉大厂的技术体系和学习氛围要更好,自己也想亲身体验下在大厂工作是怎样的体验,也利于进一步深入的学习先进测试技术。
外包随时离岗的压力,成为我努力学习的动力
外包期间,无论是工作还是心态上,都经历了不少挑战。
由于我是第一批测试外包人员,当时公司很多测试流程还不完善,测试用例时间来不及编写,同时提测多个需求,一度是吃老本直接提测。于是,我跟相关的部门领导多次提议,并利用在学院所学,自己加班编写了接口自动化测试框架,成功地帮助项目解决了一部分痛点问题。
然而,外包人员的流动性真的太大了,随着项目结束和外包合同终止,随时都可能被离岗。这种不安定和惶恐的感觉一方面让我倍感压力,一方面也促使我狠下心来努力学习,立志成为大厂正式的全职测试开发人员。在每天加班回家后,我仍然会学习霍格沃兹测试学院的测试开发实战课程,经常学到凌晨两三点,持续了接近半年时间。在看到不少同班同学都成功拿到 BAT 大厂 Offer,自己也开始了尝试投递简历,并最终很幸运可以收获了某互联网企业测试开发岗位 Offer(第二次跳槽后年薪达到 35W+,是原来的三倍左右)。说实话,能拿到这么满意的薪资,我自己也被震惊了,当时都有点不敢相信。从鼓起勇气选择改变,到默默无闻的坚持学习,再到努力实践应用,直至能被企业所认可,内心其实非常感动。
懂得为什么学,找到专精方向
也真的很感谢霍格沃兹测试学院的导师和测试开发班的各位同学。在报名学院的 4 个多月时间里,真心学到了非常多的干货知识,我也第一次体会到了有大咖导师带着学习,目标清晰,方向正确,不走弯路的美好感受。这也是我认为报班学习的最大价值 —— 重要的不是学到知识,而是要懂得为什么学;可怕的不是不努力,而是不知道努力的方向。
霍格沃兹测试学院的课程体系覆盖非常全,让我知道了测试技术的发展方向。在学员群里,有问题随时 @导师,回复非常迅速,另外同班的一堆大佬们,也是才富五车,个个抢着给答案。即便没有任何问题,在群里看各位大佬分享平常的工作心得,面试经验等,都会有很大的启发。而且课程内容一直在更新,至今还在加课,第一次见这么良心的培训班~~平常学院的各种活动,例如知识分享,答疑区,金羽毛杯,内推活动,报名当学习委员(以教促学)等等,都很有意思。
课程内容真的非常多,个人建议如果录播课程暂时无法跟上,可以先放一放后面再补,但是直播内容一定要坚持跟下来,直播课大部分是精华讲解和实战演练,一定不能错过。尤其是要选择自己想专长的方向,专精一部分去学习提升,我自己选择的是 UI 与接口自动化测试。我认为尤其要掌握好自动化测试、性能测试这部分实战技能,对于平台开发可以暂时放缓,毕竟我们测开的定位还是倾向于测试左右移,对代码的精准测试,而非一个三流的开发。
以下分享我个人的学习心得和面试经验:
测试开发成长路线和面试经验
首先,我认为一定要有自己的学习方向,目标是要做到 T 字型人才,保证广度的时候也一定要有一两项专精,这样才能够在面试时候脱颖而出。
分享下我个人的学习路线和面试前重点准备技能:
pytest->完善接口自动化框架->UI自动化框架->Linuxs三剑客->计算机网络->自动化原理->MySQL->排序算法->数据结构->Python->Shell 脚本->Docker->持续集成/交付->安全->测试用例计划思维->中间件->socket->pandas->前后端框架
重要是完善接口,UI 自动化测试框架实战技能,这部分是一定要去落地实施的,不然你无法真正接触到业务核心难点。所谓师傅领进门,修行在个人。
pytest
是最流行的 Python 自动化测试框架,需要重点掌握。
UI 自动化测试
除了学院教授的 PO 思想,简单完成页面封装后。我们要去增加用例,只有用例数足够多时候,你会发现还需要如何在多个 py 文件中管理用例顺序?driver 调度是否合理这一系列问题。也可以去增加相关的日志,报告模块的封装,将部分 JS 处理同步集成到 Basepage 模块中,还有一系列的系统操作,SeleniumGrid 的集成等等。
UI 自动化扩展:增加 log 存储,Allure 报告存储(此处的 Allure 必须要结合趋势图,例如这一次生成报告后,你需要保存 result 中的 history 文件,等下一次生成时,覆盖到 report 中的 histroy 中),seleniumgrid 的执行命令,使用 pytest.ini 进行定制,使用pytest钩子函数定制,使用 pytest-xdist 进行并发用例等)。
对于接口自动化
其实很多时候,企业不仅限于满足只断言接口状态响应码,部分字段等。对于编写速度,稳定性,数据真实性也是有很多的要求。对于速度,我们可以通过 mustache 模板技术生成测试用例,可以通过 Charles 生成的 chls 文件进行部分处理生成 JSON 或者 YAML 文件;对于稳定性,可以通过在设计阶段,生成对应接口正确的 jsonschema 进行对比;对于数据真实性,可以通过 mitmproxy,让流量走特地接口,直接生成线上数据,真实模拟用户操作回放。
接口自动化扩展:(增加 log 存储,Allure 报告存储,异常处理机制,链接数据库,失败用例重跑 pytest-rerunfailures,用例执行控制 pytest-ordering ,重复执行 pytest-repeat,使用 jsonschema 进行断言,通过 charles 文件自动生成 YAML 或 JSON 文件,通过 mitmproxy 进行线上流量回放等)。
对于 Linux 三剑客
(1)匹配 nginx.log 中 404 和 500 有多少行?
cat nginx.log |awk '{print$9}' |grep -E '404|500' |wc -l // 过滤输出了$9一列
awk '$9~/404|500/' nginx.log | wc-l // 只将$9匹配,输出的仍是完整行
(2)统计 nginx.log中 出现次数最多的 IP
cat nginx.log |awk '{print $1}' | sort |uniq -c |sort -rn |head -3|awk '{print$2}'
sort 排序 sort -n 按数字排序 sort-r 反转
uniq 去重 uniq -c 去重并统计重复次数
head -3 头三个 tail -3 尾三个
(3)将 nginx.log 中的 topics 后面的数字替换成 number
sed -E 's/topics\/[0-9]*/topics\/number/g' nginx.log
-E 采用正则 's/old/new/g' 固定替换公式
[0-9]匹配数字,[0-9]*匹配 0个或者多个数字
\/ 表示 / 符号,进行转义
(4)讲 nginx.log 中的 ip 地址横向打印
awk '{print $1}' nginx.log | sed -e ':1;N;s/\n/|/g;t1'
:1 ~ t1 指设置一个标记,若成功,则重复执行
N指追加前面的IP 例如:216.x.x.x \n 216.x.x.x
s/\n/|/g 指将换行符替换成|
三剑客方面除了常见的一些命令之外,建议熟练掌握正则使用,正则非常强大。
对于计算机网络
(1)网络七层模型,TCP/IP模型
OSI七层模型 | TCP/IP模型 | 5层结构 | |
---|---|---|---|
应用层 | 应用层 | 应用层 | TELENT,HTTP,DNS,FTP,SMTP,POP3 |
表示层 | |||
会话层 | |||
传输层 | 传输层 | 传输层 | TCP/UDP |
网络层 | 网络层 | 网络层 | P,ARP,RARP,ICMP,IGMP |
数据链路层 | 网络接口层 | 数据链路层 | 以太网,物理网络,LAN/WAN |
物理层 | 物理层 |
(2)UDP 与 TCP 区别
TCP 有连接;UDP 无连接(基于无状态传输);
TCP 需要建立三次握手,含有确认、拥塞、重传机制,对系统资源要求多;
UDP 不需要一系列复杂认证,速度快;TCP 速度慢;
TCP 含有确认机制,数据可靠,有序;UDP 不可靠,无序;
TCP 面向字节流(流模式);UDP 面向报文(数据报模式);
(3)HTTP 与 HTTPS 区别
端口:http 80 ;https 443;
资源:https 需要加解密需要消耗更多 CPU 内存;
安全:https 需要认证证书,http 无法验证身份;
(4)HTTPS 的通信加解密过程,证书为什么更安全
HTTPS 含有证书,CA 证书需层层认证,用上层公钥解开 CA 的 hash 签名获取 hash 值;且与权威机构存储 hash 值对比,判断认证可信;
过程:
客户端使用 HTTPS 的 URL 访问服务器,要求建立 SSL 连接,发送相关数据及随机数给服务端
服务端收到请求,发送相关数据,随机数,证书信息(含公钥)给客户端
客户端校验证书,生成随机数 pre-master,并用服务器公钥进行加密,发送已加密随机数 pre-master 与客户端证书给服务端
服务端校验证书
客户端,服务端通过对端随机数,已方随机数,pre-master推算出对称密钥
通过对称密钥加密传输
(5)http1.0与https1.1有什么区别
http1.0为短连接;http1.1请求头携带connetion:keep-alive,建立长链接
http1.0一个连接对应一个请求一个响应;1.1连接过程中可实现多个请求多个响应,且不需等待响应可发送下一个请求
http1.1增加了100状态码,允许客户端向服务端发送请求头待确认后再发送请求体内容,节省了带宽
http1.0认为一个主机拥有唯一IP;http1.1中一个IP对应多个主机,增加了host指明主机名
http1.1增加更多新请求头,错误响应状态码与缓存机制
(6)get和post区别
GET 请求参数在 URL 中;POST 请求参数放在请求正文中
GET 请求参数有限制(例如浏览器对 URL 长度限制);POST 无限制
GET 参数存放在链接中直接保存在浏览器历史记录中,较不安全
GET 大多数用于信息获取,POST 用于信息修改,对服务器安全影响程度不同
(7)session,token,cookies 区别
Cookie:由服务器生成,保存在客户端中
Session:一般通过Cookie传输,用于区分用户,存储在服务器中(容易占用服务器资源,且服务器故障,负载均衡等容易丢失或请求到其他服务器中)
Token:一般通过Cookie传输,将用户数据进行签名(加密),并将签名和用户数据整合成token发送给客户端,客户端携带token请求时,将token中用户数据再次签名,与token中的签名进行对比,一致认为用户已认证登录,不需要存储在服务器中
(8)http三次握手四次挥手过程
认知概念:
序号:Seq 序号,用来标识从TCP端向目的端发送的字节流
确认号:Ack序号,当ACK标志位为1时,确认号有效,Ack=Seq+1
标志位:URG(紧急指针有效),ACK(确认序号有效),PSH(接受方应尽快把报文交给应用层),RST(重置连接),SYN(发起新连接),FIN(释放链接)
三次握手与四次挥手:
补充说明:在客户端与服务端传输 TCP 报文中,双方Ack与Seq都在彼此Ack与Seq基础上计算,这样保证了 TCP 报文传输的连贯性,一旦报文丢失,则无法继续握手
四次挥手:
补充说明:
与“三次握手”一致,在彼此Seq,Ack上计算,保证TCP连贯性
“三次握手”被动服务器方不需要任何准备
“四次挥手“被动服务器方不能立即释放连接,还有必要数据处理,经过CLOSE-WAIT阶段准备
客户端在最后需等待2MSL,确保客户端收到服务器端FIN,FIN发送后,若2MSL内未收到ACK则再次发送FIN
(9)请求一个网址发生的完整过程
DNS解析:通过浏览器缓存->操作系统缓存->路由器缓存->DNS缓存(运营商)->根域名服务器
建立TCP连接,发起三次握手
发送HTTP请求
服务器处理请求
浏览器解析渲染页面:
浏览器读取响应加载 HTML
静态资源加载
动态资源加载
释放TCP连接,四次挥手
(10)常见网络状态响应码
1XX 指示信息,请求已接受,等待继续处理
2XX 请求接受
3XX 重定向
4XX 客户端错误
5XX 服务端错误
301 永久性转移,302 暂时性转移,400 客户端请求有错(安全拦截),401 请求未授权,403 禁止访问,404 资源未找到
501 服务器内部错误,502 错误网关,503 服务器不可用,504 网关超时
(11)HTTP 请求,响应结构
对于自动化测试原理
重点掌握 Selenium 自动化原理,接口 Request 原理,接口 Mitmproxy 代理原理(中间人攻击),Appium 自动化测试原理;
对于数据库 MySQL
重点复习 inner join,left join ,right join,union,子查询,order by,group by …having,distinct,事务,索引类型、原理,存储过程,慢 SQL,优化等。
对于排序与数据结构
主要掌握冒泡法,插入排序,选择排序,快排,归并算法,希尔排序等(大部分面试过程,快排是最核心的,其余排序掌握两三种即可)。
个人学习题目:https://github.com/testQx/math
主要掌握顺序表,链表(单向,双向,循环等),栈,队列,树
对于算法,除上方的数据结构外,还需掌握 hash 散列表,动态规划等,建议刷 LeetCode 初中级题目,刷一百题左右足够了。
对于 Python 学习
深浅拷贝
各数据结构特点、区别
垃圾回收机制
Python 缓冲池
装饰器原理与实现
线程,进程,协程区别、实现
迭代器与生成器等
对于 Shell 脚本
Shell 语法编写规则:
同一个 shell 中编写函数 a,function a() ,不需要事先定义有多少个变量,需要调用函数时,直接传参 a 123,则此"123" 想要在 function a 中体现时,则
echo $1
,参数由1开始计数,调用函数返回值,则在执行完函数时,echo $?
则输出上一个运算的返回值。
编写循环语句:
while xxx; do xxxxx done 结构
for i in {0..9};do xxx done 或者 for i in((i=1;i<=j;i++)) 编写条件判断语句;
if [ "xxx" = "xxx" ]; then xxxxx fi 注意[ ]中间各个空格必须隔开
多重判断:if [ "xxxx" = "xxxxx" ];then xxxxx else if [ "xxxx" = "xxxx" ];then else xxxxx fi
判断条件逻辑符号:&& 与,|| 或,!非 ;
判断条件数值大小符号:-eq 等于,-ne 不相等, -gt 大于, -ge 大于等于,-lt 小于,-le 小于等于;
跟踪 shell 执行:sh +x xxxx.sh (会将可能输出的结果进行打印);
a='123' 想要输出a的变量 尽量使用
${a}
而不是$a
,避免拼接变量时搞错值 $( )与等同,执行里面的程序命令 执行一串命令,可用()和{} 当使用(xxxx;xxx)中间使用;隔开使用{xxx;xxxx;},中间、尾部必须使用;
隔开,且第一个命令前必须有空格;$(( ))
表示进行整数计算;条件语句中[ ]表示匹配中括号的字符,[!…]表示不匹配中括号的字符;
=代表赋值,==代表判断;
对于 Docker
重点复习学院课程的 dockerfile,docker 网络模式,dockercompose,docker 文件管理系统等。
对于持续集成/交付
这部分主要复习学院课程相关视频即可,掌握 Jenkins 的构建,插件,Maven 打包等。
对于安全
命令注入:只用
;
拼接 shell 命令;SQL注入:使用 OR 类似拼接引号达到绕过;
XSS漏洞:注入 HTML 闭合 JS 这些
>
CSRF漏洞:伪造请求,将链接发给已登录的浏览器,点击时自动触发更改;利用 URL,图片这些点击;
使用 zap、appcran 等工具扫描,zap 可集成到 Jenkins 中,也可以通过调用 API 实现自身特殊的安全扫描;
对于测试思维
面试时候大部分会询问你以往工作经验中某一个模块功能,让你说出你是如何设计测试计划(此处需重点查看,面试官非常喜欢问)和测试用例。
例如从点线面出发编写功能性用例,UI层用例,兼容性用例,安全性用例,性能用例,接口用例等。
对于中间件
这部分个人也仍在探索,需要多看一下 Kafka,Zookeeper,Redis,mq 原理,相关消费机制,优化机制等(面试测试开发是很好的一个加分项);
对于 Socket
如何简单建立一个服务端与客户端的通讯等等;
对于 pandas
通过 Python 进行数据分析,后续课程中也有涉及,这部分为扩展加分项;
对于前后端框架
学院的测试开发后续课程中也有涉及,这部分为扩展加分项;
面试测试开发的时候,大家也不需要太紧张,除了以往的测试经验外,更多会考察你对开发方面的理解,对语言的熟悉程度,以及你站在测试开发方向,对软件测试和质量保障全局的一个理解。
另,Python 开发进阶,个人比较推荐《流畅的 Python》这一本书。
最后,再次感谢学院各位老师尤其是思寒大佬的指导,祝学院越办越好,也祝大家都学有所成,找到心仪的工作~~(end)
- 点赞
- 收藏
- 关注作者
评论(0)