测试人生 | 疫情之下工资翻了2倍多,这4个月学习比工作8年学到的还多

本文为霍格沃兹测试开发学社优秀学员跳槽笔记,测试开发进阶学习文末加群。

本人毕业后懵懂的加入了软件测试这个行业,前 3 年是在做外包项目,后来跳槽到甲方干了 5 年,在去年突然发现我已经干了 8 年功能测试了。

在这8年里,我成为一名宝妈,有娃之后明显感觉精力不够用加不动班了。为了自己不被行业淘汰,为了给孩子做一个榜样,经过深思熟虑后,为了专心学习裸辞报名了霍格沃兹测试开发学社课程。

在4个月的学习后**,我顺利拿下某企业测试开发岗位 Offer,年薪 30W+,** 实现了工资翻了两倍多!这里特别感谢各位老师和同学的帮助,也分享下自己的一点学习心得和成长经验。

在霍格沃兹,学习是件快乐的事情

有了学习的想法后,就在网上看了很多培训机构的测试课程,也分别试听过。最满意霍格沃兹测试开发学社的《测试开发实战进阶》课程,课程内容很系统,与自己想学的很接近。

一开始因为价格原因没有报名,只是加了助教好友,蹭了很多免费公开课。听公开课时惊喜的发现,公开课内容对于现在的工作有很大帮助,尤其是测试思路。

我之所以下定决心报名,是因为我在招聘网站上查看测试开发工程师的职位要求,发现霍格沃兹测试开发学社的课程体系全部覆盖到了。这让我确定了测试技术的发展方向,也让我对正式课程有了很大期待,于是很痛快的报名了测试开发课程。

真的很感谢霍格沃兹的导师和测试开发班的各位同学。在学社学习的 4 个多月时间里,真的学到了非常多干货知识,我也第一次体会到了有专业班主任老师带着学习并及时督导的优势。

在学员群里,有问题随时可以 @导师,回复非常迅速。有时问题刚刚发到学员群里,群里的一堆大佬们,根据自己过往的经验就给出解决方案,让自己少走了很多弯路。学员群里看各位同学分享平时的工作心得,面试经验等,都会有很大的启发。

更让我想不到的是,课程内容一直在更新,至今还在加课,第一次遇见这么良心的培训班~~课程学习过程中如果没有及时参与直播课程,后期可以跟着直播回放自己学习,并且可以按照自己的需要调整倍速。此处重点给大家一个忠告(仅适用于有家庭负担的人),虽然不能每周都做到参加直播课程的学习,但一定要跟着思路做好自己的当堂练习,做到虽然进度落后但也不能缺失质量。

除了课程内容非常优质之外,学院还有各种活动让大家边玩边学。例如:知识分享、答疑区、金羽毛奖、竞选学习委员(以教促学)等等,都很有意思。

面试真题(附作者答题思路)

**以下分享我个人的学习心得和面试经验。**主要是关于接口,UI 自动化测试框架实战方面的技能。以上是我在面试过程中,被问到的一些问题以及我的个人答题思路,仅供参考。可能有些问题回答的不是很全面,也欢迎大家留言交流探讨。

关于 Python 学习

  • 深浅拷贝
  • 各数据结构特点、区别
  • 垃圾回收机制
  • Python 缓冲池
  • 装饰器原理与实现
  • 线程,进程,协程区别、实现
  • 迭代器与生成器等

关于接口自动化

其实很多时候,企业不是仅限于满足断言接口状态响应码,部分字段等。对于编写速度,稳定性,数据真实性也是有很多的要求

  • 对于速度,我们可以通过 mustache 模板技术生成测试用例,可以通过 Charles 生成的 chls 文件进行部分处理生成 JSON 或者 YAML 文件
  • 对于稳定性,可以通过在设计阶段,生成对应接口正确的 jsonschema 进行对比
  • 对于数据真实性,可以通过 mitmproxy,让流量走特定接口,直接生成线上数据,模拟真实用户请求

接口测试如何设计测试用例?

接口测试一般考虑入参形式的变化和接口的业务逻辑,一般设计接口测试用例采用等价类、边界值、场景法居多!

接口测试设计测试用例的思路如下:

1.接口业务逻辑测试:

接口逻辑测试是指根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值是否正确的测试,也就是测试对外提供的接口服务是否正常工作。

2.模块接口测试:

模块接口测试是为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。

