向上的路很难走,但一旦踏上去,每一步都算数!

为什么转型为测试开发?

不懂开发的手工测试是新时代“文盲”

在移动互联网和大数据时代,为满足市场和业务需求,互联网应用既要实现产品功能快速迭代,又要高效保障数据安全和软件质量。这就要求 IT 研发团队必须具备持续交付的能力,而在测试这个环节,就意味着必须拥有自动化测试、持续测试和质量监控等能力,因此对测试从业人员也提出了更高能力要求。

只会点点点,不懂开发的手工测试已经无法胜任互联网测试技术体系“质量第一,效率为王”的要求,成为 IT 新时代的”文盲“。一方面,手工测试在工作中已经没有太大的晋升空间,另外也很难跳槽。尤其在经济下行,减员增效背景下,手工测试更是首当其冲,承受着各种“中年危机”、“人员优化”和裁员压力(在 TesterHome 社区能经常看到各种热门贴)。而受疫情影响,大部分中小企业经营状况愈发艰难,随着经济和就业形势变得更加严峻,恐怕新一轮的测试裁员潮在所难免!

测试开发人才紧缺,迎来黄金时代

目前 BAT、TMD 等一线互联网企业已几乎不再招募传统手工测试工程师,而只招测试开发工程师。部分功能测试任务会交给在校实习生、应届毕业生,其余则交给兼职众测和外包测试人员。而外包测试公司通常人员技术水平差,流动性高,普遍无法满足高要求,也急需变革升级。这只是测试行业在过渡期的“权宜之计”,未来的测试团队架构一定会是“测试开发工程师主导 + 少数测试专家 + 测试经理”的管理模式。

而由于当前测试开发人才紧缺(粗略统计,目前优秀的测试开发工程师占比预估仅为 1% 左右),市场上可谓高薪溢价,一将难求。一个优秀的测试开发工程师可能会同时拿到 4、5 个 BAT、TMD 大厂 Offer(年薪 30W+ 起,年薪 100W+ 也大有人在),薪资待遇甚至超过同级别研发岗位。

与此同时,测试开发技术正迅猛发展,各种新技术新应用层出不穷。以 BAT、TMD 为代表的互联网企业都在普遍落地自动化测试、全链路压测、精准化测试、大数据测试、AI+ 测试等等,更多优秀的互联网企业也在奋起直追。

可以说,现在就是转型为测试开发工程师的黄金时代!而能否在行业变化中把握住新的历史机遇,就看你是否做好了准备!

目标明确,测试开发必备技能与成长路径

1.软件测试理论知识

这个对软件测试人员来说是必备的。其中包括软件测试基础理论和方法,例如:软件生命周期、测试用例编写方法、软件测试原则、软件测试管理相关技术、软件各个阶段评审、软件测试计划编写、软件测试过程管理、软件验收、软件测试整个过程等一些文档规范。

2.语言基础

这部分内容,可以选择从Java或者Python入门,或者其他编程语言。当然,也要看自己是适合Python还是Java,我个人推荐先入门Python,然后再去学习Java,认真学习一个月足够。第二门语言,一个礼拜就可以入门,很多思想和语法其实是相通的。

3.手动到自动

这是一个比较痛苦的过程,有些人天天看语言基础,却不知道练习的方法,导致一直入不了门。个人建议是在学习了一种语言之后,一定要找一个案例去练习,熟悉这个语言的基本使用。也可以结合Selenium去学习Web自动化测试。通过脚本编写,有助于你提高语言基础知识的理解和运用。在练习自动化脚本过程中,你会收获很多快乐,让你找到学习的乐趣,从而提升学习效率。

4.自动化脚本开发

在手动转自动之后,就需要大量的练习,如果Selenium自动化脚本开发,你起码要完成100个自动化测试用例,你需要对seleinum达到熟练使用的地步。以及快速写出自动化测试用例。

5.了解和接触框架

这里的框架,是指自动化测试框架,不是指开发用到的框架。继续深入研究Selenium和一些自动化测试框架的知识。例如,什么是框架,框架解决什么问题,框架组成组件有哪些等。

6.常见设计框架设计

前面我们有了POM设计框架的思想,接下来我们要学习数据驱动框架,关键字驱动关键,混合测试框架,还有行为测试驱动框架。

7.Linux和数据库

自动化测试进阶到一定深度,也需要用代码连接数据库去进行测试,linux和shell脚本,测试环境也会接触到。如果要做自动化部署和运维,常见的linux和shell脚本是有必要学习的。这部分内容,可以看linux和shell脚本入门系列的书来学习。

