1. STest软件测试社区首页
  2. 测试经验

十年老兵教你构建软件测试知识体系和技能树

帮助大家建立属于自己的测试知识体系和测试技能树,就像我给大家搬来了一棵只有树干的大树,需要大家依靠自己平时积累,为这棵大树增树枝和树叶,让自己的测试技能树枝繁叶茂。

 本文的主要目的是,帮助大家建立属于自己的测试知识体系和测试技能树,就像我给大家搬来了一棵只有树干的大树,需要大家依靠自己平时积累,为这棵大树增加树枝和树叶,让自己的测试技能树枝繁叶茂。

十年老兵教你构建软件测试知识体系和技能树

其实现在网络上关于软件测试的知识很容易得到,各种公众号、各种博客,以及线下各种测试大会,都能方便得到各种实践干货。我也是关注了十几个公众号、很多博客,也经常参加各类测试开发大会。但是,我慢慢发现这些公众号、博客或者大会的分享,往往是关注于某一个点,碎片化很严重。很多时候当时是懂了,但是过后就忘记了,我觉得主要原因还是没有建立自己的知识体系。

在本文中,我将软件测试的知识体系或者叫技能树分成两部分,一个是计算机基础,一个是专项测试。我把计算机基础叫作内功,专项测试叫作招式。我认为软件测试水平高低往往取决于内功的深厚程度。招式易学,内功难修。

本文我并没有将需要掌握的每一门知识和技能展开来介绍。因为本文的主要目的是,帮助大家建立属于自己的测试知识体系和测试技能树,就像我给大家搬来了一棵只有树干的大树,需要大家依靠自己平时积累,为这棵大树增加树枝和树叶,让自己的测试技能树枝繁叶茂。

十年老兵教你构建软件测试知识体系和技能树

01

 

计算机基础知识

想成为一名合格的软件测试工程师,和其他任何 IT 工程师一样,在工作中扎实的计算机基础知识都是至关重要的。无论是从个人的职业发展角度,还是从公司招聘候选人的角度,计算机基础知识都是必备条件和必考内容。某种程度上说,计算机基础知识掌握的程度,决定了软件测试工作的优秀程度,也决定了软件测试职业生涯的高度。

从软件测试领域来讲,一定要掌握的计算机基础知识主要包括:操作系统、计算机网络、数据库、编程语言、数据结构和算法以及架构知识。当然,计算机基础知识还包括计算机组成原理、编译原理等基础学科,这些我们要不要掌握呢?从我的经验来看,软件测试工作还没有直接用到过这两门学科的知识,所以,这里我不会介绍它们。

 

下面,我就来解释一下软件测试工程师为什么要掌握操作系统、计算机网络、数据库、编程语言、数据结构和算法以及架构方面的知识,并跟大家分享一下我的学习经验。

1.1 操作系统

十年老兵教你构建软件测试知识体系和技能树

这里说的操作系统,特指的是Linux操作系统,在计算机行业,Linux操作系统绝对在操作系统领域占据第一把交椅。首先,对于服务器端软件,70%以上都是部署在Linux操作系统上的,其次,客户端的操作系统Android也是基于Linux内核开发的。现在比较火的前沿技术,比如云计算、虚拟化、容器技术、人工智能、大数据,每一项都离不开Linux技术。

软件测试工作,也是离不开Linux操作系统,比如,我们会通过ssh登录到服务器上,使用tail命令查看日志;我们会通过ps或者top命令,查看服务器上的进程状态;通过vim命令编辑服务的配置文件;会通过yum、apt-get、rpm命令安装软件包;某些时候还会编写一些shell脚本来自动化和简化我们的工作;在做性能测试时,需要分析服务的性能瓶颈并进行优化。随着软件测试工作的深入,一定会使用到容器、虚拟化、Kubernetes等前沿技术,而熟练使用和理解Linux,将会让你更加快速理解和使用这些前沿技术。