模块接口测试的主要包括以下几个方面:

  • 鉴权码token异常(鉴权码为空<没有鉴权码>,错误的鉴权码,过期的鉴权码)
  • 其他参数异常
  • 错误码异常覆盖
  • 接口测试其他的关注点
    • 接口有翻页时,页码与页数的异常值测试
    • 数据库的增删改查,比如一个post接口操作完成后,通过列表页接口看下新的数据是否和刚才的post一致
    • 接口返回的图片地址能否打开,图片尺寸是否符合需求
    • 当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求。
    • 所有列表页接口必须考虑排序值
    • 所有功能都要考虑兼容旧版本

Pytest 测试框架

Pytest 是最流行的 Python 自动化测试框架,需要重点掌握

UI 自动化测试

除了学院教授的 PO 思想,简单完成页面封装后。我们要去增加用例,只有用例数足够多的时候,才能发现还需要处理在多个 py 文件中管理用例顺序,合理 driver 调度等一系列问题。也可以去增加相关的日志,报告模块的封装,将部分 JS 处理同步集成到 Basepage 模块中等一系列的系统操作,SeleniumGrid 的集成等等。

UI 自动化扩展:

增加 log 存储,Allure 报告存储(此处的 Allure 必须要结合趋势图,例如这一次生成报告后,你需要保存 result 中的 history 文件,等下一次生成时,覆盖到 report 中的 histroy 中),seleniumgrid 的执行命令,使用 pytest.ini 进行定制,使用pytest钩子函数定制,使用 pytest-xdist 进行并发用例等)。

对于自动化测试原理

重点掌握 Selenium 自动化原理,接口 Requests 原理,接口 Mitmproxy 代理原理(中间人攻击),Appium 自动化测试原理;

关于计算机网络

1 )网络七层模型, TCP/IP 模型

(2)UDP 与 TCP 区别

  • TCP 有连接;UDP 无连接(基于无状态传输)
  • TCP 需要建立三次握手,含有确认、拥塞、重传机制,对系统资源要求多
  • UDP 不需要一系列复杂认证,速度快;TCP 速度慢
  • TCP 含有确认机制,数据可靠,有序;UDP 不可靠,无序
  • TCP 面向字节流(流模式);UDP 面向报文(数据报模式)

(3)HTTP 与 HTTPS 区别

  • http是超文本传输协议,信息是明文传输;https是具有安全性的ssl传输协议
  • http与https使用的是不同的连接方式,端口也一样,http默认端口是80;https默认端口是443
  • http连接状态比较简单,是无状态的;https协议是由ssl+http协议组成的可进行传输、身份认证的网络协议

(4)session、token、cookie 区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上。而token是接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
  • 可以将登录信息等重要信息存放为session;其他信息需要保存,可以放在cookie

(5)常见网络状态响应码

  • 200 成功
  • 30X 重定向
  • 400 请求格式/语法错误
  • 401 权限
  • 404 资源未找到
  • 405 不允许的请求方式
  • 5XX 服务端错误:
  • 50X 服务器内部错误
  • 502错误网关
  • 503服务不可用 服务器超载或者停机
  • 504网关超时

关于数据库 MySQL

重点复习内连接inner join,左链接left join ,右链接right join(要知道左右连接的区别),union,子查询,排序order by,分组group by ,过滤having,去重distinct,事务,索引类型、原理,存储过程,慢 SQL,优化等。

关于测试思维

面试时候面试官大部分会询问你以往工作经验中的整体项目生命周期流程,具体功能的系统流程,另外会让你说出你是如何设计测试计划、测试用例、测试报告。还有接口测试,项目中如何做的接口测试,接口测试流程。

给大家总结一个登录的测试用例,需要考虑的层面有:功能测试、界面测试,性能测试,安全测试,易用性测试,兼容性测试,本地化测试。现用登录界面来举例如何设计测试用例

功能测试

  • 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录
  • 输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息
  • 登录成功后能否能否跳转到正确的页面
  • 用户名和密码,长度
  • 用户名和密码,特殊字符(比如空格)
  • 登录失败后,不能记录密码的功能
  • 用户名和密码前后有空格的处理
  • 密码是否非明文显示,使用星号圆点等符号代替。
  • 牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换一个按钮是否好用
  • 登录页面中的注册、忘记密码,登出用另一个帐号登陆等链接是否正确
  • 什么都不输入,点击提交按钮,检查提示信息

