《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

图片1.jpg

第1章  Selenium自动化测试框架入门

 1.1  Selenium自动化测试框架概述

     说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium

     图1-1是某企业招聘自动化测试工程师的信息,大家可以看到在岗位任职条件方面明确指出要求应聘者具有Selenium等主流自动化测试工具的使用经验。

image002.png


1-1  某企业自动化测试工程师招聘信息

   那么Selenium是谁开发的?它是用来解决什么问题的?它为什么会被自动化测试人员广泛使用呢?

        在日常的软件测试工作中,功能测试是软件测试的重要环节,而手动的功能测试有许多缺点,其中主要的缺点是测试过程单调且重复,这种长时间的重复操作容易使人厌倦、出错。2004年,Thoughtworks的工程师Jason Huggins决定使用自动化测试工具来改变这种状况。他开发了一款名为JavaScriptTestRunnerJavaScript程序,这款JavaScript程序可以自动进行Web应用程序的功能测试。同年,JavaScriptTestRunner更名为Selenium

Selenium是开源的,可以在GitHub上找到,如图1-2所示。Selenium是大型项目,包含用于支持Web浏览器自动化的一系列工具和库。

image004.png


1-2  GitHub上的Selenium项目信息

    从图1-2可以看出,在Selenium项目的仓库中共有19个子项目,这也验证了Selenium确实是大型项目。这里我们只关注Selenium的核心内容,而不去关注其他辅助性的子项目。

 1.2  Selenium的历史版本及核心组件

在写作本书时,Selenium的最新可获取版本是Selenium 4.0 alpha版本,而稳定版本是Selenium 3.0,对应的可下载版本是Selenium 3.141.0。为了使读者能够系统地掌握Selenium,我认为非常有必要了解Selenium的历史版本及核心组件,Selenium的核心组件如图1-3所示。

image007.png


1-3  Selenium的核心组件

1.2.1  Selenium 1.0

1.Selenium IDE

2006年,Shinya Kasatani 开发了Selenium IDE的第一个版本,当时它是Firefox浏览器的一个插件。通过该插件,在Firefox浏览器中实现业务功能时,能够自动录制业务功能脚本,如图1-4所示。你还可以根据需要将产生的脚本转换为PythonJavaRubyC#等脚本信息,如图1-5所示。录制的脚本或者由脚本产生的脚本信息可以回放,从而验证功能的正确性、可用性等。

image009.png


1-4  通过Selenium IDE录制脚本

image011.png


1-5  Selenium IDE转换后的Python脚本信息

Selenium IDE具有以下特点。

q    操作简单,不要求操作人员具有编码能力。

q    测试脚本可复用,从而减轻测试人员的重复性操作压力。

q    可以单个或批量运行测试脚本。

q    脚本支持命令行调用可用于持续集成。

q    可以控制脚本的执行速度。

q    一定程度上支持脚本调试功能,如断点、单步运行等。

q    可以将脚本导出为使用多种不同语言。

这里只是对Selenium IDE做了简单介绍,后续我们将进行更加详细的介绍。

2.Selenium Remote Control(RC)

         Paul Hammant开发了Selenium Remote Control,这里我们将Selenium Remote Control简写成Selenium RC。前面已经介绍过Selenium的核心是JavaScriptTestRunnerJavaScriptTestRunner是一组JavaScript函数,可首先通过使用浏览器内置的JavaScript解释器进行解释和执行Selenese命令,然后再将Selenium Core注入浏览器。但是,这里存在同源策略问题,也就是说,假设有一个JavaScript测试脚本,该脚本要访问baidu.com域,从而访问baidu.com/newsbaidu.com/map之类的页面元素,这没有问题,但无法访问epubit.combing.com等其他域的元素。因为baidu.com/newsbaidu.com/map同源,它们有相同的域,都是baidu.com。那么怎么才能够跨域访问呢?Selenium RC就是用来解决这一问题的,它分为Client LibrarySelenium Server两部分。Client Library部分提供了丰富的接口,主要用于编写自动化测试脚本来连接、控制Selenium ServerSelenium Server负责充当客户端配置的HTTP代理,并“欺骗”浏览器以使Selenium Core和被测试的Web应用程序共享相同的来源,接收来自客户端程序的命令,并将它们传给浏览器。

3.Selenium Grid

        Patrick Lightbody开发了Selenium GridSelenium Grid可以实现在不同的浏览器和操作系统中并行地执行测试脚本,从而最大限度地缩短测试时间,提升工作效率。具体的工作模式如下。

   由一个Hub节点控制若干NodeHub节点负责管理和收集Node的注册和工作状态等信息,接收远程调用并将相关请求分发给各Node来执行。

1.2.2  Selenium 2.0

        Selenium 2.0Selenium 1.0的基础上添加了对Selenium WebDriver的支持。

