开始之前
了解您希望从本教程中学到什么,以及如何最有效地使用本教程本教程。
关于本教程
GUI 测试是测试任何产品都不可缺少的一部分。IBM Systems Director 是一个由数百个屏幕来支持不同操作的产品。IBM Systems Director 的 GUI 测试需要频繁执行且需要在各种受支持的平台上重复。因此,手动进行此测试将十分繁琐。
自动化 GUI 测试有多种工具可用。这些工具当中有很多都可以为 IBM Systems Director 自动化 GUI 测试。但由于 IBM Systems Director 产品不断发展,屏幕经常会发生变更,因此这就要求所用的工具能自动化动态屏幕。Selenium 就是这样一种工具,它被广泛应用于自动化 Web 应用程序测试。它在测试 IBM Systems Director 方面也非常有效。本教程以一种简化方式阐述了用 Selenium 为 IBM Systems Director 自动化 GUI 测试的全部步骤。
目标
本教程的主要目标是帮助从事 IBM Systems Director 的开发人员和测试的人员使用 Selenium 工具自动化 GUI 测试。
前提条件
您应该在自己的系统上安装 IBM Systems Director V6.x.x,然后再继续进行。本教程假设您熟悉 IBM Systems Director 的使用方法。还假设您基本了解 Java、Java 2 平台、Eclipse IDE、JUnit 并掌握 Selenium 的一些基础知识。
系统要求
您系统上应该有如下组件:
- 作为 Firefox 的插件来安装的 Selenium IDE。
- Selenium-RC
- JUnit 4.x
- 配置的 IBM Systems Director
- Eclipse
使用 Selenium 实现对 IBM Systems Director GUI 的自动化测试
为何选用 Selenium?
Selenium 是一个开源工具,用来测试基于 Web 的应用程序。该工具使用的是一种 “record-and-play” 的方案,所以若经常发生屏幕变更,使用它会简单很多。因此,当您在开发阶段频繁遇到屏幕变化时,Selenium 则是自动化 IBM Systems Director GUI 测试的当然之选。Selenium 支持从各种脚本(比如 JUnit、JavaScript、Perl、Python、 Ruby 等)记录向 Selenium 脚本的转换,这就使得它对于了解这些脚本编写语言的用户更为有用。而对于不了解任何编程语言或脚本的用户,它则保留了 record-and-play 选项。
关于 Selenium
有三种不同的 Selenium 工具可用:
- Selenium Integrated Development Environment (IDE) 是一种 Firefox 插件 (add-on)。IDE 用来记录测试的步骤。它记录创建一个测试所需的全部单击、键入及其他动作。记录后,您就可以回放该记录。
- Selenium Remote Control (RC) 可让您在不同的浏览器和平台上运行测试。您还可以用编程语言调整这些测试。
- Selenium Grid(本文并未涉及)可用来跨多个服务器分发测试并平行运行它们。它减少了运行测试的时间。
Selenium IDE 简介
面向 Selenium 脚本的 Selenium IDE 可作为 Firefox 插件安装并可从 SeleniumHQ 下载 Web 页面 下载。它允许您在实际测试环境中记录、调试并编辑测试。它包含了 Selenium 核心,允许您在记录后修改脚本,以及根据要求更改脚本的顺序。它还为您提供了一组 Selenium 命令供您从中选择,这样您就无需记住所有的这些命令。
使用 Selenium IDE 的一些基本步骤如下所示:
- 下载并安装 Selenium IDE。
- 下载 Selenium IDE 插件后,打开 Firefox。
- 单击 Tools 并选择 Selenium IDE 打开 Selenium IDE,如图 1 所示。
图 1. 从 Firefox 启动 Selenium IDE
- Selenium IDE 工具如图 2 所示:
图 2. Selenium IDE 工具
- 观察图 2 中向左侧标记出的矩形区域。
- 第一个按钮运行测试套件。
- 第二个按钮运行单个测试用例。
- 第三个按钮暂停和继续执行。
- 观察图 2 内向右侧标记的第二个矩形区域,第二个矩形有一个按钮。这个红色的圆圈用于开始和停止记录。
使用 IDE 记录测试
测试场景:
- Login:登录到 IBM Systems Director,如图 3 所示。
图 3. IBM Systems Director 登录页面
- 登录后,按下列步骤操作:
- 此工具会自动采用登录页的基础 URL。它会一直如此直至出现 director server 的端口号。例如,https://DS 机器名或 IP 地址 :8422/
- 在用户 ID 的文本框内,输入 IBM Systems Director 的登录用户 ID。
- 在密码文本框内,输入 IBM Systems Director 登录密码。
- 单击 Log in。
- Selenium IDE 工具记录了此用户的所有单击及其输入的文本,如图 4 所示。
图 4. 为 IBM Systems Director 登录所记录的测试脚本
- 在图 4 中,我们看到这个工具已经记录了一些命令(open、type、click 和 wait)、Target(文本框的 id,按钮),甚至有一些我在文本框内输入的值(用户 id 和密码)。
- 保存所记录的脚本,如图 5 所示。
图 5. 保存所记录的测试脚本
- 登录后,按下列步骤操作:
- 系统发现:
发现操作要求用户输入要发现的主机的 IP 地址或主机名,或是 IP 地址的范围。您需要登录进 IBM Systems Director 并导航到发现页面并执行上述任务。您可以记录自登录到 IBM Systems Director 直至使用 Selenium IDE 发现主机的所有动作(包括所有单击及输入的文本)。
参考图 6,获取与发现操作有关的所有已记录的命令和脚本。
图 6. 发现操作的已记录脚本
当我们尝试原样执行这些已记录脚本时,可能会出问题。我们可能需要手动添加一些附加命令(比如 waitforElementPresent)以使其正常工作,如图 7 所示。
图 7. 发现操作的调优测试
在图 7 的前三个矩形中,我们等待一个元素的出现,以便在其上开始任何操作,并且还提供了一个 xxx ms 的额外延时(使用暂停)。额外延时可能需要,也可能不需要,取决于网速。
在图 7 中,第四个矩形框很重要。在这里,我们等待发现过程结束 (waitForTextNotPresent)。我们已经提供了一些延时,然后我们就可以等待 “processing” 文本消失,这个文本是我们单击 Discover 后出现的。此文本一旦消失,我们就可以假设发现已经完成。
我们就可以将上述脚本转化成 Junit4 脚本并从命令提示符运行它。
- 请求访问(发现之后):
请求访问操作会锁定由发现操作所发现的那些资源。需要单击 Request access 并为此资源提供登录凭证。您可以记录自发现操作直至使用 Selenium IDE 执行请求访问操作的所有动作(包括所有单击和输入的文本)。
图 8 显示了面向请求访问的已记录的命令,以及为了调优代码以成功运行测试而添加的附加命令。
图 8. 面向请求访问的已记录及调优的测试脚本
- 注销:
现在从 Systems Director 控制台注销。参考图 9,获取已记录的测试脚本。我们可以记录所有的动作(包括使用 Selenium IDE 进行注销操作的所有点击)。
图 9. 面向注销操作的已记录的测试脚本
将 HTML 代码转换成所需的脚本编写
上述已记录的脚本能够转变成所需的任何一种脚本编写语言,如图 10 所示。
图 10. 将 Selenium 脚本转换成 JUnit4 代码
转换成 Junit4 代码后,登录测试应该类似于图 11 所示。
图 11. Selenium IDE 内转换后的 JUnit 脚本
您可以按自己选择更改浏览器的名称(如图 11 所示)以便在其他浏览器上运行,例如:
- Chrome
- Firefox
- Internet Explorer
现在,我们就可以使用 Selenium RC 为任何场景运行一项单个测试了。
通过 Selenium RC 运行单个测试用例
Selenium-RC 允许测试自动化开发人员使用一种编程语言来最大化开发测试逻辑的灵活性和可扩展性。
Selenium RC 为其所支持的每一种语言提供了一个应用程序编程界面 (API) 和库
要通过 Selenium RC 运行测试,我们需要遵循如下步骤:
- 创建一个 Firefox 概要文件。
- 启动 Selenium RC 服务器。
- 运行 Testcase。
- 创建一个 Firefox 概要文件
- 在 Windows 上创建 Firefox 概要文件
- 单击 Start -> Run。
- 键入
firefox.exe -ProfileManager
并单击 OK,这会打开 Firefox 概要文件管理器,如图 12 所示。图 12. 打开 Firefox ProfileManager 的命令
- 单击 Create Profile 创建一个新的 Firefox 概要文件,如图 13 所示。
图 13. Microsoft Windows 上的 Firefox Profile Manager
- 在 Linux 上创建 Firefox 概要文件
- 在 Linux 上创建 Firefox 概要文件的方式与在 Windows 上相同。
- 在 Linux 终端运行命令 "firefox -profilemanager"。与 Windows 一样,这会打开一个概要文件创建向导,如图 14 所示。
图 14. Linux 上的 firefox ProfileManager
- 在 Windows 上创建 Firefox 概要文件
- 启动 Selenium RC 的步骤
- 在 Windows 上
- 访问 Selenium RC 服务器目录:比如 cd C:\selenium-remote-control-1.0.3\selenium-server-1.0.3(这个目录也是您复制 Selenium RC JAR 文件的地方)
- 运行如下命令来启动 Selenium RC 服务器:java -jar selenium-server.jar -avoidProxy -browserSessionReuse -firefoxProfileTemplate "c:\Selenium\profile"
- 在 Linux 上
- 访问 Selenium RC 服务器目录,比如 cd /tmp/selenium/selenium-remote-control-1.0.3/selenium-server-1.0.3
- 运行如下命令来启动 Selenium RC 服务器:java -jar selenium-server.jar -avoidProxy -browserSessionReuse -firefoxProfileTemplate "/tmp/Selenium/profile"
- 在上述命令中,我们使用了如下选项:
- -browserSessionReuse: 停止测试间的浏览器重新初始化和生成。
- -firefoxProfileTemplate:您需要在此提供通过 Firefox ProfileManager 创建的一个完全限定的 Firefox 概要文件名,如图 13 和 图 14 所示。
- 在 Windows 上
启动 Selenium RC 服务器之后,您会看到如下输出:
清单 1. 启动 Selenium RC 服务器之后,您会看到如下输出:
C:\selenium-remote-control-1.0.3\selenium-server-1.0.3>java -jar selenium-server.jar -avoidProxy -browserSessionReuse -firefoxProfileTemplate "c:\SeleProfile" 16:24:16.421 INFO - Java: IBM Corporation 2.4 16:24:16.437 INFO - OS: Windows XP 5.1 build 2600 Service Pack 3 x86 16:24:16.453 INFO - v2.0 [a2], with Core v2.0 [a2] 16:24:16.453 INFO - Will recycle browser sessions when possible. 16:24:16.593 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub 16:24:16.593 INFO - Version Jetty/5.1.x 16:24:16.593 INFO - Started HttpContext[/selenium-server,/selenium-server] 16:24:19.406 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@75827582 16:24:19.406 INFO - Started HttpContext[/wd,/wd] 16:24:19.406 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver] 16:24:19.406 INFO - Started HttpContext[/,/] 16:24:19.421 INFO - Started SocketListener on 0.0.0.0:4444 16:24:19.421 INFO - Started org.openqa.jetty.jetty.Server@86b086b
要从 Windows 命令行运行 Junit,在向类路径添加了当前目录和两个 jar 之后运行如下命令,比如 C:\Demo\junit-4.3.1.jar;C:\Demo\selenium-server-1.0.3-standalone.jar;C:\Demo\
- 运行 TestCase
C:\Demo>java org.junit.runner.JUnitCore IBM System DirectorLogin
清单 2. 启动测试后,可以在 RC 服务器看到如下跟踪:
16:24:23.843 INFO - Checking Resource aliases 16:24:23.859 INFO - Command request: getNewBrowserSession [*firefox, https://9.12.31.207:8422/, ] on session null 16:24:23.859 INFO - grabbing available session... 16:24:23.859 INFO - creating new remote session 16:24:24.250 INFO - Allocated session 6663937b710b4628ae8c637d8414b36b for https://9.12.31.207:8422/, launching... 16:24:24.843 INFO - Preparing Firefox profile... 16:24:29.156 INFO - Launching Firefox... 16:24:32.234 INFO - Got result: OK,6663937b710b4628ae8c637d8414b36b on session 6663937b710b4628ae8c637d8414b36b 16:24:32.250 INFO - Command request: open[/ibm/console/logon.jsp, ] on session 6663937b710b4628ae8c637d8414b36b
在 Linux 上可以以完全一样的方式运行测试。
将测试用例组织成测试套件并运行
您可以将所有测试用例添加到一个单个测试测试套件,并直接运行这个套件进而运行所有测试。您可以使用如下方式之一运行测试套件:
- 通过 Selenium IDE
- 通过 Eclipse(使用 Selenium RC)
- 通过命令行(使用 Selenium RC)
- 通过 Selenium IDE 运行测试套件
我们已经创建了一个名为 "Director Suite" 的测试套件,并将所有测试都添加到了此套件,如图 15 所示。您可以将所有测试启动为套件,这样您就能够连续运行所有测试。
图 15. 使用 Selenium IDE 将测试运行为测试套件
从图 15 中,我们可以看到三个测试均已通过。
- 通过 Eclipse(使用 Selenium RC)运行测试套件
要运行所有的 JUnits 测试用例,我们需要创建一个 JUnit TestSuite 文件。我们已经创建了一个套件文件并向此套件添加了所有的三个测试,如图 16 所示。在运行这些测试之前,我们需要启动 Selenium RC。您可以通过运行套件文件来启动执行,该套件文件将运行这三个测试用例。要运行这个套件,需要右键单击这个套件文件并选择 run as Junit。
从图 16 中,我们可以看到这三个测试均已通过。
图 16. JUnit 测试套件创建和执行
- 从命令行运行套件:
还可以从命令行运行测试套件,如图 17 所示。通过运行这个测试套件启动执行,进而运行所有这三个测试用例。在运行这些测试之前,需要启动 Selenium RC。
从图 17 中,我们可以看到这三个测试均已通过。
图 17. 通过命令行运行测试套件
使用 Selenium 自动化测试的样例脚本
我们为 IBM Systems Director 的登录、发现、请求访问以及注销操作记录了测试脚本。您可以按需重用这些脚本。随本教程提供了一个可下载的归档文件。这个归档文件包含了修改后的 JUnit 4 脚本。
通过 Selenium 记录的样例代码具有 IBM Systems Director 的硬编码值和端点信息。要想使代码更为灵活、可重用性更好,我们还引入了一个属性文件,用户可以在其中输入 director 和所有的端点信息。测试用例会在运行时读取这个属性文件来检索 Systems Director 和端点信息。附加文件也包含了上述属性文件以及修改后的代码。只需更新这个属性文件,代码就可以在任何系统上运行。