如果大家没有使用过Linux操作系统,或者使用起来不是那么顺手,我非常建议大家系统学习一下。这里我推荐大家一本非常适合入门的书《鸟哥的 Linux 私房菜》(基础学习篇)。这本书以 CentOS 7 为例,介绍了 Linux 系统的基本使用和管理方法,主要内容包括系统安装、文件和目录操作、磁盘和文件系统管理、编辑器、Bash 以及 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.6版本,后来使用了很长一段时间2.7版本,在2019年我和我的团队小伙伴全面迁移到Pyhthon3.6。相比于Java,Python更加简洁的语法,更加丰富的内置库和第三方库,使得我抛弃了Java,钟情上了Python直到现在。

现在,我使用Python进行服务端接口测试、进行WEB测试、APP测试以及性能测试,开发一些测试工具及Web系统。Python 3.0增加的更多新特性,使得我们编写测试代码更加如鱼得水。简洁高效的语法,使得我们可以用最少的代码完成工作任务。不仅仅是软件测试领域,随着人工智能的火爆,Python语言也成为现在排名前三的热门语言。

说了这么多,我想告诉大家的是,一定要学会编程,否则真的会被淘汰。之前学不会像C、Java编程语言,现在有了简单的Python语言,我相信你一定能学会,你看我都学会了,你也一定行的。我记得我当时学习Python使用的是一本特别短小的电子书,中文叫《简明Python教程》,这本电子书一直在更新,大家有兴趣可以看下。另外,国内比较好的网络教材是廖雪峰在他的个人博客上发布的Python教程。纸质书我看过两本,一本是《Python核心编程》,这本书是基于Python2写的,不过里面的核心内容现在也不过时,另外一本是《Python Cookbook》,这本书也有电子版。

1.5 数据结构与算法

十年老兵教你构建软件测试知识体系和技能树

数据结构和算法可以说是我的几次面试碰壁, 才使得我下决心去攻克的。如果去BAT这样的大厂求职,数据结构和算法,面试时一定要考的。因为我不是计算机专业,所以在学校里面是没有学过这门课的,我是在工作后,在各种招聘网站的招聘信息中知道这门知识的。

几次面试碰壁,驱使我有了系统学习一下数据结构和算法的想法,可是并没有找到好的教材,讲授这方面知识的网络课程也不多,我想也可能是由于讲起来太难吧。看了看大学里面使用的教材,感觉都比较晦涩难懂,所以一直没学会。

但是我平时一直留心收集这方面的学习材料,直到有一天,我遇到一本书叫《图解算法》,让我顿时眼前一亮,里面丰富的插图,细致的讲解,让我花了一周的时间看完后,大呼过瘾。我想有的时候,学习就是这样,只要你一直坚持不放弃,终会有那么一刻让你顿悟,这一时刻可能是遇到一本适合自己的书,也可能是遇到一个高人给你指点了一二。这本书让我对学会数据结构和算法大大增加了信心。另外一本数据结构和算法书也很不错,书名是《大话数据结构》,也推荐大家看看。

再后来,2019年时候极客时间出了一门课程叫做《数据结构与算法之美》,课程一出来,我就订阅了,在2019年一年中,我大致看了3遍。第一遍特别痛苦,第二遍好点,第三遍时我把学习笔记整理到了我的博客上。目前这门课已经累计近8万人订阅,我从中确实学会了数组、链表、栈、队列、散列表、树、堆常用的数据结构及其上的算法,还学会了递归、排序、二分查找、字符串匹配和哈希算法这些思想,学完之后真的感觉我脑袋好像变聪明了。

现在,我平时会在Leetcode网站刷刷题,巩固一下所学。通过学习数据结构与算法,使得我对Python和Java的一些底层原理也有了更深刻的了解,我的编程能力也得到了进一步的提升。所以,很多知识是相通的、相互辅助的。

1.6 架构知识

 

十年老兵教你构建软件测试知识体系和技能树

2016年加入蔚来汽车参与车联网系统测试,伴随着微服务架构的转型,对测试策略和方案也提出了前所未有的挑战。各种服务变的越来越小,变的越来越多,服务发现、网关、监控体系、新的CICD流程等各种名词和应用,让我突然感觉自己的知识储备不够了。

