10 | 软件测试工程师需要掌握的非测试知识有哪些?
下载APP
关闭
渠道合作
推荐作者
10 | 软件测试工程师需要掌握的非测试知识有哪些?
2018-07-20 茹炳晟 来自北京
《软件测试52讲》
课程介绍
讲述:茹炳晟
时长13:15大小6.07M
我在上一篇文章中,跟你分享了测试工程师应该具备的核心竞争力,大多是测试专业知识方面的内容。但是,在专栏第一篇文章中,我提到了这样一个观点:一个优秀的测试工程师,必须具备宽广的知识面,才能设计出有的放矢的测试用例,保证整个软件产品的质量。
所以,今天我要分享的主题就是,除了测试专业知识外,你还要掌握哪些知识,才能一路披荆斩棘,成长为一名优秀的测试工程师,或者是测试架构师。
与开发工程师相比,你需要了解的技术种类要多得多,视野也要宽广很多,只是在每类技术的深度方面不如开发工程师。
你可以参照下面这个比喻,来理解开发工程师和测试工程师的对知识的要求:开发工程师通常是“深度遍历”,关注的是“点”;而测试工程师通常是“广度遍历”,关注的是“面”。
那么,测试工程师需要掌握的非测试知识主要有哪些呢?
如果你花时间静下心来仔细想一下,很可能会把自己吓一大跳,需要了解掌握的非测试知识实在是太多了,这简直就是一个 mini 版的系统架构师啊!
小到 Linux/Unix/Windows 操作系统的基础知识,Oracle/MySQL 等传统关系型数据库技术,NoSQL 非关系型数据库技术,中间件技术,Shell/Python 脚本开发,版本管理工具与策略,CI/CD 流水线设计,F5 负载均衡技术,Fiddler/Wireshark/Tcpdump 等抓包工具,浏览器 Developer Tool 等;
大到网站架构设计,容器技术,微服务架构,服务网格(Service Mesh),DevOps,云计算,大数据,人工智能和区块链技术等。
可以说,测试工程师需要掌握的这些技术,几乎涵盖了当今主流软件技术的方方面面。当然,你也不可能一口气吃成胖子,所以我就挑选了几个我认为比较重要,又符合当前技术趋势的关键知识点,和你分享。
希望我的分享,可以帮助你在面对新的技术趋势时,站在更高的高度,更好地把握测试工作的内涵和外延。
网站架构的核心知识
现如今,互联网产品已经占据了软件行业的大半壁以江山。作为测试工程师,你很多时候都在和互联网产品,尤其是网站类应用产品的测试打交道。
这时,如果你想要做好互联网产品功能测试以外的其他测试,比如性能测试、稳定性测试、全链路压测、故障切换(Failover)测试、动态集群容量伸缩测试、服务降级测试和安全渗透测试等,就要掌握网站的架构知识。否则,面对这类测试时,你将束手无策。
比如,如果你不清楚 Memcached 这类分布式缓存集群的应用场景和基本原理,如果你不清楚缓存击穿、缓存雪崩、缓存预热、缓存集群扩容局限性等问题,你就设计不出针对缓存系统特有问题的测试用例;
再比如,如果你对网站的可伸缩性架构设计不了解,不清楚应用服务器的各种负载均衡实现的基本原理,不了解数据库的读写分离技术,你就无法完成诸如故障切换、动态集群容量伸缩、服务降级等相关的测试,同时对于性能测试和全链路压测过程中可能遇到的各种瓶颈,也会很难定位和调整。
这就有点像当年做传统软件产品测试时,我们必须了解软件的架构设计一样,现在被测对象成了互联网产品,我们就必须要了解网站架构。
所以,我强烈建议你要掌握网站架构的核心知识,你不需要像系统架构师那样能够熟练驾驭各种架构,并根据业务选型,但你至少需要理解架构相关的基本知识以及核心原理。
基于此,我在专栏的最后安排了一系列文章,包括了网站高性能架构设计、网站高可用架构设计、网站伸缩性架构设计和网站可扩展性架构设计,为你详细讲解互联网架构的核心知识,提升你的互联网产品测试能力。
容器技术
“容器”已不再是一个陌生词汇了,大多数人都在实际工作中或多或少地用到了容器技术。与传统的虚拟机相比,容器技术在轻量化程度、资源占用、运行效率等方面具有压倒性的优势。
除了那些专门做容器测试的测试工程师外,一般的测试工程师接触容器技术的机会也越来越多。
很多中大型互联网企业都在推行容器化开发与运维,开发人员递交给测试工程师的软件版本通常就是一个 Docker Image,直接在容器上进行测试。有些公司还会把测试用例和执行框架也打包成 Docker Image,配合版本管理机制,实现用容器测试容器。
对测试开发工程师来说,需要应用容器的场景就更多了。比如,目前主流的 Selenium Grid 就已经提供了官方 Docker 版本,可以直接以容器的方式建立测试执行环境,也可以很方便地在 Pivotal Cloud Foundry 和 Google Cloud Platform 等云计算平台上快速建立测试执行环境。
基于 Docker 的 Selenium Grid 大大减轻了批量虚拟机节点上 Web Driver、浏览器版本和守护者进程版本等升级维护的工作量。
测试开发工程师还可以通过 Docker Image 的形式,提供某些测试工具,而不是以传统的安装包或者 JAR 文件的形式,可以实现测试工具开箱即用。
可见,容器技术已经慢慢渗透到软件研发与运维的各个层面,作为新时代的测试开发工程师,你必须像熟练使用 VMware 一样,掌握 Docker 和 Kubernetes 的原理和使用方法。
那对于一个测试工程师来说,怎么才能快速具备容器相关知识,并上手涉及容器技术的互联网产品测试呢?
在这里,我还是要跟你强调选择学习资料时,一定要注意权威性,我给你的推荐依然是Docker 官网的教程,在这里你完全可以理清 Docker 概念以及具体使用方法,那再结合具体的实战,相信你必定收获颇丰。
云计算技术
一方面,很多企业,尤其是互联网企业都在尝试“上云”, 也就是逐渐把生产环境从原本的集中式数据中心模式转向私有云或者混合云模式。
前段时间,eBay 的一些产品线就对外宣布了和 Pivotal Cloud Foundry 的合作,会将部分产品线迁移到云端。显然,作为测试工程师,你必须理解服务在云端部署的技术细节才能更好的完成测试任务。
另一方面,测试基础服务作为提供测试服务的基础设施,比如测试执行环境服务(Test Execution Service)和测试数据准备服务(Test Data Service)等,也在逐渐走向云端。 比如,国外非常流行的 Sauce Labs,就是一个著名的测试执行环境公有云服务。
一些大型互联网企业,通常还会考虑建立自己的测试执行私有云。最典型的就是,基于 Appium + Selenium Grid,搭建移动终端设备的测试执行私有云。
所以,除了专门进行云计算平台测试的工程师,必须要掌握云计算的知识外,其他互联网产品的测试工程师,也要能够理解并掌握基本的云计算知识和技术。
在我看来,对于云计算的学习,你的侧重点应该是如何使用云提供的基础设施以及服务。我建议的高效学习方法是,参考你所采用的云方案的官方文档,再结合实际案例进行试用,学习效果会更好。
你可以尝试用云服务去部署自己的应用,同时还可以结合云平台提供的各类服务(配置服务,数据库服务等)和你的应用做集成。另外,我还建议你尝试用云平台建立自己的小应用集群,体验集群规模的动态收缩与扩展。你还可以尝试在云平台上直接使用 Docker 部署发布你的服务。
更进一步,你可以尝试在云端建立自己的 Selenium Gird 集群,现在 Selenium Gird 已经发布了对应的 Docker 版本镜像,你可以非常方便地在云平台上搭建自己的 Selenium Grid。
不要以为这会有多复杂,理解了 Docker 的基本概念以及对应云平台的使用方法,你就可以在短时间内快速搭建起这样的 Selenium 集群。
相信以上这些基本的应用场景,都将更好地帮助你理解云平台的核心功能以及使用场景,从而帮你完成对应产品的测试。
DevOps 思维
DevOps 强调的是,开发、测试和运维等组织团队之间,通过高效自动化工具的协作和沟通,来完成软件的全生命周期管理,从而实现更频繁地持续交付高质量的软件,其根本目的是要提升业务的交付能力。
DevOps 的具体表现形式可以是工具、方法和流水线,但其更深层次的内涵还是在思想方法,以敏捷和精益为核心,通过发现问题,以系统性的方法或者工具来解决问题,从而实现持续改进。
因此,测试工程师也必须深入理解 DevOps 思想的核心和精髓,才能在自动化测试和测试工具平台的实现上做出最契合的设计。无论是测试工程师,还是测试开发工程师,都会成为 DevOps 实践成功落地的重要推动力。
要想真正学习和掌握 DevOps,并不是简单地学习几款工具的使用,更重要的是需要有 DevOps 思维,能够将各个工具有机结合,提供高效的 CI/CD 流水线。
对于 DevOps,我建议的学习路径是,你可以从深入掌握 Jenkins 之类的工具开始,到熟练应用和组合各种 plugin 来完成灵活高效的流水线搭建,之后再将更多的工具逐渐集成到流水线中以完成更多的任务。
相信通过这样的学习,当你再面对相关的测试工作时,必然可以轻松应对。
前端开发技术
前端开发技术的发展突飞猛进,新的框架与技术层出不穷,Vue.js,Angular 和 React 等让人应接不暇。并且,还有很多在此类框架基础上开发的组件库可以直接使用,比如 AntD,大大降低了前端开发的难度和时间成本。
但是,前端开发技术的发展和测试又有什么关系呢?
从测试工程师的角度来讲,如果你能够掌握前端开发技术,也就意味着你可以更高效地做前端的测试,更容易发现潜在缺陷。同时,你还可以自己构建测试页面,来完成各类前端组件的精细化测试,大大提高测试覆盖率和效率。
从测试开发工程师的角度来讲,很多测试平台和工具都需要 UI 界面,比如很多公司内部构建的测试数据服务和测试执行服务,如果你能熟练掌握基本的前端开发技术,那你就可以很方便、高效地构建测试平台和工具的 UI。
关于前端技术的学习路径,通常你首先需要掌握最基本的 JavaScript、CSS、JQuery 和 HTML5 等知识,然后再去学习一些主流的前端开发框架,比如 Angular.js、Backbone.js 等。当然现在的 Node.js 的生态圈非常发达,你如果能够掌握 Node.js,那么很多东西实现起来都可以得心应手。
我个人推荐从网上下载一些样例代码进行学习,同时学习使用脚手架从无到有去建立自己的前端应用。
总结
为了应对技术发展趋势,做好软件产品的测试工作,软件测试工程师需要掌握非常多的非测试专业知识,包括:网站架构、容器技术、云计算技术、DevOps 思维,以及前端开发技术的核心知识以及实践。
对于这类新技术的学习,我强烈推荐你直接阅读官方网站的文档以及代码示例。这种方式,可以让你少走弯路,同时保证所学内容是最新的。
当然,我跟你分享的这些非测试专业知识,只是众多技术的冰山一角,你在实际的测试工作中也会遇到更多的技术,希望你可以举一反三,不断扩充自己的知识面,向着一个优秀测试工程师、架构师努力!
思考题
你所在的测试领域,还有哪些非测试知识是必须掌握的,这些知识可以从哪些方面帮到你呢?
欢迎你给我留言。
分享给需要的人,Ta购买本课程,你将得20元
生成海报并分享
赞 20
提建议
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
09 | 软件测试工程师的核心竞争力是什么?
下一篇
11 | 互联网产品的测试策略应该如何设计?
精选留言(58)
- Cynthia🌸置顶2018-07-22难怪我之前就有这种感觉:想要测好一些东西,得懂得好多东西啊,而对于开发来说只要懂十之一二就行了。 然后就好烦躁,觉得啥都要会,又觉得啥都不会。 原来这就是测试工程师所需要的知识广度……不过还是挺迷茫,到底每一块要学到什么样的的度,毕竟时间精力有限。
作者回复: 其实你提出的困惑非常具有典型性,相信很多人都有和你类似的困惑。这里我有两点建议,希望可以帮助到你:第一,跟着你的测试项目去有针对性地学习项目相关的技术,而不是所有的技术都去泛泛地学,往往只有那些实际经历过的项目和技术才能真正成为自己的,对于项目用的技术千万不要一知半解,而是必须深入掌握,那么随着时间的推移,你的技术积累就会越来越强。第二,对于一些主流的通用的技术,比如现在的容器技术,网站架构知识等,我建议通过业余时间自学,至于学到什么程度取决于这个技术本身的特点,比如docker我觉得基本只要能够掌握基本概念以及常规的使用方法就基本足够了,而对于网站架构知识,由于你毕竟不是系统架构师,所以要做到在谈论架构的过程中,你能够理解那些名词和概念,至少能够可以和系统设计人员有共同的技术语言,不至于当对方说缓存集群,消息中间件的时候你完全不知所云。
共 5 条评论71 - shotgun置顶2018-07-20文章内容都是泛指,有没有具体的案例和代码实现说明问题
作者回复: 这篇文章的确都是方向性的东西,其中每个主题就会有大量的内容,往往都需要先理解概念,然后再是案例以及代码。
共 3 条评论12 - dany2018-08-07看完好累啊,感觉这也不会那也不会😒33
- Ana2019-06-20外界认为测试工程师门槛低,殊不知要成为一名合格和优秀的测试工程师要求的知识体系的深度和广度比开发还要高. 一直有畏难情绪,害怕接触新知识,没有人可以一起学习和讨论,遇到问题就钻牛角尖,这都成了自己逃避的借口。首先要有信心和目标,要成为怎样的人,以目标为导向才能客服问题,多交流请教。 以接触的项目测试入手去了解相关技术和设计实现,不止是了解,还有深入理解,这点很重要。 虽然有些开发不愿意跟你讲那么多,这就要求你学会沟通技巧,怎样有效高效提问,平时打好关系,等等。我这人脸皮太薄,害怕拒绝,要改变展开共 2 条评论17
- 海2018-07-20一入IT深似海,只有终身学习才能不被拍在沙滩上。要学的东西太多了,瞬间感觉可以鄙视开发、运维、架构师,也都被他们鄙视。
作者回复: 好贴切的形容词
共 3 条评论14 - 程军2018-07-20作者技术广度深度都很强
作者回复: 其实很多东西我也是太懂的,但是一旦要用到了,需要有能快速捡起来的能力
8 - 永不放弃2018-07-20以后的学习多多看官方教程,自己英文不好,看不懂一般!
作者回复: 其实很多人都有这个问题,也是比较共性的,但只要你静下心来去读,你会发现其他技术文档的英语还是很好懂的,只有迈出了第一步,后面后会越来越顺利
共 2 条评论7 - arthur2018-07-20容器,云,devops,前端,或多或少都接触过或自学过,但是只要没在项目上运用,很快就忘记了。最好的方法还是去自己做点东西出来
作者回复: 其实学会和学会还是会有很大区别的,学过的话你后面要拿起来是很方便的,可以说一点就通。
5 - sylan2152019-02-13说说我的理解: 1.我把测试经验图谱分为两大类:硬技能和软技能; 2.硬技能包括业务逻辑、系统知识、通用知识和测试知识,其中特别强调把业务逻辑独立开来,因为对业务逻辑的了解深度并不能算经验,对业务逻辑的快速了解的能力才算是经验,系统知识即包含了茹老师提到的所有的技术基础能力储备; 3.软技能,相对硬技能来说,测试人员的软技能要求显得尤为重要,一个和开发配合默契的测试,可能会比一个单纯技术好的测试要优秀的多。 以上,欢迎关注公众号「sylan215」一起沟通交流。展开4
- 静静张2018-08-19老师,你的知识体系特别系统,特别想了解一下你是怎么自我成长的,做了哪些工作,花了多少时间,以及一些学习的资源和方法,有点贪心了,哈哈4
- hi !girl2018-07-23为了方便维护一些东西,前个星期在jenkins上折腾部署了一个脚本,从此告别命令执行、打包、上传等繁琐的流程,最近在完整学习Jenkins……在我看来,不断了解一些新技术,最大的好处就是知道怎么优化测试,怎么提高测试效率4
- 云筑2018-07-20我在iot领域,需要了解嵌入式开发的相关知识4
- 海2018-07-20一入IT深似海
作者回复: 哈哈,我也有这种感觉,不会无论哪一行,想做精了都不容易的
4 - 黄嘉华2020-03-22与前端开发技术相对应的,后端开发技术也很重要,搭建测试平台,配置测试数据,调度测试任务,提升团队效率等等都用的上。在开发过程中,你也更能理解测试。就好比登录模块,你自己写一个平台的登录,会有更深的体会。很佩服作者视野的广阔,精华!3
- rhyme2019-02-25我觉得还是先学习语言吧,光是能熟练掌握Java 和 python,就已经占了我很多时间了,工作的时候没时间,都只能靠业余时间学习,要学的东西又很多,所以只能一步一步来,语言肯定是第一位,有了语言基础,也能看懂开发的代码,至于一些框架类的,就需要按需学习了3
- 刘斌宇2018-07-20这么多技术就接触了jenkins😂
作者回复: 如果能把Jenkins和各种plugin玩转了也是很厉害的
3 - longMe2021-09-05目前我的知识范围有linix, shell, linux系统配置, 前端, docker, python, 爬虫, 数据分析pandas, python多线程, 大数据组件, mysql, jmeter, postman, httprunner, selenium, pytest. 接下来学下djiango, k8s等.2
- 捷后愚生2020-07-05老师说:对于这类新技术的学习,我强烈推荐你直接阅读官方网站的文档以及代码示例。这种方式,可以让你少走弯路,同时保证所学内容是最新的。 这个观点我是双手赞同的。 不过,我认为有变通之处。比如,对于从来没有接触过docker的人,想学习docker就直接去啃官方文档,首先可能是英语水平不过关,对本来不熟悉的东西,在阅读时还得一个个查询单词的翻译,对初学者来说会很影响情绪。所以,我想这个时候可以先找一个简单一点的学习方式,比如找一些入门的视频先看一下,能跟着视频搭建环境操作一下就更好,然后再去看官方文档,可能会有一种豁然开朗的感觉。 或者有时候,通过阅读官方文档的文字描述,实在是不理解意思,比如我看python中的“递归”这一个概念,就怎么都看不明白,不理解。这个时候,可以找一些其他资料学习,看看别人怎么把这个概念讲清楚。 当然,能够直接阅读官方文档快速学习这是最好不过了,不过可能对我来说需要时间的积累。自己以后也多一下看官方文档,把能力提升上去。展开2
- 小老鼠2018-10-081,测试工程师还有一个最重要的学习内容是业务知识。对于那么多知识,如何来学? 2,如何自学DOCK技术? 3,中国未来使用DevOps体系的企业会占所有IT企业的几成?2
- pany2018-07-30机器学习。应用人工智能算法解决自动化测试问题,也是热点😂 学不完啦……
作者回复: 是的,我也做过一点这方面的工作,比如失败用例的自动分类等👍
2