本文供学习交流之用,没有商业用途,没有盈利。
完全是我自己为督促自己学习而翻译的。翻译的不好,见谅。来源于:http://www.guru99.com/introduction-to-selenium.html
什么是Selenium?
Selenium是一款开源的,面向web应用,支持多浏览器和平台的自动化测试套件(suite)。跟HP QTP很像,只是Selenium更专注于自动化网络应用程序的测试。
Selenium不仅仅是个单一的工具,而是一系列的软件集成,每个部分针对不同的测试需要。一共有四个组件。
- Selenium集成开发环境 IDE
- Selenium远程控制 remote control
- web 驱动器 driver
- Selenium 网格 grid
如图,后来两部分合在一起了,叫selenium2。如果提到selenium1, 就是指Selenium RC.
谁开发了Selenium?
一堆人,有几个关键人物,上图一个,2004年,这个人,需要做重复性repetitious测试,跟我现在一样。他意识到重复性的手动测试效率太低,他写了一个JavaScript程序,可以自动控制浏览器的行为。他起的名字是"JavaScriptTestRunner."
这个名字的潜在含义就是帮助自动化测试网络应用。后来这个开源了,改名字为Selenium Core。
同源策略问题
同源策略的精髓很简单:它认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。
这个问题阻止了通过JavaScript 代码访问来自其他域的元素。比如说,google网站里用了一个JS的程序,"randomScript.js"。同源策略只允许在"randomScript.js"里面访问google.com/mail, google.com/login, or google.com/signup 诸如这些页面。然而,从雅虎网等其他站点是访问不了google这些页面,因为他们属于不同的域。这地方,我理解的不好,上图为证。
因此,在Selenium RC没有出现之前,测试者需要安装本地的备份(既要有Selenium Core (a JavaScript program),也要有装载了web应用的web服务器),这样他们属于相同的域domain,就可以互相访问元素了。
Selenium Remote Control (Selenium RC)的出现
Paul Hammant 这个人觉得安那么多麻烦,所以他创建了一种服务器,这个服务器以代理的形式去欺骗服务器,可以让浏览器以为Selenium Core和web应用是同源的。这个系统也就是Selenium1.
Selenium Grid的出现
Patrick Lightbody这个人后来为了优化执行时间,研究出了Selenium Grid。起初叫Hosted QA。在整个流程的关键步骤,浏览器可以截图为证,并且实现了并发地向不同机器发送Selenium指令。
Selenium IDE的出现
星野笠谷(Shinya Kasatani )开发了个firefox的插件,也就是IDE, 可以使浏览器实现 “记录再回放”的功能。有了这个,写Case就快了。2006年,他给这个IDE贡献给了Selenium 项目组。
WebDriver的出现
Simon Stewart大概在2006年开发了WebDriver。当时,浏览器和web应用越来越有受欢迎,when browsers and web applications were becoming more powerful and more restrictive with JavaScript programs like Selenium ,更加JS程序使用更加受限?这句实在不懂。这个WebDriver第一次实现了跨平台的测试框架,可以从操作系统的层面上OS级来控制浏览器了。
Selenium 2的出现
在2008年,整个Selenium 项目组决定把RC 和WebDriver整合成一个更强大的工具,叫Selenium2, WebDriver作为它的核心。 目前,Selenium RC尚处于维护模式。Selenium 2现在是整个项目的重点。
为什么叫Selenium?
它来源于Jason讲的一个笑话。在Selenium开发的阶段,另外一个测试框架叫 Mercury Interactive 水星?不,水银交互?这个框架是最初提出QTP的公司研发的。 因为硒可以解水银的毒,所以Jason起了这样一个名字。
Selenium IDE的简单介绍
这个东西是里面最简单最好学的框架。可以很轻松地安装在火狐浏览器上。但由于它的简单,IDE仅仅是用来分析原型的工具a prototyping tool。如果想创建更复杂的case,还是需要用RC或者webDriver的。
优点:
- 安装简单,用着也简单
- 无需编程经验,知道点儿html和DOM知识就行了
- 可以导出RC和webDriver直接用的格式的case
- 有嵌入式的(built-in)帮助和测试结果记录模块
- 提供插件支持
缺点:
- 只在Firefox里面可用
- 只能创建原始类型的测试
- 不支持迭代和条件判断操作
- 测试执行起来比RC和WebDriver慢
虽然我写的也很烦,不过还是继续吧!坚持!
Selenium Remote Control (Selenium RC)的简介
有很长一段时间,Selenum RC是整个测试框架的重点(flagship)。这是第一个允许用户选择自己喜欢的编程语言的测试web app的工具。截至到v 2.25.0, RC已经支持了 Java,C#,PHP,Python,Perl,Ruby。
优点:
- 兼容多浏览器,多平台
- 支持循环和条件判断了
- 支持data-driven (数据驱动)测试
- API已经成熟
- 逐渐支持新的浏览器
- 比IDE执行更快
缺点:
- 安装比IDE更复杂些
- 需要有编程基础
- 需要把RC server同时运行起来
- API包括了多余的,复杂的命令
- 浏览器交互缺乏真实性
- 可能产生不一致的结果
- 执行速度没有WebDriver快
还是上图,免得今后误导自己。
WebDriver的简介
WebDriver在很多方面优于RC和IDE。它实现了一个更流行的,更稳定的途径去自动化浏览器的操作。WebDriver不像RC,并不依赖JavaScript。通过直接同浏览器通信来控制浏览器。
语言支持的话跟RC一样。
明天写。。。。果然,我们继续吧~09.22.2015
优点:
- 比Selenium RC更简单的安装方式
- 与浏览器直接通信
- 更真实的浏览器交互
- 不需要RC Server这样的其他组件
- 比IDE和RC执行起来更快
缺点:
- 安装比IDE更复杂些
- 需要有编程基础
- 并不能逐渐支持新浏览器
- 没有内置的机制去记录运行时的消息,也不生成测试结果
上图免误导
Selenium Grid
Grid跟RC一起工作,可以同时在不同的机器,不同的浏览器平行完成测试。平行执行的意思是一次执行多个测试。
特点:
- 同时在多浏览器多环境下执行测试
- 节省大量时间
- 利用了 hub-and-nodes的概念。核心是Selenium命令,其他节点连接到这个中心上去。好像集线器的概念?
浏览器和环境支持
因为不同组件的架构存在差异,Selenium IDE, Selenium RC,和 WebDriver支持不同的浏览器和操作系统。
下表复制,原创不要生气!
|
Selenium IDE |
Selenium RC |
WebDriver |
---|---|---|---|
Browser Support |
Mozilla Firefox |
Mozilla Firefox Internet Explorer Google Chrome Safari Opera Konqueror Others
|
Internet Explorer versions 6 to 9, both 32 and 64-bit
Firefox 3.0, 3.5, 3.6, 4.0, 5.0, 6, 7 and above (current version is 16.0.1)
Google Chrome 12.0.712.0 and above (current version is 22.0.1229.94 m)
Opera 11.5 and above (current version is 12.02)
Android - 2.3 and above for phones and tablets (devices & emulators)
iOS 3+ for phones (devices & emulators) and 3.2+ for tablets (devices & emulators)
HtmlUnit 2.9 and above (current version is 2.10) |
Operating System |
Windows Mac OS X Linux
|
Windows Mac OS X Linux Solaris |
All operating systems where the browsers above can run.
|
如何按需要选择正确的Selenium工具呢?
工具 |
为什么选? |
Selenium IDE |
|
Selenium RC |
|
WebDriver |
|
Selenium Grid |
|
比较一下Selenium和QTP
Quick Test Professional(QTP)是一款专利 proprietary化的自动化测试工具。 QTP以前是Mercury Interactive 公司所有的,后来在2006年,被Hewlett-Packard(HP)惠普买下来了。Selenium工具套件较QTP有很多优点。
Selenium比 QTP好的地方
Selenium |
QTP |
开源,免费用 |
商业化的,要钱 |
扩展性强 |
有限的插件 |
可以在不同的浏览器上运行测试 |
只能在火狐,IE,和chrome |
支持各种操作系统 |
只能在Windows下使用 |
支持移动端测试 |
利用第三方软件支持移动端测试 |
在浏览器最小化的时候仍然可以运行测试 |
应用必须在桌面可见才能执行测试 |
可以并行进行测试 |
利用另一款收费软件Quality Center来完成并行测试 |
QTP比Selenium好的地方
QTP |
Selenium |
Web应用和桌面应用都可以测 |
只能用来测试Web应用 |
有内置的对象库 |
没有内置的对象库 |
写自动化更快,因为有完整的集成开发环境。 |
写自动化比较慢,因为没有原始的IDE用,只能用第三方的IDE来开发 |
由于有内置的全局和本地的数据表,更容易实现数据驱动测试。 |
Data-driven数据驱动测试比较复杂,因为必须依赖编程语言的特性为测试数据赋值。 cumbersome 【'kʌmbə(r)s(ə)m】 |
可以直接控制浏览器(收藏夹栏,地址栏,前进和后退按钮等) |
不能测试web应用的过程中控制浏览器的组件 |
提供专业的客户支持。 |
没有官方的用户支持。 |
本身就有多种外部导出测试数据的格式。 |
没有自带的导出运行时数据到外部格式的功能。 |
有内置的参数化支持。 |
可以编程实现参数化,但是很难。 |
自动生成测试报告。 |
没有自带的测试结果报告生成。 |
很明显,QTP有更强大的功能,Selenium在以下三个方面比QTP好。
- 花费便宜
- 灵活性强 可以用多种编程语言,支持多浏览器多操作平台
- 并行测试比QTP方便
总结
整个的Selenium工具套件由四部分组成:
Selenium IDE,只能用一个火狐插件来创建一些相对简单的测试用例和测试组合
Selenium Remote Control,也就是Selenium 1,第一个让用户用编程语言来创建复杂的测试的selenium工具。
WebDriver,全新的突破,让你的测试脚本直接与浏览器交互,而且从OS层级来控制测试。
Selenium Grid,也是一个利用Selenium RC在不同系统和浏览器上平行执行测试的工具。
Selenium Remote Control+WebDriver合并成了Selenium 2.
Selenium在花费和灵活性上优于QTP。Selenium可以实现并行执行测试,而QTP只能依次执行测试。
大功告成!万里长征第一步!总算翻译完了。今天老公去腾讯校招二面,但是被淘汰了。我心情很不好。因为自己太懒,本来想找个人依靠,不用那么拼了。现在发现行不通了,只能靠自己了!我自己怀着功利的心,这本来就是不对的。不就是钱吗?自己挣不行吗?我好坏!我是拜金主义者,很懒的拜金主义者。在男朋友身上,看不到想要的未来了。但是,也不能因为这个就离开这个人呀!想到一个场景,我在洛杉矶机场,下飞机。想想就会泪流满面。什么时候才会到达梦想呢?如果这辈子不能达成梦想,那也是自己活该。脑袋笨归脑袋笨,但是出不了国,不是脑袋笨的原因。该怎么安慰自己呢?生命本是就是美丽的。前四分之一的,一事无成的人生,自己能说些什么呢?再想象一个场景,40岁的自己,又老又胖,在家看电视,在一个蜗牛壳子里,家里脏乎乎的。我会相信,那就是我的一生了吗?不曾去过梦想的地方,死之前都没有办法原谅自己。莫斯科不相信眼泪,哭是解决不了任何问题的。我知道,对不起,我又哭了。
不,我要去,我要去美国,吃好吃的!我要在自由女神像前激动得落泪!而不是在家里遗憾地哭瞎眼睛。戒掉三国杀,戒掉伪装者!努力学习!