转载请注明出处❤️
作者:测试蔡坨坨
原文链接:caituotuo.top/d60e24e6.html
你好,我是测试蔡坨坨。
最近陆续收到一些小伙伴的私信,除了技术相关的问题之外,提到比较多的还有学习方法,很多小伙伴在这方面都比较困惑,比如:“学习什么能够迅速成长?”、“如何高效学习?”、“学习了某项技能后要怎么用?”等等。
还有一些在职的小伙伴还是比较努力的,每天都会投入一两个小时用于学习,但是自我感觉并没有明显的成长。因此,本篇就来聊一聊“测试人如何学习”这个话题。
1 为何学习
众所周知,如今是一个知识爆炸的时代,知识更新快。在互联网行业,这种情况更加明显。具备较强的学习能力也是我们能够在某个岗位上持续成长的必要条件之一。
对于职场打工人来说,关于技能和工具的学习大致可以分为以下几类:
- 为解决工作中遇到的某个具体问题而学习。对于此类学习,更多的是面向搜索引擎,例如百度、谷歌、必应等,通过检索关键字来查找相关资料,进而快速解决问题。这类学习方法可以快速解决当下的问题,但是如果仅仅停留在解决当下问题的层面,那样的知识不成体系,很容易在之后的一段时间内被遗忘。
- 企业中推行某个新工具,要求员工进行学习,此类学习属于任务驱动学习,许多员工更热衷于自己熟悉的工具,不愿尝试新工具,这也是一个新工具在企业中推行困难的原因之一。
- 想要系统性的学习某项技能或某个工具,此类学习需要有一定的系统性和技巧。
- 兴趣驱动学习,根据自己的兴趣学习某项技能,20世纪最伟大的物理学家爱因斯坦曾说过“兴趣是最好的老师”,因此这类学习会是持续且高效的。
学习的首要步骤就是想明白“为什么学”、“能解决什么问题”。
无论是技能还是工具,都是为了解决某一类特定的问题而存在,所以首先要了解它能解决什么问题,为什么要掌握它。
比如:
我们学习Postman这个工具,是为了进行接口功能测试,检测接口是否正确。
我们学习Jmeter工具,是为了解决压力生产的问题,它既解决不了业务建模问题,也解决不了监控问题。所以当有人使用Jmeter来解决接口问题时,会让我感到奇怪,虽然它确实能解决一些接口的问题,但是那不是Jmeter的核心功能,它的核心功能应该是压测。
我们学习Python+Requests+Pytest+Allure框架,是为了实现接口自动化测试,提高测试效率,将重复繁琐的工作交由程序自动执行。
所以,了解一款工具或知识点的背景和使用场景是非常重要的,不要把好工具用在错误的场景。
2 如何学习
2.1 由点及面
大部分初入职场的测试新人,一般的学习方式都是先了解测试行业常用的技能或工具,比如Jmeter、Selenium,然后在网上搜索相关技术文档、视频,或购买相关书籍,紧接着跟随资料开始学习,理论部分学得很是顺利,但是到了实践应用却不知从何下手。
遇到这个问题最大的原因是学习习惯没有从“学生思维”转变为“职场人思维”。
职场打工人和学生时代学习方式的区别:
- 学校中的学习方式是理论先于实践,而职场上的学习方式则是实践先于理论。
- 学校中学习的理论是为了培养我们的认知,而职场中的认知是实践积累到一定程度后一点就透的东西。
- 学生时代学习会有固定的场所,一般是学校,而打工人已经脱离了这个最佳的学习环境,主要地方是公司和家中。
- 职场打工人没有那么多时间来学习,不像学生时代,可以有专门的时间去看那些十几个小时的视频教程,职场人只能每天挤出一点时间学习,因此需要有系统的规划,才能连成一个整体,不易变成碎片化。
基于以上区别,什么才是比较好的学习方式呢?
推荐一种由点及面的学习方式。
不要把学习当做一件刻意的事情,比如看到大家都在讨论自动化测试,于是不管三七二十一,工作上用不用得到,先买本书看看,这样做的弊端就是要么枯燥无味坚持不下去,要么过目就忘,白白浪费时间。
知识的积累一定是贯穿在日常的工作细节中。
以接口测试举例,可以接触到的知识点有DNS域名解析、请求方式和http状态码、Cookie和Session、JSON和XML格式等。我们须注意平时这些技术细节的积累,再通过单个知识点去做进一步的牵引,比如Cookie和Session可以联系到接口自动化测试时的鉴权问题,即先调用登录接口获取Cookie,供后续接口的使用。
许多人在第一步就错了,没有注重这种“点”的积累,而是反过来一开始就做规划式的学习,结果就是效率低效果差,学完之后不知如何应用。
有了这些知识点,再将知识点相联结、相印证,思考知识点背后的普适性规律与原则,把新知识融入到自身的知识体系结构,如臂指使。
2.2 懂原理
搞清楚工具或知识点背后的原理,理解它是通过什么方式解决问题的。
学会从工具的使用中提取思考点,而非工具人。
比如Selenium的原理:运行代码,启动浏览器后,webdriver 会将浏览器绑定到特定的端口,作为 webdriver 的 remote server(远程服务端),而 client(客户端,也就是测试脚本,可以是 Python 或者 Java 代码)会借助 CommandExecutor 创建 sessionId,发送 http 请求给 remote server,remote server 收到 http 请求后,调用 webdriver 完成操作,并将 http 响应结果返回给 client。
本质上是调用http请求的过程,也就是说我们可以跳过代码脚本直接去调接口实现UI自动化(具体做法可参考「Postman 实现 UI 自动化测试」),但是这样做太麻烦了,于是Selenium对底层的接口进行了封装,我们再借助Selenium就能轻松实现UI自动化测试。
再比如Jmeter的底层逻辑本质上是 HttpClient+线程池 实现的,所以它可以做压测,解决压力生成的问题。因为底层使用HttpClient发送请求,所以HttpClient的缺点,Jmeter也会有,比如每次发请求都会new httpClient,就会有很多套接字,极大增加了负载,而这些套接字只有在应用程序停止之后才会关闭,因此在Windows环境下,端口占用一直是Jmeter的痛点。所以在实际使用中我们可以在Windows中进行Jmeter脚本的编写和调试,进行压测时再将其丢到Linux非GUI环境中执行。
3 多练习
最后就是不断实践和尝试,通过更多的练习和思考,体会其原理和优缺点,并形成自己的经验总结。
将所学技能在企业中落地,带来对应的效率和质量保障方面的提升。