界面测试

  • 布局是否合理,testbox 和按钮是否整齐
  • testbox和按钮的长度,高度是否符合要求
  • 界面的设计风格是否与UI的设计风格统一
  • 界面中的文字简洁易懂,没有错别字

性能测试

  • 打开登录页面,需要的时间是否在需求要求的时间内
  • 输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内
  • 模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转

安全性测试

  • 登录成功后生成的Cookie,是否是httponly
  • 用户名和密码是否通过加密的方式,发送给Web服务器。
  • 用户名和密码的验证,服务器端验证,而不能前端javascript验证
  • 用户名和密码的输入框,屏蔽SQL注入攻击
  • 防止暴力破解,检测是否有错误登陆的次数限制
  • 是否支持多用户在同一机器上登录
  • 单点登录or多机可登录

易用性测试

  • 是否可以全用键盘操作,是否有快捷键
  • 输入用户名,密码后按回车,是否可以登陆
  • 输入框能否可以以Tab键切换

兼容性测试

  • 不同浏览器下能否显示正常且功能正常
  • 同种浏览器不同版本下能否显示正常且功能正常
  • 不同的平台是否能正常工作,比如Windows、Mac
  • 移动设备上是否正常工作,比如iPhone、Andriod
  • 不同的分辨率下显示是否正常

本地化测试

  • 不同语言环境下,页面的显示是否正确

关于Linux常用命令:

  • 查看帮助文档 :–help ls --help ,man 如man ls
  • 空格键向下翻页,回车键下一行,d 往前翻, 看完退出Q
  • ls查看文件,ls -a查看所有文件包含隐藏文件,前边带点的是隐藏文件,一个点是当前目录,两个点是上级目录,ls-l显示文件详细信息(简写方式ll),可以组合使用比如ls -al 显示文件加详细信息
  • cd h 按tab键自动补全了变成cd hotwargs
  • 显示当前目录pwd
  • 创建新目录mkdir,创建多层目录的新文件a/b/c -p,创建空文件touch touch 1.txt
  • 查看文件里的具体内容cat cat 1.txt
  • 删除文件 rm 1.txt,删除目录 rm -r加文件名,强有力的删除,不管有没有都不会报错 rm -rf,rm -ri b 会询问一下是否要删除目录b
  • cp ./1 ./feier 把1文件拷贝到feier目录下 cp 源文件路径加目标文件路径,拷贝当前目录下的a目录拷贝到上一层目录下的霍格沃兹 cp /a ./a …/hotwargs/ 加参数-a才能拷进去
  • 查找文件:find ./ -name 1.txt 查找当前目录下的1文件,./ -name ‘*.txt’ 查找当前目录下的所有txt文件
  • head -n 3显示文件内容的前3行信息
  • 压缩文件 tar -zcvf f.tar.gz 1.txt 2.txt,解压文件 tar -xf f.tar.gz
  • du -sh 查看当前目录总大小,df -lh 查看磁盘使用
  • 查看日志less或者view加文件名,查看控制台日志tail-f加日志文件名
  • 查看当前系统都有哪些进程:ps -aux 或者ps -elf
  • 查看系统都开启了哪些端口:netstat -lnp
  • 杀死一个进程:Kill -9 pid
  • 怎么重启 Linux 服务器:
  • shutdown -h now --立即关机
  • shutdown -h 10:53 --到10:53关机,如果该时间小于当前时间,则到隔天。

重点说明,由于时间原因个人不能完全学习,推荐大家一定要尽力学完所有课程,个人认为掌握越多,薪资越高,薪资跟自己的努力还是大大相关的。

面试测试开发的时候,大家也不需要太紧张,除了以往的测试经验外,更多会考察你对开发方面的理解,对语言的熟悉程度,以及你站在测试开发方向,对软件测试和质量保障全局的一个理解。

最后,再次感谢学院各位老师尤其是思寒大佬的指导,祝学院越办越好,也祝大家都学有所成,找到自己心仪的工作~~

想知道这位同学面试的职位有没有要求实际测开的工作经验要求?面对需要实际测开工作经验的职位,面试应该如何应对?

这位同学报名之前是功能测试,没有实际的测开工作经验。在学习的过程中,把课程学到的技能落地在项目里,在做完功能测试之后,也尝试使用技术的手段。可以选择某一个测试技术先落地

需要实际测开工作经验,建议面试之前先自己踩坑,先自己找个 app 写一套代码,再面试时,你会发现,面试官面试内容,万变不离其宗~