在微服务下,准备测试数据、测试解耦、定位和排查问题,与之前的单体应用完全不同。这时,我打算深入了解一下微服务,解开微服务的面纱,探寻微服务下服务端架构的全貌。由于架构因公司而异,因业务而变,看市面上的经典架构方面的书籍可能不太高效,所以我从公司内部的微服务架构出发,了解什么是服务发现,如何做服务发现,网关的作用和价值,微服务下的监控体系如何运作。对这些有一定了解后,作为极客时间的重度用户,我在极客时间上订阅了一门课程《微服务架构核心20讲》,这门课从理论到实践,介绍了微服务关键问题。通过这门课程让我对微服务架构有了更加全面、清晰理解。

你可能会问了,作为软件测试工程师,有必要了解架构知识吗?我觉得非常有必要,因为只有深刻理解了服务端架构之后,你才能设计出合理的测试策略,才有办法解耦服务间依赖,才能针对性的进行测试数据准备,出了问题才能够定位是网关的问题、还是服务发现的问题、还是逻辑代码的问题,你才能理解线上报警意味着什么问题。

在微服务时代,架构知识也是软件测试工程师需要掌握的基础知识。

02

 

专项测试技能

我为什么把各项专项测试技能称为招式呢?因为我觉得他们都是套路。不管是服务端测试、WEB测试、APP测试还是性能测试,他们的基本套路是一致的:准备测试数据、搭建测试执行环境、执行测试、校验结果、产生测试报告。

他们的不同点只是使用的测试工具不同,比如服务端测试HTTP协议时,使用使用request这个Python库,WEB测试使用的是Selenium,APP测试使用的Appium,性能测试使用的是Jmeter或者Locust。

这些不同的工具也有很多共同点,比如进行web自动化测试的Selenium和进行APP自动化测试的Appium都是基于webdriver的,他们的使用大同小异。

下面,我将这些套路拆解开了给大家看。

2.1 测试基础

十年老兵教你构建软件测试知识体系和技能树

不管是手动测试还是自动化测试,测试工程师的基础工作都是一样的,都要了解软件研发流程,都要编写测试用例,准备测试数据,提交并分析BUG。

在软件研发流程中的不同阶段,要及时和完整输出测试工作的产物。通常的敏捷软件研发流程是:需求评审——>方案讨论——>工作排期——>提测迭代——>版本发布——>总结回顾。软件测试工作对应的各阶段产物应该是需求分析、测试用例、测试计划、执行测试、测试报告、测试总结与分析。

在设计测试用例时,一方面要根据产品的功能需求分析和提炼出测试用例,另一方面也要根据系统的架构设计从技术层面设计测试用例。

测试数据准备,需要灵活采取多种手段,常用的手段主要有:

  1. 基于GUI准备测试数据
  2. 基于API准备测试数据
  3. 基于DB准备测试数据
  4. 基于MQ准备测试数据
  5. 基于第三方库准备测试数据
  6. 综合运用上述方法生成测试数据

准备测试数据的时机也需要根据实际情况选择在测试执行时或者测试执行前准备。创建耗时比较长的测试数据,不需要经常变动的测试数据,最好提前创建,对于那些经常变动测试数据,最好在测试执行时创建,执行完成后要及时删除测试数据。

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流水线集成,我们更加推荐使用编写代码的方式发起测试。

服务端测试的检查点,我们通常要求对响应结果,以及数据流过的所有环节,包括数据库、kafka等进行校验,这样做的好处是,一方面能够强迫我们要对每一个接口或者处理流程做到心中有数,在服务出现问题时,能够很快的定位到问题所在。另外一个方面,当测试用例执行失败时,也能很快定位失败的位置,提交BUG时,就能够很快的给出BUG的出错的原因。

根据现在流行的菱形结构测试体系,服务端测试要尽量做到全面,要有更高的测试覆盖率。

2.5 持续集成

十年老兵教你构建软件测试知识体系和技能树

