本节书摘来自异步社区《Google软件测试之道》一书中的第2章2.5节与Web Driver的创建者Simon Stewart的对话,作者【美】James Whittaker , Jason Arbon , Jeff Carollo,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.5 与Web Driver的创建者Simon Stewart的对话
Simon Stewart是WebDriver的创建者,也是Google在浏览器自动化领域的专家(译注:Simon于2013年离开Google加盟Facebook)。WebDriver是开源Web应用自动化测试工具,不仅在Google内部,在业内也广受欢迎,也是GTAC(Google测试自动化大会)历史上最热门的话题之一。我们的采访记者和Simon一起做了这个访谈,Simon在这里讨论了Web应用自动化的话题和关于WebDriver未来的一些想法。
HGTS:好像很多人并不清楚Selenium和WebDriver之间的区别,你能解释一下吗?
Simon:Selenium是Jason Huggins在ThoughtWorks时创建的一个项目。Jason那个时候写了一个Web应用,假定用户使用的浏览器是IE。这样做可以理解,因为那个时候IE有百分之九十多的市场占有率。但是他持续不断的得到用户反馈,指出这个应用在Firefox浏览器上有bug,这个时候他就碰到一个问题,当他修复Firefox上的bug的时候会导致在IE上出现另外的问题。对他来说,Selenium是一个可以加速开发应用程序的工具,可以确保每次变更在两个浏览器上都可以正常工作。
大概在一年前,或者不到一年的样子,我真正开始去创建WebDriver。但在Selenium真正稳定之前,我的主要精力集中在更加通用的Web应用测试上。这并不奇怪,我们两个使用了不同的方法来实现Web自动化。Selenium在浏览器内部使用JavaScript实现,而WebDriver使用浏览器本身的API集成到浏览器内部。两种方法各有优劣。例如,Selenium可以在瞬间打开一个新的Chrome浏览器,但却不能上传文件或者很好地处理用户交互,因为它是JavaScript实现,必须限定在JS沙箱之内。由于WebDriver构建在浏览器里面,它可以突破这些限制,但打开一个新的浏览器却比较痛苦。在我们都开始为Google工作的时候,我们决定把这两个集成到一起。
HGTS:但我还是听到人们在分别谈论它们。它们还依然是两个独立的项目吗?
Simon:对于所有浏览器自动化工具集,我称为Selenium。WebDriver只是其中的一个工具,官方的名字是“Selenium WebDriver”。
HGTS:那么Google是如何介入进来的呢?
Simon:几年前,Google在创建了London office的时候,雇佣了一些Thoughtworks的前员工,这些人邀请我去做一个关于WebDriver的技术分享。这次分享并没有给我带来什么信心,前排的一个家伙听着听着居然睡着了,我在分享的过程中必须与他的鼾声做斗争。碰巧的是,这个分享的录制设备也坏了。但还是有很多人对此感兴趣,于是我们再次被邀请在GTAC上做一个没有鼾声的分享。之后我很快就加入了Google。现在我也知道那个事情的真相了。
HGTS:确实,每个人有自己的秘密。说正经的,我们之前也看过你的分享,很难想象有人会睡着。他是我们认识的人吗?
Simon:不,他已经离开Google很久了。我们还是假设他前一天晚上熬夜了比较好。
HGTS:我们必须从中吸取教训。大家需要明白,在Simon Stewart的分享过程中睡觉,对你的职业生涯是非常不利的。自从你加入了Google,WebDriver是你的全职工作吗?
Simon:不,这只是我20%的工作。我的主要工作是一个产品的SET,虽然我现在还在负责推进WebDriver的前进,但已经有外部的贡献者了,他们做的非常棒。在一个开源项目的早期阶段,人们拿过来使用,因为他们需要这样的项目,而且也没有其他可以替代的。内在的激励就是要去贡献。现在许多WebDriver的用户都在口口相传如何去使用操作,这些用户更像是消费者,而不是贡献者。但在早期,WebDriver社区的草根却在真正地推进这个工具向前发展。
HGTS:我们知道故事的来龙去脉了。WebDriver在Google内部非常受欢迎,这是怎么开始的?是有试点的项目吗?有没有一些错误的教训呢?
Simon:这是一个社交网络产品,在Wave团队最先开始使用。该团队位于Sydney的办公室,但这个团队现在却已经不存在了。Wave的工程师尝试去使用Selenium作为他们的测试框架,但是却无法解决一些问题。Wave实在是太复杂了。工程师们很勤奋,找到了WebDriver并开始问许多优秀的问题,然后这变成了我20%的时间要处理的事情。他们找到我的老板,希望我能在去Sydney待上一个月,帮助他们建立自己的测试框架。
HGTS:我想你当时成功了。
Simon:是的,那个团队很棒,我们把框架做出来了。提出了大量针对WebDriver的新需求,这对于其他的团队也是一个榜样,WebDriver在Web应用方面处于领先地位。从那一刻开始,WebDriver就再也没有缺少过用户,对于我来说,全身心的投入进去也更有意义。
HGTS:第一个用户总是最难的。你是怎么改进WebDriver,并让它可以在Wave团队工作的?
Simon:我使用了一个被称为DDD(译注:defect-driven development)的流程,缺陷驱动开发。我总是宣称WebDriver是完美无瑕的,一旦用户发现了一个bug,我就立刻去修复它,然后再宣布它没有问题了,更加完美无瑕。这样的话,可以确定我修复的bug是一些人们真正关心的bug。这对于改善一个已有产品是非常有用的,这可以确保你是在修复最重要的bug,而不是修复人们并不关心的bug。
HGTS:你还是WebDriver里唯一的工程师吗?
Simon:不,我们有一个团队,WebDriver是Google内部的一个正式项目,并在开源方面非常活跃。随着浏览器数量、版本和平台的不断增加,我们告诉大家我们必须很疯狂,我们每天都在把不可能的事情变成可能。有时候我觉得比较理智的人其实并不适合做我们这个项目。
HGTS:在Wave项目之后你得到了很多动力。对于用户来说,是否意味着WebDriver替代了旧的Selenium的地位?
Simon:我想是的。许多原来Selenium工程师都去做其他事情了。由于在Wave上的成功,我对WebDriver也充满了信心和能量。一些我从来没有见过的人,如来自德国的Michael Tam,已经开始在WebDriver上做一些重要的工作了,我也很小心地鼓励这样的关系模式。Michael是第一个我没有真正见过就有提交代码权限的人。
其实我并没有特别地跟进WebDriver的扩张。比较明确的是,在物理位置上离我近的团队,更愿意去使用WebDriver。我想Picasa网络相册团队事实上是第一个真正使用WebDriver的团队,而且是在Wave团队之前,然后Ads也开始使用了。在Google,不同团队在使用各自的Web自动化框架。Chrome在使用PyAuto,Search在使用Puppet(有一个开源的版本叫做Web Puppeteer),Ads使用WebDriver,等等。
HGTS:WebDriver的未来会怎样?你们团队有什么目标吗?
Simon:好吧,目前看起来还有点乱。即便是在几年前,在市场上还有一个主流的浏览器,但现在没有了。IE、Firefox、Chrome、Safari、Opera等都拥有了自己的市场。但这还只是桌面版的而已。在移动端的浏览器引擎也正在疯狂地扩张。在2008年以后,许多商用的浏览器自动化工具把他们都给忽略了,IE除外,这其实是非常不明智的做法。下一步,WebDriver会在标准化上发力,这样可以保证相同的网络应用代码在不同的浏览器上都可以工作。当然,这也需要浏览器厂商一起参与进来,支持我们的WebDriver API。
HGTS:这听起来好像是标准委员会要做的事情。目前有什么进展吗?
Simon:是的,有一些。很不幸地是,我必须去写一些英文文档,而不是编写代码了,在W3C里有一个文档,所有的浏览器开发商都会参与进去。
HGTS:你希望的未来是怎样的?未来的浏览器自动化工具又是如何工作的呢?
Simon:我希望他们都消失到后台之中。自动化的API会对所有浏览器适用,人们不用去担心这些基础框架,他们仅仅去使用即可。希望人们能把更多的精力放在他们Web应用本身,而不是如何去自动化上。在人们真正忘了WebDriver的存在之后,我们就成功了。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。