自动化测试的学习方向

自动化测试是一个很广义的概念,一般说来所有能替代人工测试的方式都属于自动化测试,我们一般说的单元测试就是自动化测试的一种,单元测试很多人称之为“毫秒级的自动化测试”。

自动化测试是很难的,从某种意义上来说比性能测试更难。性能测试可以依仗的东西很多,比如LR等,而自动化测试的工具很多情况下只是一个半成品,比如selenium webdriver,你需要花很多时间去使用代码编写用例,并且维护这些用例,这一过程是漫长而艰辛的,特别对一些没有开发经验的测试同学来说,这个过程非常痛苦,每天的工作内容好像是自虐,而且自虐一段时间后信心基本崩溃,从此谈自动化色变,把所以的错归结于自动化测试策略与技术,而不从本身去找问题。

不过相比于性能测试而言,自动化测试的实践者往往是更加幸运的。最简单的例子是一般的性能测试人员离开了工具基本上就无所作为了,而自动化测试人员则可以利用自己掌握的语言知识与代码知识自己创造工具,说实在的,这是一件很有成就感的事情,乙醇自己就在写工具,从简单的cli工具到复杂的web工具,一切都是托以前自动化测试实践的福。
自动化测试很难,那么我们为什么要坚持自动化呢?
单元测试是保证代码质量最基本也是最根本的途径,单元测试是自动化测试的一种,因此自动化的重要性不言而喻;
集成测试在很多情况下非常适合使用自动化的手段去运行,最明显的例子是rails里的integration test;
当你的单元测试和集成测试都没做好,甚至是没有做的情况下,UI级的自动化测试可以扮演救火队员的角色,尽管成本很高,但是可维护的UI测试代码是回归测试的福音,也是提高测试生产力的重要手段;
自动化测试可以培养团队,一个团队如果可以把自动化测试做好,那么他们的开发水平一定不低,而且如果这些人去做开发,代码的质量反而比一般的开发人员要高,原因很容易理解,测试人员坚信没有测试过的东西就是不可信的,代码如果没有被测试过,那么代码自然是不可信的,不可信的代码就需要用单元测试去覆盖,因此这可以从根本上提高代码的质量。
下面是一下学习自动化测试应注意的问题,由大神总结,我摘过来的
一:大神,帮帮忙啊,救命啊,老是搞不定啊
这句话我经常看到,一般来说有时间的话,我会教你怎么去解决这个问题。不过几天后,类似的问题出现了,你还是解决不了。首先,大神很忙。有些大神愿意分享,他们贡献的资料很多,但是,你不查,你不看,你总是认为”不耻上问”最直接,但大神帮你解决问题的同时又增加了你的惰性和依赖性,结果你进步的很慢,一直没有自信,后来问题太多,直接放弃。
遇到问题不要害怕,去网上搜一下,很多人会遇到同样的问题,大概看一下别人怎么解决的,然后自己举一反三,不仅解决了问题,而且还能有所进步,这才是正道。
后来有人问我问题,我一般的回答是”去网上搜一下XXXX”,不是我不愿意帮你,我是在教你,无论做什么事,最后你只能靠自己。
一般遇到这种节奏的人学习能力恐怕是不强的,如果自动化测试交给这些人来做,那么作死是可以预期的到的。
提高自己的学习能力与纠错能力,遇事不慌,有一套比较好的解决问题的方法,坚持下去,慢慢的改进,慢慢的提升自己,这样就可以了。

