清明三天,由于新冠病毒疫情原因不能外出,待在家中总结了?下10年来软件测试?作中?到知识点,整理成?份思维导图分享给?家。
当时是懂了,但是过后就忘记了,我觉得主要原因还是没有建???的知识体系。
这份思维导图中,我将软件测试的知识体系或者叫技能树分成两部分,?个是计算机基础,?个是专项
测试。我把计算机基础叫做内功,专项测试叫做招式。我认为软件测试?平?低往往取决于内功的深厚
程度。招式易学,内功难修。
这份思维导图我并没有将需要掌握的每??知识和技能展开来介绍。因为这份图的主要?的是,帮助?
家建?属于??的测试知识体系和测试技能树,就像我给?家搬来了?棵只有树?的?树,需要?家依
靠??平时积累,为这棵?树增加树枝和树叶,让??的测试技能树枝繁叶茂。
(点击图?查看并保存?图)
1. 计算机基础知识(内功)
想成为?名合格的软件测试?程师,和其他任何 IT ?程师?样,在?作中扎实的计算机基础知识都是?关重要的。?论是从个?的职业发展?度,还是从公司招聘候选?的?度,计算机基础知识都是必备条
件和必考内容。某种程度上说,计算机基础知识掌握的程度,决定了软件测试?作得优秀程度,也决定
了软件测试职业?涯的?度。
从软件测试领域来讲,?定要掌握的计算机基础知识主要包括:操作系统、计算机?络、数据库、编程
语?、数据结构和算法以及架构知识。当然,计算机基础知识还包括计算机组成原理、编译原理等基础
学科,我们要不要掌握呢?从我的经验来看,软件测试?作并没有直接?到过这两?学科的知识,所
以,这?我不会介绍它们。
下?,我来分别介绍操作系统、计算机?络、数据库、编程语?、数据结构和算法以及架构??,软件
测试?程师需要掌握的内容。
1.1 操作系统
这?说的操作系统,特指的是Linux操作系统,在计算机?业,Linux操作系统绝对在操作系统领域占据第?把交椅。?先,对于服务器端软件,70%以上都是部署在Linux操作系统上的,其次,客户端的操作系统Android也是基于Linux内核开发的。现在?较?的前沿技术,?如云计算、虚拟化、容器技术、??智能、?数据,每?项都离不开Linux技术。
随着容器技术的普及,容器和容器云在软件测试领域的应?越来越?泛。最?的应该属于Docker容器和Kubernetes容器云技术了。我们可以利?Dokcer快速搭建测试环境、部署被测试服务,使?Kubernetes作为Jenkins slave进?持续集成、快速搭建分布式性能测试环境。因此,掌握Dokcer和Kubernetes的使?,了解他们背后的原理,?定会让我们测试?作更加?效。
关于Docker容器和Kubernetes容器云,我并没有看过纸质版图书。我是照着Docker的官??档,以容器化?个Python Web应?的实践掌握了Docker的基本使?,?家可以参考我的另?篇博?《通过容器化Python web应?了解Docker容器的核?功能》来亲?实践?下。
关于Kubernetes,我通过学习极客时间的专栏《深?剖析Kubernetes》,成功地将Kubernetes应?到了我们的持续集成和性能测试环境搭建中的。
通过对Docker容器和Kubernetes容器云的学习和应?,让我更加深信带着?的、通过动?实践的学习?法,是事半功倍的,是最?效的。
1.2 计算机?络
关于计算机?络,你可能?较困惑,感觉只是在?试时,?试官会问过TCP和UDP的区别、TCP建?连接的三次握?流程,HTTP协议是怎么?回事。感觉计算机?络都是偏理论的内容,在实际?作实践中?到的并不多,是不是不需要深?系统的学习呢。如果你这样想,就?错特错了。
?先,在软件测试?试中,不管是应聘哪?个级别,计算机?络?定是必考的内容。如果?试中还解答
不出TCP和UDP的区别、三次握?四次挥?的流程和状态转移过程、解答不出HTTP协议请求头和响应头各字段含义、HTTPS为什么?HTTP更安全的?试问题,那肯定是应聘不到?仪的岗位。所以,就算为了?试,也?定要掌握好计算机?络的知识。
在?常的软件测试?作中,当遇到?络不通、发现?络请求异常时,计算机?络知识的储备就派上?场
了,你需要到ping和telnet来判断是?络问题还是服务异常,你需要通过tcpdump或者wireshark抓包分析?络包的异常,需要?charles或者findler拦截HTTP请求分析请求和响应。
计算机?络概念太多,知识太零碎,?定要建?起知识体系,并加强练习和实操才能记得住。 知识体系的建?可以基于计算机?络的分层体系,理解数据链路层、IP层、传输层和应?层,这些层各是为了解决哪些?络问题,为了解决这些问题设计了哪些?络协议,?络协议的数据格式是什么样的,执?这些
?络协议的是设备是什么,如何通过各种命令配置?络和排查问题。
计算机?业新技术滚滚?来,也不断被淘汰,?计算机?络?定是值得你掌握,让你?期受益。
1.3 数据库
现代软件服务端越来越复杂,数据越来越多,不同的数据有不同的存储需求、也有不同的应?。因此?
前市场上数据库的种类特别多,?得?较多的数据库有Mysql、Redis、MongoDB。还有?种不能称为数据库,但是在数据处理领域应?特别?泛的Kafka。
数据库是我们测试?程师?常?作中?的最多的软件。为了准备测试数据,我们可以在数据库中修改或
插?数据;发现接?请求的数据不符合预期,我们需要到数据库中查询存储的数据;发现请求响应特别
慢,我们会检查数据库是否有慢查询;为了优化数据库的查询效率我们会优化查询语句、给数据字段增
加索引;为了提?并发量、减少响应时间,我们会引?Redis作为数据库缓存。在使?kafka进?业务隔离的微服务架构中,测试时,我们会通过写kafka构造数据或者读取kafka校验结果,从?解耦测试时对上下游系统的依赖。
虽然数据库种类众多,增加了我们的学习任务,但我们可以从最常?的数据库??,?如MySQL,详细了解它的常?操作、背后原理及性能优化技巧。我记得我的第?本学习MySQL的书,是?本?册?,叫《MySQL必知必会》,学习完MySQL后,再后来遇到Redis、MongoDB、Cassandra等其他数据库时,
学习起来就快多了。
1.4 编程语?
提到编程语?,对于部分测试同学来说可能会望??畏,很多同学也是因为惧怕编程才选择软件测试?
业的。但是,我想说的是,软件测试?业发展到现在,编程语?已经是必备技能了,从事软件测试?
业,如果不会编程也是会被淘汰的。
部分测试同学惧怕编程,我也感同身受,因为当时我也是惧怕,觉得编程太难了,很多语法记不住,语
法记住了也不会上?写代码。我不是计算机专业的,和?家?样,在学校时学的唯???编程语?是C语?,再加上不懂数据结构和算法,做起课程设计、毕业设计真的太痛苦了。所以从上?学时就下定决?了,以后?定要放弃编程这条路了。
毕业时,和?家?样找了?份软件测试的岗位,?作?年之后,发现测试?作中越来越需要我们编程实
现?些??具辅助测试。编程?回到了我的?活中,不过这次我换了??语?——Java,因为当时公司???位前辈给我安利了Java的种种好处,有各种现成的?具库,可以快速解决实际中的问题。凭借着在学校时学C语?留下?的?些编程基础概念,?如循环、分?、条件、变量等,再配合Java中的?具类,我真的将Java?到了?作中,这使得我对编程重新有了信?。
到了2014年,软件测试?动化已经成为趋势,我认识到要想继续在软件测试领域?下去,?定要掌握?动化测试本领。当时我调研了各种?动化测试?具、测试框架,发现?部分?动化测试?具和框架都?
持Java和Python语?,?且?部分?推荐使?Python做?动化测试。从那时起,我就与Python结缘,当时我记得Python版本还是2.5或者2.6版本。相?于Java,Python更加简洁的语法,更加丰富的内置库和第三?库,使得我抛弃了Java,钟情上了Python直到现在。
现在,我使?Python进?服务端接?测试、进?WEB测试、APP测试以及性能测试,开发?些测试?具及Web系统。Python 3.0增加的更多新特性,使得我们编写测试代码更加如?得?。简洁?效的语法,使得我们可以适?最少的代码完成?作任务。不仅仅是软件测试领域,随着??智能的?爆,Python语?也成为现在排名前三的热?语?。
说了这么多,我想告诉?家的是,?定要学会编程,否则真的会被淘汰。之前学不会像CJava编程语?,现在有了简单的Python语?,我相信你?定能学会,你看我都学会了,你也?定?的。我记得我当时学习Python使?的是?本特别短?的电?书,中?叫《简明Python教程》,这本电?书?直在更新,?家有兴趣可以看下。另外,国内?较好的?络教材是廖雪峰在他的个?博客上发布的Python教程。纸质书我看过两本,?本是《Python核?编程》,这本书是基于Python2写的,不过??的核?内容现在也不过时,另外?本是《Python Cookbook》,这本书也有电?版。
1.5 数据结构与算法
数据结构和算法可以说是我?次?试碰壁后, 才使得我下决?去攻克的。如果去BAT这样的??求职,数据结构和算法,?试时?定要考的。因为我不是计算机专业,所以在学校??是没有学过这?课的,
我是在?作后,在各种招聘?站的招聘信息中知道这?知识的。
?次?试碰壁,驱使我去系统学习?下数据结构和算法,可是并没有找到好的教材,讲授这??知识的
?络课程也不多,我想也可能是由于讲起来太难吧。看了看?学??使?的教材,感觉都?较晦涩难
懂,所以?直没学会。
但是我平时?直留?收集这??的学习材料,直到有?天,我遇到?本书叫《图解算法》,让我顿时眼
前?亮,??丰富的插图,细致的讲解,让我花了?周的时间看完后,?呼过瘾。我想有的时候,学习
就是这样,只要你?直坚持不放弃,终会有那么?刻让你顿悟,这?时刻可能是遇到?本适合??的
书,也可能是遇到?个??给你指点了??。这本书让我对学会数据结构和算法??增加了信?。另外
?本数据结构和算法书也很不错,书名是《?话数据结构》,也推荐?家看看。
再后来,2019年时候极客时间出了??课程叫做《数据结构与算法之美》,课程出来时,我就订阅了,在2019年?年中,我?致看了3遍。第?遍特别痛苦,第?遍好点,第三遍时我把学习笔记整理到了我的博客上。?前这?课已经累计近8万?订阅,我从中确实学会了数组、链表、栈、队列、散列表、树、堆常?的数据结构及其上的算法,还学会了递归、排序、?分查找、字符串匹配和哈希算法这些思想,
学完之后真的感觉我脑袋好像变聪明了。
现在,我平时会在Leetcode?站刷刷题,巩固?下所学。通过学习数据结构与算法,使得我对Python和Java的?些底层原理也有了更深刻的了解,我的编程能?也得到了进?步的提升。所以,很多知识是相通的、相互辅助的。
1.6 架构知识
2016年加?蔚来汽?参与?联?系统测试,伴随着微服务架构的转型,对测试策略和?案也提出了前所未有的挑战。各种服务变的越来越?,变的越来越多,服务发现、?关、监控体系、新的CICD流程,突然感觉??的知识储备不够了。
在微服务下,准备测试数据、测试解耦、定位和排查问题,与之前的单体应?完全不同。这时,我打算
深?了解?下微服务,解开微服务的?纱,探寻微服务下服务端架构的全貌。由于架构因公司?异,因
业务?变,看市?上的经典架构??的书籍可能不太?效,所以我从公司内部的微服务架构出发,了解
什么是服务发现,如何做服务发现,?关的作?和价值,微服务下的监控体系如何运作。对这些有?定
了解后,作为极客时间的重度?户,我在极客时间上订阅了??课程《微服务架构核?20讲》,这?课从理论到实践,介绍了微服务关键问题。通过这?课程让我对微服务架构有了更加全?、清晰理解。
你可能会问了,作为软件测试?程师,有必要了解架构知识吗?我觉得?常有必要,因为只有深刻理解
了服务端架构之后,你才能设计出合理的测试策略,才有办法解耦服务间依赖,才能针对性的进?测试
数据准备,出了问题才能够定位是?关的问题、还是服务发现的问题、还是逻辑代码的问题,你才能理
解线上 警意味着什么问题。
在微服务时代,架构知识也是软件测试?程师需要掌握的基础知识。
2. 专项测试(招式)
我为什么把各项专项测试称为招式呢?因为我觉得他们都是套路。不管是服务端测试、WEB测试、APP测试还是性能测试,他们的基本套路是?致的:准备测试数据、搭建测试执?环境、执?测试、校验结
果、产?测试 告。
他们的不同点只是使?的测试?具不同,?如服务端测试HTTP协议时,使?使?request这个Python库,WEB测试使?的是Selenium,APP测试使?的Appium,性能测试使?的是Jmeter或者Locust。
这些不同的?具也有很多共同点,?如进?web?动化测试的Selenium和进?APP?动化测试的Appium都是基于webdriver的,他们的使??同?异。
下?,我将这些套路拆解开了给?家看。
2.1 测试基础
不管是?动测试还是?动化测试,测试?程师的基础?作都是?样的,都要了解软件研发流程,都要编
写测试?例,准备测试数据,提交并分析BUG。
在软件研发流程中的不同阶段,要及时和完整输出测试?作的产物。通常的敏捷软件研发流程是:需求
评审——>?案讨论——>?作排期——>提测迭代——>版本发布——>总结回顾。软件测试?作对应的各阶段产物应该是需求分析、测试?例、测试计划、执?测试、测试 告、测试总结与分析。
在设计测试?例时,???要根据产品的需求分析和提炼出测试?例,另???也要根据系统的架构设
计技术层?的测试?例。
测试数据准备,需要灵活采取多种?段,常?的?段主要有:
基于GUI的测试数据?成?法
基于API的测试数据?成?法
基于DB的测试数据?成?法
基于MQ的测试数据?成?法
基于第三?库?式的测试数据?成?法
综合运?上述?法?成测试数据
准备测试数据的时机也需要根据实际情况选择在测试执?时或者测试执?前准备。创建耗时时间?较?
的测试数据,不需要经常变动的测试数据最好提前创建,对于那些经常变动测试数据,最好在测试执?
时创建,执?完成后要及时删除测试数据。
BUG作为测试?作的?项重要产出,?定要完整、明确提供BUG信息,并对BUG做出?定的分析,以便开发?员能够定位和解决BUG。?个优质的BUG应该包含:明确标题、优先级、所属模块、是否必现、重现步骤、必要的?志或者截图,bug的原因分析等信息。
2.2 ?动化测试基础
要想开展?动化测试,有三个基本技能。第?,要掌握??编程语?;第?,要掌握?种单元测试框
架。第三,要掌握?种测试 告框架。
?动化测试,设计到编写脚本开发?具,需要掌握??编程语?才可以。?前软件测试领域常?的编程
语?有Java和Python,?家可以选择任意?种来掌握。
除了编程语?,我们还要掌握相应的单元测试框架,Java中常?的单元测试框架是TestNG,Python中常?的单元测试框架是Pytest。单元测试框架的价值在于,帮助我们管理测试?例、执?测试?例、?便进?测试数据参数化,进?断?和输出测试结果。有了这些功能后,我们只需要关注我们测试代码的逻辑
编写就好了,??提?了我们测试的效率。
对于软件测试?作来说,测试 告是?常重要的?作产出。?个漂亮、清晰、格式规范、内容完整的测
试 告,既能最?化我们的测试?作产出,?能够减少开发?员和测试?员的沟通成本。?前,市场上
特别流?的开源测试 告框架是Allure,它可以?便的与各种测试框架集成,只需要很少的定制步骤,就可以产出漂亮的测试 告。我之前曾经写过??关于Allure与Pytest集成的博?《?Pytest+Allure?成漂亮的HTML图形化测试 告》,感兴趣的可以参考。
2.3 代码级质量保障
代码级质量保障,主要是从业务代码静态审查、单元测试?度来执?的。我们知道BUG越早发现修复的成本越低,发现的越晚修复的成本越?。因此我们需要在代码编写、提交代码和编译阶段进?代码级的
质量保障。
代码编写和提交结点,保障代码质量的通常做法是Code Review和静态代码扫码,发现代码中不符合规范和难于理解地?。开发?员要根据Review的反馈和静态扫码的结果,修改和完善代码。
另外,编写单元测试也是保障代码质量、更早发现软件BUG的常??段。?覆盖率的单元测试往往能提供?质量的代码,就会有越少的BUG在测试?程师测试阶段被发现。
重视软件质量的团队,?定是重视Code Review和单元测试的团队。这样的团队往往能提供?质量、及时的软件交付。
代码级的质量保证?作,往往是开发?员来负责,作为测试?程师,可以考虑提供好?的测试数据准备
?具、测试环境搭建?具,让开发?员更好的完成?测。
2.4 服务端测试
服务端测试常?的是API测试,也有?些?API的服务测试。对于API测试我们需要拿到API?档,按照API?档的描述,调?API并校验Response。对于?API的服务端测试,往往是需要根据业务逻辑通过其他?段输?测试数据,并检查服务处理后的输出结果。
有的时候,如果拿不到API?档或者不清楚服务内部的逻辑,就需要通过抓包、和开发?员沟通、查看业务源代码等?式,明确API或者服务的逻辑信息,再进?针对性的测试数据准备、测试?例设计。
对于服务端测试,发起测试的?段有Postman、Curl或者通过编写代码,通常来讲,试验性的查看接?是否能通,会使?Postman、Curl这类?具,但是为了更加全?、能够?便与CI流?线集成,我们更加推荐使?编写代码的?式发起测试。
服务端测试的检查点,我们通常要求对响应结果,以及数据流过的所有环节,包括数据库、ka?a等进?校验,这样做的好处是,???能够强迫我们要对每?个接?或者处理流程做到?中有数,在后续服务
出现问题时,能够很快的定位到问题所在。另外?个??,当测试?例执?失败时,也能很快定位失败
的位置,提交BUG时,就能够很快的给出BUG的出错的原因。
根据测试?字塔,服务端测试要尽量做到全?,更?的测试覆盖率,以便为客户端测试提供稳定的环
境。
2.5 持续集成
我们编写?动化的?的,不是为了能够在本地电脑上偶尔跑?次,?是为了能够将?动化测试集成到公
司整个CICD流?线中,持续进?测试,提?研发部署效率。因此我们的?动化测试,?定要接?到CICD流?线。
现在很多公司的CICD流程都是围绕Jenkins来开发的,对于测试?程师,要了解Jenkins的?作原理和集群特点,熟练掌握Jenkins的Pipeline语法,定制测试流程。
测试?程师还要维护运?测试的Jenkins Slave集群,?前?部分公司的Jenkins slave采?的是虚拟机?式,不过随着容器云技术的普及,也有部分公司采?Kubernetes集群作为Jenkins slave。对于虚拟机?式,测试?程师需要编写脚本,快速初始化Jenkins slave并加?到Jenkins集群,对于Kubernetes?式,测试?程师需要编写满?特定测试需求的kubernetes的Pod的Yaml?件。
2.6 WEB测试
Web测试是对基于浏览器的BS架构的服务进?测试,通过操作浏览器来检查服务是否满?需求定义。要想做好Web测试,需要掌握的知识?常多,要了解HTMLCSS以及JavaScript的知识,还要了解浏览器的?作原理,能够使?浏览器的开发者?具诊断问题、分析性能。
Web??不稳定、或者在开发初期的项?,通常采???测试?法。对于回归测试、UI?期稳定的??配合部分?动化测试。
如果要做?动化测试,还需要掌握Selenium的使?,能够对浏览器元素进?定位和操作,能够使?PageObject模型封装??元素,提?测试的可维护性,能够通过Selenium Grid进?多浏览器的并?测试。
将web浏览器?动化测试脚本与单元测试框架融合,并与持续集成流?线集成到?起,才能发挥Web?动化测试的真正威?和价值。
2.7 APP测试
APP测试是?前测试?作中最常?的?个领域,公司可能没有服务端测试、没有性能测试,但是?定会有APP测试,APP作为直接接触?户的产品,软件质量保证?作尤其重要。
APP测试?较常?的包括Android APP测试、iOS APP测试、H5测试、Hybrid APP测试以及?程序测试等。通常的测试策略是,?部分的?动测试配合部分场景的?动测试。
APP的?动化测试?案与Web?动化测试?案基本相同,不过使?的?动化?具是Appium,Appium可以?持Android和iOS客户端的测试。通过Page Object思想,将APP??上的控件进?封装,可以提?测试的可维护性。借助Selenium Grid可以进?多机并?测试。
为了提?测试设备的利?效率,可以搭建STF平台,集中统?管理所有的测试设备,所有的测试?员可以通过浏览器来共享这些设备。并且这个平台还可以与?动化测试结合,将其作为?个私有云测平台,进
?步提?测试效率和测试覆盖率。
对于APP测试的专项测试也是APP测试的重要?作,专项测试包括性能测试、稳定性测试等。?前也有很多测试?具?持这些专项测试,当然也可以根据需要??开发测试?具。
2.8 性能测试
通常说的性能测试,基本都是指的服务端的性能测试,伴随着?户的增多,服务端的性能和稳定性?关
重要,对其进?性能测试是必要的。
性能测试通常是借助?定的?段,模拟?量?户的并发请求,观察服务端的响应时间和QPS等数据,以判断服务端性能瓶颈,并对其进?优化或者扩容。通常?来模拟?量?户并发请求的?具包括Jmeter、Locust等。
在进?性能测试时候,通常需要?量的客户端机器组成集群?起向服务器端发起请求。因此性能测试集
群的搭建,在性能测试?作中?常重要。在早期我们通常是申请?配置的虚拟机来组成性能测试集群,
不过这种?式有诸多弊端,?个是代价昂贵,?是初始化?较麻烦。所以,伴随着容器云的发展,现在
越来越多采?在Kubernetes集群中构建性能测试集群。
性能测试往往需要准备?量的测试数据,所以往往需要编写脚本和?具来?动化?成测试数据。对于测
试?员的代码编写能?要求很?。
性能测试结果收集,是性能测试的关键?环。我们需要得到性能测试结果并对其进?分析。?前常?的
收集?式是通过监控系统,?如falcon、Promethus等,对服务进?业务监控、资源监控,监控系统会绘制各种指标?常直观的图表,?常便于我们分析。
对于性能测试结果的分析,真的是?个?深的技能。在这个环节会?上计算机基础(内功)部分各个学
科的知识,需要从代码层?、数据库层?、?络层?、操作系统层?找出性能瓶颈的根本原因。这?点
?常难,需要多年的实践经验。
2.9 测试平台开发
测试平台的?的是更好地辅助测试?作,通常我们会为测试?作开发?些测试数据?产平台,Mock平台、测试执?管理平台、测试 告管理平台。
测试数据?产平台,作为测试数据准备的统?平台,集成了各种测试数据准备?法,对外提供Res?ulAPI,所有测试数据使??,可以通过唯?的平台和API产???所需要的数据。
Mock平台,?便对依赖服务进?Mock,以便解耦依赖服务,专注于本模块、本服务的测试,提?测试稳定性。
如果需要,可以将所有测试执?集成到?个测试执?管理平台上,这个平台对接Jenkins,在平台上?便进?测试Job的创建和配置,简化测试执?流程。
测试 告平台作为测试 告的存储、分析和展示平台,可以查询历史上所有测试的测试结果。对被测试
服务的历史版本质量进?分析。
总之,测试开发?作在软件测试?作中,将会占据越来越多的?例,测试?程师要掌握?定的开发技
能,?如借助常?的开发框架Django或者SpringBoot,配合前端框架Vue.js,进?测试平台开发是性价??较?的?案。
3. 综合素质
前?介绍了计算机基础( 内功)和专项测试(招式),为了更好地做好测试?作和更好的职业发展,?些基本的素质也是?常重要的。
?先,我觉得测试?程师要保持学习热情,锻炼学习?法,提?学习能?,能够在需要的时候快速学习
新的技术。
测试?程师作为研发团队的?份?,具备良好的沟通表达能?,做好与产品经理、开发?员之间的沟
通,及时预警潜在?险,展示项?质量,推动和协调团队解决问题。
?常建议?家及时总结所学知识,养成写博客的良好习惯,?家都说输出是最好的输?,在写博客进?
输出的过程中,其实是对??的知识进?加固的过程。
4.总结
总之,软件测试?作是?项?常综合?作,对于测试?程师要求的技术?特别?,既要懂得操作系统、
计算机?络、数据库、编程和算法等基础知识这些内功,?要掌握多种测试领域的测试套路,还要具有
?定的开发能?。既要懂软件测试,还要了解DevOps。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!