测试大佬谈 如何进入BAT大厂做一个测试开发工程师?(转)

 

本文转载自 百家号    念师        https://baijiahao.baidu.com/s?id=1593524964605066107&wfr=spider&for=pc

作为一名深爱测试开发工程师岗位的QA,本文总结了我在百度做测试的近两年的一些经验和对测试开发这一岗位的理解,以及如何有针对性的达到BAT对测试开发工程师的岗位要求。希望本文能让大家对测试开发这一岗位有更深入的认识,同时也能帮助想做QA的同学们更快的进入测试开发这一领域。

什么是测试开发工程师?是测试?还是开发?

对于没有进入互联网领域的同学,听到测试开发工程师可能会感觉到十分困惑。它究竟是测试还是开发呢?

在不同的公司、甚至不同的部门中,测试开发工程师所负责的工作可能并不完全一致。比如百度QEC部门的测试开发工程师主要负责的就是纯粹的测试平台的开发,而不参与业务的测试。但是对于绝大部分的测试开发工程师而言,测试开发工程师最核心的任务是保证产品质量,也就是我们常说的测试。

本文中,我们主要讨论的也是我们常说的测试人员。那既然是测试,为什么又称之为测试开发工程师呢?主要原因是对于现在的测试人员而言,不再是依靠单纯的手工测试来发现和定位Bug,而更多的是通过编写脚本/项目/平台来自动化测试、回归测试、性能测试等。因此,对于测试人员来说,其主要的精力和时间也在脚本和工具开发中,因此通常称之为测试开发工程师。

对BAT初级(百度T3,T4/阿里P5)测试开发工程师而言,应该掌握哪些技能?

首先,既然作为一个测试人员,基本的测试理论一定是需要了解的,包括黑盒测试、白盒测试以及通过等价类、边界值等设计测试用例等。

其次,已经提到需要通过编写代码来进行测试,那么一定需要熟练掌握一门编程语言,例如Python,Java或者Go语言等。

性能测试是每个项目中必不可少的一部分,因此需要理解性能测试的基本原理、理解性能测试的目的并能够独立分析性能测试的指标。同时,还需要掌握某个性能测试的工具,例如Jmeter,Loadrunner等等。

在自动化测试中,通常接口测试是最常用的并且有效的。所以熟练精通接口测试及其HTTP相关原理和使用,可以使用某种编程语言或Jmeter等工具进行接口测试也是必备的技能之一。

此外,UI自动化测试是更多同学对自动化测试的理解。虽然在实际应用过程中,UI自动化测试受到各种局限,但是作为最终UI级别的自动化测试对于一些核心功能页面而言,也是不可或缺的。目前比较常用的UI自动化测试工具有:Selenium。

当我们准备了各种自动化测试脚本后,为了避免每次手工执行脚本带来的重复的操作,就要求我们测试人员掌握持续集成的概念和理论,并熟悉使用某个持续集成工具,例如Jenkins。

同时,由于基本所有的服务都会部署在Linux机器上进行测试,因此,我们需要掌握Linux系统的基本使用和相关操作。

此外,我们在面试的过程中,通常还会对数据库以及数据结构和算法的方面进行考察作为加分项。主要原因是对于数据库而言,是所有项目中核心的数据存储的部分,因此无论测试什么项目以及开发哪些测试平台,都不可避免的需要了解相关的知识。而数据结构和算法一方面可以考量一个同学的思维和逻辑能力,另一方面后续对于高水平的测试开发人员,熟悉数据结构和算法更可以提升自己编写的测试脚本/工具的效率。

如何从零开始(对于非纯计算机专业的学生)逐步成为一名合格的测试开发工程师?

我自己本身就是一个非纯计算机专业毕业的学习(研究生的专业都是信号处理)。在学校期间并没有接触到太多的编程。

Ps:大学期间学习过C语言课程(基本已经不记得了),研究生期间使用matlab做模拟仿真试验。

下面,我就根据我个人的经验来简单的讲讲如何从零开始学习测试开发工程师的基本技能。

Step1:首先需要掌握一门编程语言和某种数据库。推荐:Python,Go,NodeJS。数据库可以从MySQL入手,后续可以学习一下MongoDB以及Redis。

原因:相比较C,C++以及Java等常用语言,Python,Go,NodeJS有一个共同的特点,使用简单,功能强大。以Python为例,本身语法相对简单,学习成本相对较低。对于Python有着大量的第三方库的支持,通过这些第三方库,我们能很快的实现一些相对复杂的功能。

要求:此处所说的掌握一门编程语言并不是仅仅了解其基本语法,而是指利用该语言去完成一些练习,例如开发一个完整的小型Web项目(个人博客)等。

Ps:在学习语言开发项目的过程中,推荐使用TDD(测试驱动开发)的方式进行开发,一方面可以学习如何有针对性的设计测试用例,另一方面可以学习单测的基本知识(Ps:在大部分公式中,单测是由开发人员编写,但是掌握如何编写单测后有助于更好的推进开发人员完成单测)

Step2:学习测试相关的基本原理,推荐上文中提及的软件测试一书。

Step3:利用测试理论对我们自己开发的小型Web项目进行测试,找出其中存在哪些问题并修复。

Step4:学习接口测试理论,利用我们掌握的编程语言对开发的小型Web项目进行接口测试

Step5:学习Jmeter或者Loadrunner的使用,来对我们的Web项目进行简单的压测,并找到我们项目能达到的最大并发数等信息,90%响应时间等。

Step6:学习Selenium并针对我们的Web项目编写UI自动化测试。

Step7:学习Linux系统的基本操作,将我们编写好的项目部署在Linux机器上。

Step8:学习Jenkins的基本使用,在Linux机器上安装Jenkins并配置Jenkins Job,使得其可以完成代码提交后自动部署并进行单元测试、接口测试、UI测试、性能测试。

To be a QA or RD?

上面提到的仅仅是对一个初/中级的测试开发人员所要求掌握的基本技能。看到这儿可能很多同学就会感到很纠结了。 是不是颠覆了很多同学对测试的认知?是不是觉得既然会编程那为什么还要做测试……

的确,这是目前很多同学(甚至包括BAT大厂)对测试的理解,觉得测试并不需要很强的技术能力,只需要细心、耐心、认真即可。但是,随着互联网技术的一步步发展,手工测试已经无法满足生产需要了。例如在一些每周都需要发布新版本的项目中,手工测试是完全无法覆盖所有功能点的。因此,随着互联网技术的发现,对测试开发人员的要求也不断提高。 那对于一个有一定技术能力的同学而言,究竟是应该选择做一个测试开发岗位还是一个纯开发的岗位呢?

这个问题永远没有标准答案。那我就来聊聊我为什么喜欢测试开发这一岗位吧:1. 能够接触更广的知识。对于测试而言,我们有另一个称呼:质量保证人员。不像开发仅仅是需要了解如何写代码,同时还需要了解如何测试、如何进行持续集成甚至如何部署、如何监控等等。2. 更自由的实现方式。对于测试人员而言,我们的最终目的是保证产品质量,而具体通过什么方法来保证产品质量则更加的自由。我们可以学习最新的框架,最近的方法和最流行的技术来达成我们的目标,而对于开发人员来说,则会受到更多来自公司、项目组的限制。

猜你喜欢

转载自blog.csdn.net/weixin_42139375/article/details/83113658