二:我看了,这些代码我都看过了,但是这个项目到底怎么做啊
这是典型的光说不练。有一本书叫做webdriver实用指南,里面有很多代码,涵盖了ruby/python/java/watir-webdriver等。有人一再问我书里面提到的问题,我的回答总是:”这些代码你敲过了吗?”,答曰:”没,但是我有看过了”。对此我只能哭笑不得,看过不等于做过,自动化测试项目说白了就是代码实践,光看不写是学不会堆代码的。因此,在做项目的时候,一定要多做,别只是在收集别人的意见,比如”你觉得我这个项目适合做自动化吗?”, “我应该用什么工具做自动化啊?”,别人总是旁观者,只有你亲自实验得出的结果才是准确的,不要把别人的意见当作圣旨箴言,自己实践才是第一要务。
对于自动化测试,我的理解是先把代码敲熟练了。如果一个工具或者代码不能掌握到得心应手的程度,那么做起项目来应该是困难重重的。还有,自己多写代码,多去理解错误提示,很多问题你自己就能顿悟了,不要遇到一点点小问题就去问别人,别人不但不会帮你,也许心里还会鄙视你,真的,我以前就被鄙视过。
看过不等于做过,这点很重要。就算你看过岛国所有一线女优的片子,但如果没做过的话,你仍然只是个可怜的处男,连逆袭的机会都没有。

三:大神,为什么出错了啊
这是太言简意赅了。我很想帮你,但是在帮你之前我会先问一串:”你用的是什么工具,什么操作系统,什么编程语言之类”,当然了,这是在我心情好的时候,有时候心情不爽,直接拉黑,整个世界就清静了。提问是有艺术的,把问题描述清楚,别人才好去帮你,不然没人会理你。然后你感到自己被忽略了,然后你伤心了,然后你吐槽了,然后你无力吐槽了,最后你放弃了。一样的作死的节奏。其实,只要你把问题描述清楚,然后去网上搜索一下,基本就能得到答案。记住,google是你最好的朋友,大神不是。

四:我只要会xxx语言就可以了,其他的语言不需要
理论上这是正确的,但是语言说白了还是工具,在做一件很复杂事情的时候,单一的工具往往是难以很好的完成任务的。任何语言都有其擅长的部分,不擅长的地方,取长补短才是王道。我用过很多的语言,但是在做前端UI自动化的时候,我发现ruby+watir webdriver很方便,于是一直用,项目一直在做,几年了都没失败。但如果当年用的是java的话,我估计我们的产品在改版几次以后,这个自动化项目就要寿终正寝了。多学一点语言其实没坏处,不过如果你选择专注,那么你有你的道理,你可以坚持,没人会责怪你。

稍微总结一下自动化应该怎么做。

原则一:能力使然
这个能力是指的综合能力。首先你要会测试,自动化测试毕竟是在用代码写用例。其次你要会写代码,你要把用例翻译成代码。不要迷信于录制回放工具,光用这个基本上做不成项目。而且会录制回放对你来说也没什么意义,任何一个人学习个一天一定能学会录制回放。做自动化测试实际上是对自身能力一个很好的提升,一定要抓住这个机会,不要去弄没啥技术含量的录制回放,学会了有什么用,大家都会录,凭什么让你录。
做自动化测试其实挺难的,会有很多困难,毕竟前端UI的东西是最容易变化的,但是如果你能力足够强大的话,这些变量对你来说总会有办法去克服。比如UI老是变,就可以封装一些page object的思想,让UI修改变得容易一些。还有用例老是跑出错,不如在代码里加入自动截图,一眼就能定位问题,代码维护起来自然就容易不少。
没有一个成功的自动化项目是菜鸟做成功的,当你做成功了一个项目以后,你自然就从菜鸟变成了高手。

原则二:不变应万变
UI总是在变,比孙悟空还会变。但是在变的过程中一定有一些东西是不变的,我们做自动化测试的时候要尽量用这些不变的东西。比如表单元素的name,一般不会频繁变动,相对稳定。另外数据是会变的,比如你进入一个工单的列表页面,有时候会有10条数据,有时候会有20条。有时候第一条数据的内容是A,有时候是B,这是因为数据在变化,这时候你只要让数据能固定住,这样进入工单列表后一定只有10条数据,第一条数据永远是A,那么你的用例写起来自然是神清气爽,难度不高,也容易维护。

