记得很久之前接触自动化的时候看了一本关于某早期自动化测试工具的书,书名已经记不得了,内容却一直印象深刻。因为那本书根本就是把官方文档有选择性的翻译一遍,对于实际应用来说其作用几乎是零。因此从那时候起我就一直认为,对工具的介绍应该不仅仅停留在理论和了解的程度,如果没有实战,那么我们之于工具无非就是叶公好龙,一直远观,无法赏玩。
很欣慰的是虫师这本Selenium2自动化测试实战--基于Python语言并没有停留在夸夸其谈的表面,我仔细的研究了书中的代码和示例,显然很大一部分都是他在日常工作中勤奋总结而得出来的一手范例,对于技术书籍来说这是难能可贵的。
对于一本介绍自动化测试的书来说,我们其实不缺理论。国外的很多同行都不停的在传经布道,他们的结论其实很简单,自动化测试是好东西,对于提升软件质量来说,自动化测试带给我们生产力的解放收益远远要大于成本。结论我们都知道,工具我们也清楚,无非就是单元测试xunit,rspec之类,bdd测试用cucumber等等,ui层面的aut用selenium。这些工具我们都会用,而且也许用的还不错,不过为什么我们的自动化测试除了耗时费力之外根本就看不出有什么效果?
答案其实很简单,我们自以为用对了,但实际上也许我们才刚上路,甚至跟最佳实践背道而驰。这就像是拿ipad当砧板,用宰牛刀杀鸡一样,路子不对,只能越练越野,直到走火入魔。
这本书中其实提到了很多不错的实践,路子正宗,从者自然不会误入歧途,这也是我推荐他的另外一个理由。
在看本书前几章的时候,我一直不断的想起当年初出茅庐入行时候所遇到的初学者困局。我很想学一个东西,一门技术,但是到底应该从哪里开始?
万事开头难,没有师傅领进门,在不停的挫败和各种不同信息的正反面轰炸下,我们很容易举白旗放弃。
试想一下这样的场景吧:假如你是一个初学者,你从某种渠道得知你selenium是代表未来测试趋势的测试工具,是提升生产力的重要手段,是提升自己收入水平的一个不错的投资,你下定决心大干一场,准备好好的学习一下这个东西。然后你开始兴冲冲的去网络上搜索资料,然后你开始困惑,因为selenium有2个版本,1和2,并且selenium1到现在都没有完全废弃,是学1还是学2,1很经典,2很前沿,你开始由于;然后你继续深挖,你发现如果学selenium2你会遇到1个叫做webdriver的东西,那是啥?然而如果要学selenium1的话你将一直不停的看到一个叫做selelniumRC的字眼,这又是什么?现在的你也许已经有一些动摇了吧,不过噩梦才刚刚开始。你也许会遇到一些靠谱的哥们,他们会先建议你学习一门语言,因为要用selenium基本上就意味着你应该学会编程。但是selenium支持太多编程语言,ruby/python/java/javascript/objective-c/php,到底应该从哪一门语言入手,你开始陷入经典的语言之争的泥沼,你悲哀的发现自己花了很多时间去潜心研究,但最终只是模模糊糊知道了selenium在远方,面前是一堆分叉路口,每种语言看起来都不错,每个分叉路口都可以到达终点,但你就是不知道该怎样迈出第一步。这便是选择的成本,选择是有风险的,选的对事半功倍,选的不对只能半途而废。
对于很多初学者来说,上面的困局应该都是存在的。花了很对精力和时间,但最终却发现一切都是徒劳,做了很多功课,但真正该做的事情却未曾开始。
好在这本书能够很好的解决这个困局。你不需要选择,这本书描述的就是selenium2,代表了主流代表了未来,用的语言是python,全世界都在用,代表了简单高效,代表了经典和优雅。很有意思的是python自身的哲学里也认为最好只用一种方法来做一件事(你可以打开python解释器,然后import this试试),免去选择的苦恼。你应该把精力放在更有意义的事情上,比如多写几个自动化测试用例,而不是纠结于各种选择徘徊不前。
然后便是初学者困局里更加常见的一个问题,如何去搭建环境。我遇到过不少人倒在这里,而且前赴后继,无限循环。如果你有这本书的话那这些问题应该不是核心问题,跟着虫师描述的步骤一步步来吧,循序渐进而又节奏轻快。
搭建好了环境,写好冒烟脚本之后敢问路在何方又是初学者常见的问题。因为selenium没有官方中文文档,啃英文实在不是一件愉快的事情。也许你好不容易看懂了解释,却发现官方的示例离自己身处的环境相差太多,官方的例子一直是google搜索,发gmail,而你却悲哀的发现在根本就没有gmail这个网站。这本书不仅仅非常详尽的介绍了selenium的api,而且给出了非常多可以运行的本土化的示例,这对初学者和其他程度使用者来说都是福音,有些例子很棒,你试过就知道。
其实试完webdriver的各种api,你应该已经算入门了。入门了之后便是更多的困惑,比如如何去写测试用例,如何做基于数据的用例设计,如何分布式执行用例,如何多线程执行用例等,这些本书都有答案。
最后便是bdd和ci,说实话如果一本介绍自动化测试的书没有这两项内容的话都是不完整的。如果自动化是彩虹,那么ci便是风雨,不经历风雨怎会见彩虹。没有ci,自动化其实找不到太多的应用场景,没有自动化,ci更是无从说起了。尽管本书的重点不在ci,但本书的终点在ci,就像是指出了宿命的依归,独具匠心。
还记得上次跟虫师见面时候的情景,应该已经有2年多了。时过境迁,曾经我们上班的地点就在隔壁,如今发现时间逝去,很多东西都已改变。不过难能可贵的是虫师对测试技术的追求一直不曾更改,一直笔耕不辍,这本书其实也算是水到渠成的结果了。勿忘初心,坚持自己,最后希望这本书能多帮助一些人,我想这应该也是虫师的初衷吧。