使用Selenium实现基于Web的自动化测试
转载自:https://www.ibm.com/developerworks/cn/web/1209_caimin_seleniumweb/
Selenium 是一个用于 Web 应用程序测试的工具。Selenium 的测试用例直接运行在浏览器中,就像真正的用户在操作一样。与主流的 web 自动化测试框架还有 QTP,基于 Ruby 的 WATIR 等相比,Selenium 支持 IE、Mozilla Firefox 多种浏览器,支持自动录制脚本以及 Java、c#、ruby 等多种运行语言的自动生成,用例制作快捷,运行快速。相比起来 Selenium 要显得更为灵活实用。
杨 晖, 资深软件工程师, IBM
蔡 敏, 软件工程师, IBM
2012 年 9 月 13 日
内容
- Selenium 及其实现原理
- 使用 Selenium 实现自动化测试
- 结束语
- 下载
- 参考资料
- 评论
Selenium 及其实现原理
Selenium 的主要功能包括:
1)测试与浏览器的兼容性:测试应用程序能否兼容工作在不同浏览器和操作系统之上。
2)测试系统功能:录制用例自动生成测试脚本,用于回归功能测试或者系统用例说明。
简而言之,Selenium 就是一款可以录制用户操作,帮助 Web 测试人员简化重复劳动的工具。
目前为止 Selenium 有两种版本:
- Selenium 1(Selenium RC,Remote Control):传统 Selenium 框架,支持多种编程语言脚本生成。但需要启动一个代理 Server 来处理用户与测试 Server 之间的通讯。
- Selenium 2(Selenium Webdriver):全新自动化接口,突破了 Selenium 1 的一些限制,剔除了中间 Server,但由于写这篇文章为止自动生成脚本工具对 Selenium 2 的支持还不好,适合熟悉 Selenium API 的手写 case 测试人员使用。
阅读本文读者可以学习到以下技能:
- 了解 Selenium 自动化测试框架的基本概念。
- 学会搭建应用 Selenium 自动化测试框架的环境。
- 搭建一个自集成的测试容器以持续测试 Selenium 测试用例。
本文着重介绍传统 Selenium 1 的原理及使用方法。接下来让我们看看 Selenium 是如何调用录制脚本并实现自动测试的。
Selenium 1 实现原理
Selenium 引入了 Remote Control Server 这样一个代理 Server,JavaScript 脚本注入和与 Server 通讯都通过这个代理 Server 来进行。如下图所示:
图 1. Remote Control 模式运行流程
之所以引入这个代理 Remote Control Server 是因为“同源策略”的限制,通过这个代理服务器来“欺骗”远程 Server,达到使其以为是从同一个地方 load 代码以正确返回请求数据的效果。
流程说明:
- 客户端建立与 selenium-RC server 的连接。
- Selenium RC Server 启动一个浏览器(或是已经使用中),并注入 JS 代码
- 将 Selenese 代码传到客户端的 Selenium-Core 中。
- Selenium-Core 翻译并解析执行用户录制的操作。
- 让代理 Server 进行通讯
- Remote Control Server 负责跟远程 Web 应用服务器进行通讯。
- 操作完成,显示结果,并执行下一指令。
以上就是 Selenium Remote Control 的执行原理,接下来的章节中将一步步以图例加说明的方式快速说明如何使用 Selenium 来录制脚本,导入 Java 工程,然后定期维护工程。
回页首
使用 Selenium 实现自动化测试
使用 Selenium IDE 录制用户操作
Selenium IDE 是一个基于 Firefox 的插件,用户可以在通过这个插件将客户端操作录制成脚本并导出为 Java、c#、Ruby 等多种运行语言以便统一管理测试用例。
下载 FireFox: 推荐 Firefox 5.0 以上,目前 Selenium IDE 只提供 Firefox 的插件。
下载 Selenium IDE:http://seleniumhq.org/download/
安装插件:
Tools --> Add-ons --> 将下载的 selenium-ide-1.x.xpi 文件拖入对话框即可安装。
安装后可以启动 IDE 插件查看是否安装成功。
图 2. 启动 Selenium IDE 插件
安装后,以 IBM Systems Director 产品为例,说明如何实现“用户登录”这个测试用例。
- 点击录制按钮 如下图 3 中的 1
- 录制过程中,登录用户界面,输入用户名密码。如下图 4
- 然后可以通过是否包含某些字符串来验证是否登录成功。如果下图 5
- 回到登录 IDE 界面,查看已录制步骤 如图 3 中的 2
- 在 IDE 界面中可以验证录制的脚本,必要时回到第四步,如图 3 中的 3
在 IDE 中重运行录制的脚本通过就说明脚本没问题,可以用于测试用例代码导出了。
图 3. Selenium IDE 录制窗口
图 4. 录制过程中,输入用户名密码
图 5. 通过确认是否包含某些文字来验证是否成功登录
使用 Selenium IDE 导出 JUnit 测试用例
在 Selenium IDE 中执行成功后,就可以把测试脚本导出成 JUnit 测试用例了,如图 6 所示:
图 6. 导出 JUnit 代码
导出用例如下:
清单 1. VerifyLogin.java
import com.thoughtworks.selenium.*; import org.junit.After; import org.junit.Before; import org.junit.Test; public class VerifyLogin extends SeleneseTestCase { @Before public void setUp() throws Exception { selenium = new DefaultSelenium("localhost", 4444, "*chrome", "localhost:8422/"); selenium.start(); } @Test public void testVerifyDirectorLogin() throws Exception { selenium.setTimeout("300000"); selenium.open("/ibm/console/logon.jsp"); selenium.type("id=j_username", "test"); selenium.type("id=j_password", "test"); selenium.click("id=other"); selenium.waitForPageToLoad("300000"); verifyTrue(selenium.isTextPresent("IBM Systems Director")); } @After public void tearDown() throws Exception { selenium.stop(); } }
说明:首先实例化一个 DefaultSelenium 对象,传入的参数分别是 RC 服务器 IP、端口、浏览器类型和待测试的 Server 的信息。然后在测试方法里调用 Selenium 1 的 API,这里的代码完全由 IDE 生成,就为我们省去了很多重复代码工作。
运行测试用例:
有了基于 JUnit 的运行测试用例就可以把它导入到 Java IDE 中执行测试了。执行中既需要客户端驱动支持(用于 Eclipse 编译),也需要启动 RC Server:
Selenium RC Server 下载:http://seleniumhq.org/download/
Selenium Client Driver:http://seleniumhq.org/download/
执行命令 java –jar selenium-server-standalone-2.5.0.jar 启动 Selenium RC Server:
图 7. 启动 Selenium RC Server
启动后就可以直接在 Eclipse 中运行测试用例,RC Server 就会启动新窗口并自动按照录制脚本进行测试。并可在 Eclipse 中查看运行结果。
下面让我们看看怎样脱离 Eclipse 自己搭建一个可以持续测试的容器。
构建 JUnit 测试容器以持续测试 Selenium 的测试用例
我们搭建的这个容器可以检测某个文件夹里所有的测试用例自动运行 JUnit 代码进行测试。如果需要还可以将这个容器合并到持续集成环境里,以达到不间断持续功能性测试的需求。
在这里我们会用到 Ant 工具。可以在这里下载:
Ant 下载:http://ant.apache.org/
基础架构
图 8. 基于 Selenium 的 JUnit 的测试容器架构图
可以看见测试人员的工作如紫色箭头所示,而自动化工作如蓝色箭头所示。
这套框架的意义在于,它能自动识别测试用例,并读取配置文件以测试套件运行不同的测试用例。它还可以被合并到项目持续集成软件中,定期地持续进行基于 Web 的功能性测试,并将报告以邮件形式通知管理人员。
说明:
- 由测试人员录制脚本并导出 JUnit。
- 测试人员修改配置文件,将测试用例包含在测试套件中。
- 合并在持续集成软件后,框架会定期检测配置的测试套件
- 逐个加载测试用例。
- 以测试套件为单位其执行所有测试用例。
- 执行完成后将测试套件的结果报告以邮件形式通知管理人员
实现这套框架最关键的当属 Ant 执行脚本了,也是程序执行的入口。这里列出 Ant 的运行脚本,以供读者参考:
清单 2. Build.xml
以下为部分重点内容,会在后面加以说明。完整的 build.xml 请查看附件。<?xml version="1.0" encoding="UTF-8"?> <project name="automationtesting" default="run" basedir="."> ……<!-- 调用 Junit task 运行测试用例--><mkdir dir="${xml}/${var}" /> <junit printsummary="yes"> <classpath> <fileset dir="${lib}"> <include name="**/*.jar" /> </fileset> <pathelement path="${classpath}" /> </classpath> <batchtest todir="${xml}/${var}"> <filelist refid="casesToBeRunning"></filelist> <formatter type="xml" /> </batchtest> </junit> ……<!-- 调用 Junitreport task 生成报表--><junitreport todir="${reports}"> <fileset dir="${xml}/${var}"> <include name="TEST-*.xml" /> </fileset> <report id="${var}_Report" format="noframes" todir="${reports}/html"> <param name="TITLE" expression="Automation Testing Results for ${var}" /> </report> </junitreport> ……<!-- 调用 mail task 发送邮件--><mail mailhost="xx.xx.xx.xx" subject="${reportResult} Result for TestSuite: ${var}"> <from address="AutomationTestTool" /> <to address="xxxx@cn.ibm.com" /> <message mimetype="text/html" src="${reports}\html\Testsuite-report-${var}.html"> </message> <fileset dir="${reports}\html"> <include name="Testsuite-report-${var}.html" /> <include name="Testcase-reports-${var}.zip" /> </fileset> </mail> </project>
说明:程序的入口是 Run task,在 Run task 里先是编译整个工程,然后读取 TestSuites.xml 配置文件,循环执行每一个测试套件。过程中,以此执行以下操作:
- 读取配置的并且实现 TestCase 的 Java 类;
- 调用 Ant 的 junit task 执行测试用例;
- 调用 Ant 的 junitreport task 生成报表;
- 调用 Ant 的 mail task 发送报表到指定邮箱。
清单 3. TestSuites.xml 配置文件样例
<TestSuites> <TestSuite enable="false" id="DiscoverTestSuite"> <Testcase>VerifyLogin</Testcase> <Testcase>DiscoverDevice</Testcase> </TestSuite> <TestSuite enable="true" id="DeleteDeviceTestSuite"> <Testcase>VerifyLogin</Testcase> <Testcase>DeleteDevice</Testcase> </TestSuite> </TestSuites>
说明:配置文件中定义了两个测试套件,第一个包含了 2 个测试用例,先 Login 再发现设备。第二个也包含了 2 个测试用例,先 Login 再删除设备。而第一个测试套件 enable=false 将不被执行。
到此为止,一个简单的可持续测试框架就已经搭建完毕,来运行下看看结果吧
运行测试组建
用 ant 命令执行 Build.xml 即可运行测试框架。
图 9. 工具运行时
执行完成后就会将所有测试用例的结果以报告形式发送邮件到指定邮箱。
图 10. 报告式样
回页首
结束语
本文首先介绍了 Selenium 以及 Selenium 1 的实现原理。紧接着用一个 Login 的简单例子讲述了如何去搭建 Selenium 运行环境,并将其导出为 JUnit 代码。最后构建了一个基于 Ant 的自动化测试 Selenium 框架,持续地对生成的 JUnit 测试用例进行管理以及功能性测试。读者也可以借鉴该脚本搭建自己的轻量级的单元测试框架。
目前主流的 web 自动化测试框架还有 QTP,基于 Ruby 的 WATIR。与这些框架相比,Selenium 支持 IE、Mozilla Firefox 等多种浏览器,同时支持自动录制脚本以及 Java、C#、Ruby 等多种运行语言的自动生成,测试用例制作快捷,运行也比较快速。对于较为轻量级相比起来 Selenium 要显得更为灵活实用。Selenium 不仅用于功能性测试及回归测试,同时也可用于 Web 可视化验收测试。更多的,Selenium 可集成在诸如 Cruise 持续集成软件中,为整体项目提供更大集成测试范围。
回页首
下载
描述 | 名字 | 大小 |
---|---|---|
build.xml 示例 | build.zip | 2KB |
参考资料
学习
- 参考 Selenium首页,查看关于 Selenium 的最新版本和最新技术。
- 参考 Selenium 官方文档,查看 Selenium 1 和 Selenium 2 的基础架构和 API 使用方法。
- “使用 Selenium Grid 改进 Web 应用程序的测试”(developerWorks,2012 年 6 月):Selenium 是专门设计来在许多平台上实现 Web 应用程序测试自动化的工具套件。通过套件中的 Selenium Grid,您可以将您的测试透明地分发到多个主机上。在本文中,您将了解如何并行地执行测试,减少运行浏览器测试套件所需要的时间。通过真实的测试项目和代码示例,学习如何在多个环境中并行地执行测试和加快 Web 应用程序的测试速度。
- “在企业应用中引入 Selenium 进行多浏览器测试”(developerWorks,2011 年 11 月):现在,越来越多的在敏捷开发中引用了 Selenium IDE 进行浏览器测试的辅助,但在 Selenium RC Server 被开发之后,并没有引起广大企业级应用开发者的重视,本文将介绍该组件的工作原理、如何将其引入我们的测试中、并将笔者在实际应用中所碰到的难题与读者进行分享。
- “用 STAF+Selenium 实现并行的自动化测试框架”(developerWorks,2012 年 3 月):本文的意图是通过一个新的视角颠覆传统理念上的串行自动化测试方式,向读者详细介绍了利用 STAF 以及 Selenium 实现的并行式的自动化测试框架,以及为整个项目所带来的优势 。
- developerWorks Web development 专区:通过专门关于 Web 技术的文章和教程,扩展您在网站开发方面的技能。
- developerWorks Ajax 资源中心:这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。
- developerWorks Web 2.0 资源中心,这是有关 Web 2.0 相关信息的一站式中心,包括大量 Web 2.0 技术文章、教程、下载和相关技术资源。您还可以通过 Web 2.0 新手入门 栏目,迅速了解 Web 2.0 的相关概念。
- 查看 HTML5 专题,了解更多和 HTML5 相关的知识和动向。
讨论
使用Selenium实现基于Web的自动化测试相关推荐
- 转:一个简单的基于WEB的QTP自动化测试框架-SAFFRON
来源: http://www.itestware.com/ctest/index.php?option=com_content&view=article&id=62:webqtp-sa ...
- 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架
一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...
- 关于测试的一篇论文, 基于web端selenium的自动化测试设计与实现(有需要的联系我 此论文内容缺失,不要直接用 一经发现,后果自负)
论文题目:基于web端selenium的自动化测试设计与实现 学科(专业):计算机科学与技术 申请人: 指导教师: 摘 要 随着我国科学技术的飞速发展,软件应用技术的更新速度日新月异,规模不断扩大.普 ...
- 基于Selenium实现的web自动化测试框架
目录 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供 ...
- 基于Selenium+Python的web自动化测试框架
一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...
- 基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)
目录 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一.什么是Sel ...
- 基于Selenium与Pytest框架的Web UI自动化测试系统的设计与实现
摘要 随着互联网的高速发展,软件技术日新月异,产品更新换代的加快等,始终都离不开一个最核心的要素就是保证产品的质量,测试人员则在其中担任着不可或缺的角色.测试人员的主要工作职责就是通过各种测试手段去发 ...
- selenium+Edge浏览器实现web端自动化测试
selenium+Edge浏览器的自动化测试 1. 概述 2. selenium自动化原理 (1)selenium3 (2)安装方式 3. 实战案例体验selenium自动化 4. 关于seleniu ...
- web前端自动化测试(基于QT4W框架)
目录 web前端自动化测试(基于QT4W框架) 一.背景 1.1前端测试种类 二.技术方案 三.核心代码 3.1控件封装 3.2操作控件方法实现 3.3测试用例case 3.4断言方法 web前端自动 ...
最新文章
- UNIX网络编程--ioctl操作(十七)
- 《大话数据结构》读书笔记
- php java c_当PHP、Java、C、C++ 这几种编程语言变成汽车是什么样的场景?
- php中heredoc与nowdoc的使用方法
- 菜鸟学Linux - bash的配置文件
- Mac上Gtk-WARNING **: cannot open display解决
- SIR模型的应用(2) - Influence maximization in social networks based on TOPSIS(3)
- 数学建模题目和模型汇总(2000-2019 国赛本科组)
- R数据分析:竞争风险模型的做法和解释
- EPLAN2.9程序安装及注意事项
- 什么是表压?什么是绝压?表压和绝压什么关系?
- 鸿鹄元数正式加入openGauss社区
- dts无损音乐什么意思_QQ音乐,网易云,AppleMusic谁的音质好?
- 站长号文库:.lol域名介绍
- 【云原生之Docker实战】使用Docker部署Mindoc文档管理平台
- [附源码]Node.js计算机毕业设计大学生学科竞赛管理系统Express
- mysql的UNIX_TIMESTAMP用法
- 数据结构思维导图——Java版
- 飞机游戏中子弹与飞机的移动与边界源码
- Impala 技术点梳理
热门文章
- 有赞云 ~ client_id, client_secret, kdt_id。
- MLB青少年棒球培养计划·野球1号位
- 系统升级前的优质软件备份目录
- 演义江湖PC端意见汇总
- 跪求本拉登炸了上海上钢新村
- Springboot毕设项目后疫情时代汽车4S店配件管理系统o43zjjava+VUE+Mybatis+Maven+Mysql+sprnig)
- java sql特殊字符处理_java用字符串拼接SQL语句的特殊字符转义问题
- 罗技 连点 脚本_罗技G与《英雄联盟》合作,将发布K/DA 冠名外设_
- 二进制位运算---左移(<<)右移(>>)
- Linux 图片扩大软件,想要放大图片又担心图片会变得模糊不看?让这款无损放大软件来帮你...