从这篇我们就开始介绍Selenium web driver了,这也是这个系列教程的核心。selenium web driver翻译过来就是一个叫selenium的用于web应用程序的自动化测试工具集。就这么一个定义还有点绕,念起来还挺费劲。我先给大家解释一下。首先,与其说它是工具集还不如说是一个类库。我们学习java的时候知道它其中一个重要组件就是类库。通常一个类库里提供了为实现某些功能已经写好的函数方法。和Excel的POI以及数据库的jdbc一样,selenium web driver其实就是一种类库,它里面的方法可以在页面上做自动化测试;
其次,selenium字面上翻译过来叫硒,是一种化学元素的名称,据我所知是开发者和同事开玩笑无意起的名,你或许也知道,有时候歪果仁挺冷的,反正我要是selenium发明者肯定不叫这个名,既不高大上也不小清新。当然,我已经不可能是它的发明者了,否则我早成了软件界的明星了。不过虽然我不是明星,但selenium web driver经过这几年的迅猛发展,早已成为自动化测试世界的明星了,可以说已经是web自动化测试不可或缺的中流砥柱之一。Driver的英文大家都知道,是司机的意思,在咱们这里翻译成驱动,你别翻译成老司机。因为驱动是Selenium自动化框架的重要元素,也是核心之一,用driver给整个框架工具包命名可见一斑;
第三,自动化。定义上说以人为驱动的测试行为转化为机器执行的一种过程,说白了就是用你写的代码来代替你的手在网页上做操作。我刚接触的时候觉得还挺神奇,就感觉电脑被人控制了一样,浏览器自动打开了,网页自动打开了,然后网上的按钮链开始被自动点点点。一开始觉得没什么,后来一想,细思极恐。还好自己知道是怎么回事,这要是爸妈之类的不懂技术的看到就尴尬了,夜里失眠上网看新闻,突然浏览器自己打开了然后还自己动动动。。。
第四,selenium web driver很强大,但也有局限性。因为它只能测web应用程序的界面,对于网页来说就是浏览器返回的页面,不能测别的。有人说搞笑,大家上网不都是看网页吗?还能测啥别的?其实不然。大家看到的网页其实只是在web应用当中的最后一层,网页上的那些数据都是经过各种业务处理最后返回的,是动态变化的。你上网看新闻的时候,那些网页每天看上去虽然结构和页面显示都差不多,但新闻内容都是变化的。这些变化的过程是在后台发生的,而后台代码里有业务逻辑层,有接口,还有组成功能的单元代码。虽然上网时感觉网页跳转起来速度很快,尤其网速快的时候压根没感觉,恨不得眨个眼睛搜狐就变成了搜狗,但其实过程很复杂。所以,我第一节课就说过,说软件测试的时候,我们一般谈论的是三种 – 界面测试(UI层),集成/接口测试(API层),单元测试层(Unit Testing)。自动化测试通常就是针对界面层,所以selenium web driver也就无法深入到更深的层次。
讲什么都要讲前世今生,这种惯例最长久,那我也就不免俗啦。2004年的时候一个美国团队开发了一个可以用来做测试的工具,名字里也有selenium,但叫Selenium Remote Control,简称Selenium RC。你写一段测试程序,运行的时候这个工具可以把一段javascript代码嵌到你的浏览器里,然后负责把你程序里的命令传给浏览器,然后就像我刚才说的,浏览器自动打开,自己开始运行。打个比方,这个Selenium RC就好比是一个房产中介,你的程序是业主,浏览器是租户。你委托中介帮你租房,中介把你的要求转达给租户,租户按要求住房,交房租,或是维护房间。整个过程你是不用见租户的,中介来负责。
正因为有这么个“中间商”,所以执行速度会比较慢。后来有很多人对这个工具感兴趣,一个日本人开发出了一个叫Selenium IDE的插件,可以在不用写代码的情况下通过录制回放来进行测试,有点QTP的意思。但它功能很有限,不能进行大规模测试代码的编写和操控,并且只能用在firefox浏览器上,大家还是觉得不满意。当时自动化测试已经蓬勃发展,既要测试效果又要测试速度,所以selenium家族又诞生了一个成员叫selenium grid,用于跨浏览器跨操作系统集群测试。selenium IDE,selenium RC和selenium grid也就形成了selenium最初的样子,标记为1.0版本。后来在各方人士持续努力下,终于在2011年让Selenium web driver横空出世,它是基于RC的,或者说是把二者聪明地进行合并,大大提高了执行速度。就像我刚才说的,因为它让你的代码直接跟浏览器对话,直接操作网页元素。这个版本也被称为2.0。业主直接跟租户交流,没有中介的参与了。
现在基本上没人用RC了,随着selenium web driver 3.0版本出来RC就已经逐渐谢幕,所以我们掌握web driver就可以胜任界面层的自动化测试了。这也是我未来满心期待要跟大家分享的。我们会以2.0为主体,中间穿插3.0的一些新的特性,从如何创建driver这么一行简单的代码开始,说到最后一起来完成一个完整的实际项目自动化测试框架。所以,稍微复习一下我前面讲的java基本知识,我们下一篇正式开始。
网友评论