我们自动化测试用例,不是为了能够在本地电脑上偶尔跑一次,而是为了能够将自动化测试集成到公司整个CICD流水线中,持续地进行测试,提高研发部署效率。因此我们的自动化测试,一定要接入到CICD流水线。

现在很多公司的CICD流程都是围绕Jenkins来开发的,对于测试工程师,要了解Jenkins的工作原理,能够搭建Jenkins集群,熟练掌握Jenkins的Pipeline语法,定制测试流程。

测试工程师还要能够维护好运行自动化测试使用的Jenkins Slave集群,目前大部分公司的Jenkins slave采用的是虚拟机方式,不过随着容器云技术的普及,也有部分公司采用Kubernetes集群作为Jenkins slave。对于虚拟机方式,测试工程师需要编写脚本,快速初始化Jenkins slave并加入到Jenkins集群,对于Kubernetes方式,测试工程师需要编写满足特定测试需求的kubernetes的Pod文件。

2.6 WEB测试

十年老兵教你构建软件测试知识体系和技能树

Web测试是对基于浏览器的BS架构的服务进行测试,通过操作浏览器来检查服务是否满足需求定义。要想做好Web测试,需要掌握的知识非常多,要了解HTML\CSS以及JavaScript的知识,还要了解浏览器的工作原理,能够使用浏览器的开发者工具诊断问题、分析性能。

Web页面不稳定、或者在开发初期的项目,通常采用手工测试方法。对于回归测试、UI长期稳定的页面展开自动化测试。

如果要做自动化测试,还需要掌握Selenium的使用,能够对浏览器元素进行定位和操作,能够使用Page Object模型封装页面元素,提高自动化测试用例的可维护性,能够通过Selenium Grid进行多浏览器的并行测试提高测试效率。

将自动化测试脚本与单元测试框架融合,并与持续集成流水线集成到一起,才能发挥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平台、测试执行管理平台、测试报告管理平台。

测试数据生产平台,作为准备测试数据的统一平台,集成了各种测试数据准备方法,对外提供Restful API,所有测试数据使用方,可以通过唯一的平台和API产生自己所需要的测试数据。

Mock平台,方便对依赖服务进行Mock,以便与依赖服务解耦,专注于本模块、本服务的测试,提高测试稳定性。

如果需要,可以将所有测试执行集成到一个测试执行管理平台上,这个平台对接Jenkins,在平台上方便进行测试Job的创建和配置,简化测试执行流程。

测试报告平台作为测试报告的存储、分析和展示平台,可以查询历史上所有测试的测试结果。对被测试服务的历史版本质量进行分析。

总之,测试开发工作在软件测试工作中,将会占据越来越大的比例,测试工程师要掌握一定的开发技能,比如借助常见的开发框架Django或者Spring Boot,配合前端框架Vue.js,进行测试平台开发是性价比比较高的方案。

03

综合素质

前面介绍了计算机基础( 内功)和专项测试技能(招式),为了更好地做好测试工作和更好的职业发展,一些基本的素质也是非常重要的。

首先,我觉得测试工程师要保持学习热情,锻炼学习方法,提高学习能力,能够在需要的时候快速学习新的技术。

测试工程师作为研发团队的一份子,具备良好的沟通表达能力,做好与产品经理、开发人员之间的沟通,及时预警潜在风险,展示项目质量,推动和协调团队解决问题。

非常建议大家及时总结所学知识,养成写博客的良好习惯,大家都说输出是最好的输入,在写博客进行输出的过程中,其实是对自己的知识进行加固的过程。

04

总结

总之,软件测试工作是一项对综合能力要求非常高的工作,对于测试工程师要求的技术面特别广,既要懂得操作系统、计算机网络、数据库、编程和算法等基础知识这些内功,又要掌握多种测试领域的测试套路,还要具有一定的开发能力。既要懂软件测试,还要了解DevOps。

我花了10年认清了软件测试的知识体系和技能要求,并一直在路上学习和探索。希望大家看了这篇文章之后,能够比我更早领悟。

原创文章,作者:测试媛,如若转载,请注明出处:http://www.stest.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注

QR code