1.Selenium WebDriver

Selenium WebDriverSimon Stewart2006年开发,是一个可以在操作系统级别配置和控制浏览器的跨平台测试框架。Selenium WebDriver可直接与浏览器应用程序进行本地交互。Selenium WebDriver支持各种编程语言,如PythonRubyPHPPerl等,还可以与JUnitUnittest之类的单元测试框架集成以进行测试管理。

Selenium WebDriver架构主要包括4部分—— Selenium Client LibraryJSON Wire Protocal Over HTTP ClientBrowser DriversBrowsers,如图1-6所示。

image014.jpg


1-6  Selenium WebDriver架构

q    Selenium Client LibrarySelenium自动化测试人员可以使用JavaRubyPythonC#等语言,利用它们提供的库来编写脚本。

q    JSON Wire Protocol Over HTTP ClientJSON Wire Protocol是在HTTP服务器之间传输信息的REST风格的API。每个浏览器驱动程序(如FirefoxDriverChromeDriver等)都有它们各自的HTTP服务器。

q    Browser Drivers:不同的浏览器都包含一个单独的浏览器驱动程序。浏览器驱动程序与相应的浏览器通信。当浏览器驱动程序接收到任何指令时,将在相应的浏览器中执行,响应信息将以HTTP的形式返回。

q    BrowsersSelenium支持多种浏览器,如FirefoxChromeIESafari等。

SeleniumWebDriver原本属于两个不同的项目。为了弥补SeleniumWebDriver各自的不足,形成更加完善的Selenium测试框架,才对这两个项目进行了合并。

2.Selenium 3.0

目前发布的稳定版本是Selenium 3.0Selenium 3.0版本做了以下更新。

q    去除了Selenium RC组件。

q    Selenium 3.0只支持Java 8及以上版本。

q    IE支持方面,只支持IE 9.0以上版本。

q    Selenium 3.0中的Firefox需要使用独立的浏览器驱动。

3.Selenium 4.0

    自从20194月发布Selenium 4.0的第一个alpha版本以来,截至目前Selenium 4.0已有4alpha版本,如图1-7所示。Selenium 给自动化测试从业者带来了更多的期待,那么Selenium 4.0又有什么新特性呢?

image015.png


1-7  Selenium 4.0 alpha版本的获取方式(针对Java语言)

    单击4.0.0-alpha-4链接,可以查看对应的Maven依赖信息,如图1-8所示。

           Selenium 4.0主要包括以下新特性。

q    Selenium IDE功能改版:用过Selenium IDE的读者都清楚,之前Selenium IDE以插件的形式运行在FirefoxChrome浏览器中,改版后将能够用于更多浏览器,同时还提供了全新的基于Node.jsCLI(命令行)运行程序,能够并行执行测试用例,并提供通过和失败的测试用例、执行耗时等相关信息。新的Selenium IDE运行程序完全基于Selenium WebDriver

image018.jpg


1-8  Selenium 4.0.0-alpha-4Maven依赖信息

q    WebDriver API成为W3C标准:WebDriver API不仅用于Selenium,还用在很多其他的自动化测试工具(如Appium)中。Selenium新版本最突出的变化是WebDriver API完全遵循W3C标准,这意味着WebDriver API现在可以跨不同的软件实现,而不会出现任何兼容性问题。

q    Selenium Grid改良:如果你以前用过Selenium Grid,一定会遇到一些节点配置方面的问题并记忆深刻。Selenium Grid有两个基础组件—— NodeHubNode用于执行测试用例,而Hub用于控制所有执行用例的Node。我们在连接HubNode时,经常会出现很多问题。但在Selenium 4.0中,当启动Selenium Grid时,Selenium Grid将同时充当HubNode的角色,使得连接过程变得非常容易,从而很好地支持了Docker部署,并且不存在线程问题。Selenium Grid 服务器还可以输出JSON格式的日志文件。在用户界面上,Selenium 4.0也有了很多改良,可以直观地看到执行测试用例的相关信息等。

q    更直观方便的调试信息:钩子(hook)和请求(request)跟踪的日志记录也得到了改进,因为可调试或可观察性不再仅适用于DevOps。自动化测试人员现在可以更好地使用改进的用户界面来进行调试。

q    更完善的文档:文档对于任何项目的成功都非常重要。自从Selenium 2.0发布以来,这些文件已经很多年没有更新了。也就是说,任何想学习Selenium的人都必须依赖旧的教程,但许多特性在Selenium 3.0中已经发生了变化。SeleniumHQ承诺将提供一份新的文档,这也许是自动化测试工程师最期待的更新。

答疑解惑群:50788246

猜你喜欢

转载自blog.51cto.com/tester2test/2660122