原则三:团结一切可团结的力量
对我来说,很多时候我总是一个人在战斗。开发努力改一个迭代,改出若干新功能和若干bug,然后我更新对应的自动化用例。因为我的框架扩展性还不错,所以开发改两周的UI,我两天就能改完,不过如果老是我一个人在改,那么我一定会非常孤独吧。这时候不如让手工测试人员帮我一起改,对他们来说自动化是福音,能节约其回归的时间,所以改用例对他们来说是很有必要的一件事情,然后我教他们怎么改,他们学会了以后我就可以放手去做其他事情。现在我已经基本不做自动化了,原因就在这里,有人帮我做,而且比我更有动力去做。

原则四:把成果展示出来
我专门写了个报告平台来展示自动化的测试报告。一定要让团队成员知道你在干什么,报告是最简单的途径。成功的项目一定有很不错的报告,这点不容置疑。

原则五:可维护的代码
代码要容易读,容易改。看看我写的lazyman框架里的示例代码吧,再看看原生的webdriver代码,你应该会有所感触。记住,原生的webdriver代码一定是不太好维护的,没有框架支持和封装,原生的webdriver代码一般很难规模化,很难达到成百上千个用例的规模。好的框架可以使你事半功倍,不要迷恋原生代码,可以用,但不够用。

最后是学习路线

1.学习python基本语法。

2.上w3cschool这个网站,学习HTML/CSS下的html、xml、webservice三个教程。

3. 然后下一个python的requests库学习写最简单的网络爬虫。知乎上爬虫教程一大堆。3是第一个里程碑,学写简单爬虫一方面有一定的成就感,一方面又知道了接口到底是怎么回事。同时还学到了怎么解析一个页面。

4.学习python的测试框架unittest,知道怎样用unittest和python的mock模块写一个小单元测试。

5.把3和4结合起来,你掌握http自动化接口测试。

6.学selenium的库和页面对象模式

7.把2、4、5、6结合起来,你应该能写既支持web测试又支持接口测试的自动化测试脚本了。

8.学robotframework,你可以把自动化测试变成关键字驱动和数据驱动的了。

9.学python的高级一点的语法。如装饰器、线程进程协程。你可以让测试并行执行,并自动记录测试步骤到log文件里了。

10.学jenkins,测试不再需要你手工去启动了。测试也可以分步式运行到多个环境上了。

11.学docker、git、gitlab等的简单使用,从此测试脚本不用再人肉更新、测试环境也不用人工搭建。这里也要学linux的简单使用,

12.回到w3cshool,学习javascript、ajax、jquery、bootstrap。至此你可以写50%以上简单网站的前端了。

13.学习python的flask库,学mysql或mongodb是怎样和flask一起用的。至此你可以写简单网站的后台了。你还可以快速开发webservice接口了。

14.综合12和13,你可以开发一些测试管理工具了。比如写一个管理很多jenkins master的ci调度平台。也可以写一个提供统一样式的测试报告的web展示平台。写一个监控所有测试情况的看板。写帮你生成测试文档的脚本。写测试环境的管理工具。

并且14是一个里程碑,你可以理解开发人员的一些思路了,比如为什么开发人员老是不愿意好好写单元测试、老是说这不是bug、老是说几点干完但却拖到半夜还做不完,特别是你做的东西交给别人测的时候。你也可以理解web测试的接口测试、单元测试怎样做比较好,因为如果不好,你是不愿意用到自己写的网站工具上的,你会觉得浪费时间。

15.学压测工具locust、jmeter等,7里写的框架可以支持压力测试了。同一套接口测试脚本,既做自动化测试又做压测了。

16.想做app测试的话,学一个appnium之类的框架。

17.补课时间,好好把计算机网络补起来,这个是真有用

18.java补起来。没办法,用java的单位多。要找工作机会也多。现在流行java+python都要会。其实都差不多,举一反三。

19.不知道后面再怎么学了。再提高提高web开发能力。前端框架学一个,以后开发一些更漂亮更炫的前端页面。再学下什么消息中间件之类的

这些步骤不用走完,写这些步骤的人也才到14,但是可以做个参考

发表评论

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