漫谈自动化测试(一)——如何入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/thomashtq/article/details/45217271

在讲如何入门之前,首先得对自动化测试有个概念 吧,否则怕你入错行,贻误终身啊微笑。什么是自动化测试(Test Automation)?Wikipedia上如下定义:

In software testing, test automation is the use of special software (separate from the software being tested) to control the execution of tests and the comparison of actual outcomes with predicted outcomes.[1] 

Test automation can automate some repetitive but necessary tasks in a formalized testing process already in place, or add additional testing that would be difficult to perform manually.(http://en.wikipedia.org/wiki/Test_automation)

英文没看懂?好吧,对于初入门者,我也忍了,就简单翻译下吧。如下:

在软件测试中,测试自动化就是用特定的软件(与被测软件区别开)去控制测试的执行,对比实际结果和期望结果。自动化测试能够使已有的正式测试过程中的重复且必要的任务自动化,或者增加一些手工测试难以执行的测试。 

Wikipedia对自动化测试给出了简单的定义,对它的功能也给出了说明。好了,既然对“自动化测试”有了大概的印象,那就开始准备踏上软件自动化测试这条不归之路吧。

必备知识技能

“知识就是力量”(Knowledge is power)--弗兰西斯·培根(1561—1626),没有必备的知识,在哪一行都很难混啊!“良田百亩,不如一技傍身”,说明技能也很重要啊(哎,如果有百亩良田,我真想回去种地哈^_^)。作为自动化测试工程师,需要同时兼备软件开发员和手工测试员的知识和技能,想想就知道门槛有多高了啊。

编程语言

作为自动化测试工程师,首先你得会码代码吧,否则如何自动化呢?至于什么语言,我个人认为无所谓,其实各种编程语言只是工具而已,我们的目的是达到“软件自动化测试”。但是话又说回来,以个人的经验和体会,有些语言真心不太适合通用的自动化。我个人推荐 以C/C++ ,Java 和 Python为主,shell和批处理脚本为辅。

C/C++虽然编写效率低下,但执行效率高; Java的类库十分丰富,从GUI到网络等应有尽有,也不用担心内存泄露等问题(其实还是需要滴,不过对普通人来说可以略过);Python的开发效率极高,执行速度也不错,类库也十分丰富,学习门槛较低,十分适合初学者。不知道大家发现没有,这几种语言,都是可以运行在各种平台上的(Linux/Unix,MAC,Windows等),这才是我强烈推荐这几种语言的原因,因为你不知道哪一天,可能需要你把自动化测试框架或测试工具移植到另外一种平台上运行,那时候就知道语言的选择,其实也很重要!对于C#,Perl,Ruby等的拥护者,你们也可以尽管拿砖头拍我,我都接着啊^_^。

书籍推荐:《The C Programming Language》(我故意不写中文,是因为中文有不少书同名,鱼目混珠啊),《C++ Primer》,《Python核心编程》,《Java核心编程-第9版》《Core Java 9th Edition》(共2卷), 《算法导论》。

其实对于Python和Java,本身的帮助文档就足够了。其他的编程语言,可以自己寻找,觉得没啥特别好推荐的。

网络知识

不要说你精通各种网络协议(HTTP,RTSP,FTP,SFTP,SMTP,RTMP,SNMP等等),至少应该熟悉下HTTP吧,否则在当今互联网时代如何立足啊?另外,基本的网络知识应该懂一点吧,至少知道路由器、网关、网卡、局域网、广域网、UDP、TCP、网络协议层等基本概念吧。

这些网络知识,懂得越多,在网络测试和设计网络通信的工具时,就越能发挥它的价值。作为自动化测试工程师,你必须要掌握socket基本知识,能够利用各种编程语言的socke接口进行网络工具编写,因为现在很少有测试工具不联网(至少是内部局域网)进行自动化测试了啊。软件安装部署,远程执行用例,测试结果发送等几乎都离不开网络。

书籍推荐:《TCP/IP详解》(共三卷,理解第一卷就够你在网络的天空中翱翔了,理解第二卷写个TCP/IP协议栈那都是小case,居家旅行必备良书!),如果看到这,你还去选择其它网络书籍(什么21天XX,从入门到精通XX等书),各种协议的RFC文档除外,那是对Richard Steven的侮辱啊。

数据库

掌握SQL语句编写技能,熟悉一些主流的数据库如Oracle、MySQL、MSSQL、SQLite等和分布式数据库如HBase等基本知识,除非是做数据库自动化测试,一般这方面的知识要求不算搞,掌握基本的 SQL 语句和主流数据库的安装部署,就能够应付日常工作需要了。

阅读书籍就不推荐了,网上一搜一大把,都半斤八两,随便拿本书或帮助文档看看吧。

操作系统

了解Windows和Linux操作系统的工作原理,对深入理解编程和测试软件都十分有帮助。比如Windows下一般程序最大申请内存不超过2G,Linux下默认开启的线程数不超过1024个,这些都是与操作系统相关的知识,还有进程调度,磁盘IO,内存管理,系统锁,内核API等知识,对于我们编写自动化测试工具和测试软件都大有裨益。当然咯,操作系统的水很深,需要长期积累,学点总比不学强,对吧?Windows和Linux常用操作和命令,比如批处理脚本和shell编程等。

书籍推荐:《深入理解计算机系统》、《深入理解Linux内核》、《程序员的自我修养—链接、装载与库》、《鸟哥的Linux私房菜》、《Windows核心编程》(这本我没看过,口碑不错,推荐它)。

架构设计

如果你打算从长远发展,希望某一天自己能够设计一款牛X的测试工具或框架,那么架构设计的知识和技能你就得学习和掌握了。软件架构、UML、设计模式、分布式、高性能并发设计等知识和技能,都能够让你有能力打造一款属于自己的测试工具或框架,在项目的需求分析或架构设计的评审会议上,你也能够拥有一席之地。

书籍推荐:《设计模式:可复用面向对象软件的基础》(一点也不基础哦,简洁、深邃、精辟,值得反复研读)、《面向对象分析与设计》、《面向模式的软件架构》(该书共5卷, 我至今也没看完这5卷,努力中...害羞

研发管理

即使你不打算走上管理岗位,也需要研发管理的知识。这个研发管理概念比较宽泛,包含软件工程如软件需求设计、代码管理、进度控制等,也涵盖物料申请、人员调度和分配、协调沟通等等,这些技能都需要啊,否则怎么开发自动化测试工具?怎么保证自动化测试投入应用?如何与团队成员(自动化测试工程师,手工测试工程师,软件开发人员,管理者等)沟通?

书籍推荐:《人月神话》、《代码大全》(涵盖全面,值得收藏,累了还可以当枕头^_^)。

行业知识

软件行业覆盖了现在的各行各业啊,挖掘机里面也有嵌入式编程呢^_^。作为自动化测试人员,了解被测软件的应用领域,用户使用习惯和使用流程等,对于自动化测试设计都很重要。不要求十分精通(当然咯,精通更好啦),但至少也要知道行业背景知识,用户使用操作场景,行业常用术语等基本常识。

这个就没法推荐书籍了,各行各业都不一样啊,寻找下基本知识还是不难的,问百度,问Google吧。


PS:这些知识和技能,特别是推荐的那些书籍,部部都是经典之作!其实还有数据结构和算法(前面我只推荐了《算法导论》,其实还有《计算机程序设计艺术》等),软件测试理论方法,软件工程学等知识,这些知识和技能,可以系统的阅读书籍,或者零零碎碎地学习即可。不要以为书籍很多,其实除了特别说明的书以外,我可以负责任地说都阅读过,有些书还阅读过多次(不过书实在太多,信息量巨大,有些读了也忘了,瀑布汗啊!)。

必备职业素养

有了前面那么庞杂的知识体系,你的职业素养至少成功了一半。其实这里的职业素养,不仅是针对自动化测试人员,对于所有的职场人员而言,我们都应该具备这些素养。

尊重事实

我们要尊重测试结果,不能为了让领导满意而随意篡改测试结果的数据。性能不达标,那不是你的错;测试不通过,那也不是你的错;你唯一要保证的就是你的测试工具没有问题,是客观公正的!软件测试是一件严谨的工作,如果遗留或隐瞒缺陷,指不定哪天这个软件缺陷会要了你或者别人的命,为了所有人的生命财产安全,作为质量控制员,作为21世纪有思想有抱负有责任的青年,大家共同努力吧大笑

诚实守信

承诺测试工具或测试框架的交付日期,就必须做到,否则会因为自动化测试工具或框架没有准备好,而严重拖累项目进度,导致失去市场商机。对于不能完成或不可实现的需求,要勇于提出意见,不要偷工减料。比如对于视频质量的自动化检测,明明无法检查音视频是否同步,你也不告知大家,那就是你的过错了。

积极主动

积极改进日常工作流程,作为自动化测试员,要有“懒惰”的精神,能够自动化完成的工作,绝对不要手工去操作完成,哪怕加班写个工具,也不要做重复无聊的劳动。要以提高个人和团队的工作效率为目标,积极改善工具,即使重构代码,完善帮助文档等。

客户至上

自动化测试的服务对象,一般就是本团队的测试人员、开发人员和项目管理者。每个人关注点不一样,测试人员关注易用性、可靠性、缺陷检测,开发人员关注缺陷数,管理者关注测试结果报告(通过率、覆盖度、性能指标等)。要尽自己最大努力,做到一键式操作(软件部署、测试执行、发送报告等),配备简洁完备的操作使用手册。


好了,前面说了那么多,估计把一群想加入自动化测试的人员吓跑了一大半。看到这里,你应该很高兴自己还坚持着(我码字更不容易啊大哭)。作为奖赏,如果你对推荐的书籍感兴趣,可以私信给我联系,电子版的免费赠送啊。如有任何疑问,欢迎回复或私信给我交流。敬请关注《漫谈自动化测试》后续的系列文章。

转载请注明出处:《漫谈自动化测试(一)——如何入门》  (http://blog.csdn.net/thomashtq/article/details/45217271)



没有更多推荐了,返回首页