8.完全掌握一门编程语言

这个可以和写小程序结合在一起去学习和实践。如果你选Python,你可以学习Django框架进行开发一个web或者一个博客。如果是Java,你需要学会web开发入门,尝试去了解Java三大web框架,优先学习SSH

下面是我整理出来的一份软件测试工程师学习与发展知识架构体系。

一、软件自动化测试的学习步骤

大概步骤如下:

1. 做好手工测试(了解各种测试的知识)-> 2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,Javascript)或者 学习Winform

-> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架

自动化测试的最高境界是: 开发测试工具,设计自动化测试框架, 让别人用。

二、自动化测试的本质

自动化测试的本质是:用程序测试程序。 也就是说学习“编程语言”是学习自动化测试的基础。

很多人问我学自动化测试,应该去学什么自动化工具。 我的回答是,第一步:应该先学习编程语言,以后再去学自动化测试工具

自动化测试是一定要写代码的, 编程语言水平的高低决定了自动化测试水平的高低, 有了扎实的编程技术,干什么都可以。

学习编程语言时, 要把自己当做开发人员, 系统地学习各种编程知识。

三、自动化测试学习的误区

很多新手一开始,就学习复杂的自动化测试工具, 我觉得这样是本末倒置了。

如果不先理解HTTP协议, 就不会理解Jemeter, LoadRunner, Fiddler, SoapUI这些工具的。

如果不先理解HTML,DOM, 就不会理解Firebug 这种工具的

如果不先理解Win32 API, 就不会理解Windows 窗体自动化测试的原理的。

如果自己没有开发过网站, 就不会理解网站的各个方面,测试起来难免有遗漏。

总之学习自动化测试,需要循序渐进, 把基础打好。

四、自动化测试的职位

自动化测试工程师的职位叫做: (SDET) Software Development Engineer in Test. 专注于自动化测试

手动测试工程师叫: (STE)Software test enginer. 专注于手动测试

在微软有很多SDET的职位,但是没有STE的职位, STE职位一般都是外包给外包公司的, 目前自动化测试还是非常吃香的。

五、自动化测试分类

自动化测试也有非常多的种类,

  1. 对Web UI 的自动化测试程序
  2. 对Windows 窗体UI的自动化测试程序
  3. API测试, 比如(测试WCF service, Web API 等)
  4. 数据库测试, 比如测试存储过程
  5. 接口测试 (这种只能用自动化测)
  6. 单元测试
  7. 性能测试, 性能测试都需要用到自动化

六、Web自动化测试分类

目前大部分项目都是Web的, 所以我们说的自动化测试,大部分都是针对Web程序的自动化测试, Web自动化测试分两类:

第一类是:模拟用户真实操作,比如,模拟点击鼠标,键盘输入,等,去操作浏览器上的控件。 (代表框架有selenium-webdriver, VS Coded UI)

这类的自动化测试的是通过高级语言(C#, JAVA, Python 等)来调用selenium的一些工具来操作浏览器,帮助我们实行Web UI自动化

第二类是:模拟HTTP请求。

七、自动化测试的知识点

应该像开发人员一样的心态去学习技术, 自动化测试需要掌握以下的知识:

了解Javascript, CSS的知识。

熟练掌握DOM和HTML知识, (用来解析Web界面)

熟练掌握XML技术,(需要用XML保存测试数据,用XML展现测试报告)

熟练使用C# P/inoke技术调用Windows API (可以用来操作Winform 窗口)

熟练掌握窗体”句柄”的概念

熟练使用C# 操作Windows 注册表

熟练使用C# 中的Process 类

熟练掌握数据库的基本操作语句 (测试数据库肯定要用到)

熟练掌握HTTP协议的知识 (请参考我的 HTTP系列博客 [HTTP协议详解])

熟练掌握C# 中的HttpWebRequest 类的用法 (用于模拟HTTP请求)

熟练掌握正则表达式

八、自动化测试的书籍推荐

关于软件自动化测试的书,真心不多, 我查过市面上所有关于自动化测试的书,只找到下面这边书, 电子档可以点击就下方卡片

九、自动化测试工具

测试套件工具: JUnit, Nunit, MSTest, 这几个工具功能都一样学起来比较简单。

性能测试工具: JMeter, VSTS 负载测试, LoadRunner(收费), QTP(收费)

Web UI 测试框架:WebDriver/Selenium, VSTS Coded UI, Watri

Windows UI 测试框架:VSTS Coded UI

其他工具: firebug, Fiddler

推荐学习视频