IBM Rational Quality Manager 与 Selenium 的集成应用

Selenium 是一款基于Web应用的开源测试工具,它能够支持多种浏览器和多种编程语言,同时它提供了快速、轻量级的浏览器模拟器,为用户提供了最优秀框架的最佳途径。IBM Rational Quality Manager(RQM)是一款基于 Web 的出色的质量管理软件,用于贯穿软件生命周期的综合测试规划和测试资源管理。它能够管理并运行由其他工具创建的自动化测试脚本。本文将介绍如何通过 JUnit Selenium Adapter 将 Selenium 与 RQM 集成起来,更好的通过 RQM 来执行和管理 Selenium 测试脚本。

游 悠, 软件工程师, IBM

游悠,IBM软件工程师。现服务于IBM中国软件研发中心全球化部门。具有多年的互联网和软件测试经验和两年自动化测试经验。



张 海东, 高级软件工程师, IBM

张海东,IBM高级软件工程师。现在服务于IBM中国软件研发中心全球化部门。在软件测试和自动化方面有多年的经验。



2012 年 11 月 30 日

下载 IBM® Rational® Quality Manager 试用版  |  在线试用 IBM Rational 协作化生命周期管理解决方案
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

一、RQM 及其如何管理自动化测试脚本的简介

IBM Rational Quality Manager(RQM)是一款基于 Web 的出色的质量管理软件,用于贯穿软件生命周期的综合测试规划和测试资源管理。它提供了多种适配器与其他工具集成,使 RQM 能够管理并运行由其他工具创建的自动化测试脚本。

Selenium 是一款基于 Web 应用的开源测试工具,它能够支持多种浏览器和多种编程语言,同时它提供了快速、轻量级的浏览器模拟器,为用户提供了最优秀框架的最佳途径。它的诸多优势,令 Selenium 成为当下非常流行的 Web 应用程序的自动化测试工具。

RQM4.0 版本中,提供了 JUnit Selenium Adapter 来实施与 Selenium 的集成,使 RQM 可以运行 Selenium 2.0 WebDriver JUnit4 的测试件。

当 JUnit Selenium Adapter 运行时,该 Adapter 会对 RQM 服务器进行轮询,以获取运行 Selenium 测试的请求。请求中包括要运行的 Java 类(例如,JUnit 测试套件或测试用例)、必需的任何其他类路径值以及要为用于运行测试的 Java 虚拟机 (JVM) 设置的任何 Java 系统属性(可选)。运行测试后,Adapter 会将执行结果以及关联的附件上传到服务器。


二、如何配置 JUnit Selenium Adapter

在配置和使用 JUnit Selenium Adapter 之前,用于运行 JUnit Selenium Adapter 的计算机上必须有 Java 运行时环境 (JRE) 。

  1. 在运行 JUnit Selenium Adapter 的计算机上,需要下载最新版本的 Selenium 客户机 Java 驱动程序,并解压到某个本地目录中。
  2. 当安装 RQM 时,运行此 Adapter 所需要的组件即被放置在 RQM 安装目录中的归档文件中 (QM_install_dir/JazzTeamServer/server/conf/qm/adapters/RQMJUnitSeleniumAdapter.zip)。将此文件复制到运行 JUnit Selenium Adapter 的机器,并将此文件解压缩到本地目录。
  3. 进入步骤 2 解压的文件目录,打开 <...>/RQM-Extras-JUnitSeleniumAdapter/selenium.properties 文件,将从 Selenium 客户机驱动程序下载的所有 .jar 文件添加到 com.ibm.rqm.selenium.seleniumClasspath 属性的值中。路径条目至少要包含运行 Selenium V2.0 WebDriver JUnit4 测试套件或测试用例所必需的类。使用者还可以指定其他共享库的类的路径条目来引用。例如,如果您使用的是 Selenium V 2.21.0 和 JUnit4.10,那么 com.ibm.rqm.selenium.seleniumClasspath 属性类似于以下示例:
com.ibm.rqm.selenium.seleniumClasspath=D:/libs/selenium-2.21.0/selenium-java-2.21.0.jar; 
D:/libs/selenium-2.21.0/selenium-server-standalone-2.21.0.jar; 
D:/libs/selenium-2.21.0/libs/apache-mime4j-0.6.jar; 
D:/libs/selenium-2.21.0/libs/bsh-1.3.0.jar; 
D:/libs/selenium-2.21.0/libs/cglib-nodep-2.1_3.jar; 
D:/libs/selenium-2.21.0/libs/commons-codec-1.6.jar; 
D:/libs/selenium-2.21.0/libs/commons-collections-3.2.1.jar; 
D:/libs/selenium-2.21.0/libs/commons-exec-1.1.jar; 
D:/libs/selenium-2.21.0/libs/commons-io-2.0.1.jar; 
D:/libs/selenium-2.21.0/libs/commons-jxpath-1.3.jar; 
D:/libs/selenium-2.21.0/libs/commons-lang-2.6.jar; 
D:/libs/selenium-2.21.0/libs/commons-logging-1.1.1.jar; 
D:/libs/selenium-2.21.0/libs/cssparser-0.9.5.jar; 
D:/libs/selenium-2.21.0/libs/guava-11.0.1.jar; 
D:/libs/selenium-2.21.0/libs/hamcrest-core-1.1.jar; 
D:/libs/selenium-2.21.0/libs/hamcrest-library-1.1.jar; 
D:/libs/selenium-2.21.0/libs/htmlunit-2.9.jar; 
D:/libs/selenium-2.21.0/libs/htmlunit-core-js-2.9.jar; 
D:/libs/selenium-2.21.0/libs/httpclient-4.1.3.jar; 
D:/libs/selenium-2.21.0/libs/httpcore-4.1.3.jar; 
D:/libs/selenium-2.21.0/libs/httpmime-4.1.3.jar; 
D:/libs/selenium-2.21.0/libs/ini4j-0.5.2.jar; 
D:/libs/selenium-2.21.0/libs/jcommander-1.13.jar; 
D:/libs/selenium-2.21.0/libs/jna-3.4.0.jar; 
D:/libs/selenium-2.21.0/libs/jna-platform-3.4.0.jar; 
D:/libs/selenium-2.21.0/libs/json-20080701.jar; 
D:/libs/selenium-2.21.0/libs/junit-dep-4.10.jar; 
D:/libs/selenium-2.21.0/libs/nekohtml-1.9.15.jar; 
D:/libs/selenium-2.21.0/libs/operadriver-v0.11.jar; 
D:/libs/selenium-2.21.0/libs/protobuf-java-2.4.1.jar; 
D:/libs/selenium-2.21.0/libs/sac-1.3.jar; 
D:/libs/selenium-2.21.0/libs/serializer-2.7.1.jar; 
D:/libs/selenium-2.21.0/libs/testng-6.0.1-nobsh-noguice.jar; 
D:/libs/selenium-2.21.0/libs/webbit-0.4.6-full.jar; 
D:/libs/selenium-2.21.0/libs/xalan-2.7.1.jar; 
D:/libs/selenium-2.21.0/libs/xercesImpl-2.9.1.jar; 
D:/libs/selenium-2.21.0/libs/xml-apis-1.3.04.jar; 
D:/libs/junit4.10/junit-4.10.jar;

三、如何启动 JUnit Selenium Adapter

为了利用 RQM 管理并运行 Selenium 测试脚本,在配置好 JUnit Selenium Adapter 之后,可以通过命令提示符启动该适配器:

  1. 打开命令提示符,进入 JUnit Selenium Adapter 的目录
  2. 根据您的操作系统,选择以下任意一种方式:
    1. Windows:

C:\start.bat -repository https://qmserver:port/qm -user userid -password password [-adapterName adapter-name] [-projectArea project area] [-sleepTime sleep time] [-configFile configuration file]

  1. Linux:

$ start.sh -repository https://qmserver:port/qm -user userid -password password [-adapterName adapter-name] [-projectArea project area] [-sleepTime sleep time] [-configFile configuration file]

其中:

  • qmserver 是质量管理服务器的主机名或 IP 地址。
  • port 是质量管理服务器运行于的端口。
  • userid 是具有运行适配器的许可证的质量管理的注册用户标识。
  • password 是所提交的用户标识的密码。
  • adapter name 是用户指定的适配器名称。
  • project area 是已登录的项目的名称。
  • sleep time 是两次轮询任务之间的轮询时间间隔。缺省设置是 5 秒钟。
  • configuration file 是用于存储和读取此适配器设置的文件。缺省文件名为 config.ini。

当成功启动该适配器时,将看到如下提示:

图 1. 启动 JUnit Selenium Adapter
图 1. 启动 JUnit Selenium Adapter

该适配器会生成一个配置文件(config.ini 文件或 -configFile 选项中所指定的文件)以及包含相关的注册信息。当适配器重新启动时,会复用此信息。

因此,若下次要从 config.ini 文件重新启动 JUnit Selenium Adapter,可以不用添加参数直接运行,如 start.bat。


四、在 RQM 上管理并运行现有的 Selenium V2.0 WebDriver Junit4 测试脚本

Selenium 脚本示例
public class DemoTestCase {
 private WebDriver driver;
 private String baseUrl;
 private StringBuffer verificationErrors = new StringBuffer();

 @Before
 public void setUp() throws Exception {
 driver = new FirefoxDriver();
 baseUrl = "http://www.baidu.com";
 }

 @After
 public void tearDown() throws Exception {
 driver.quit();
 String verificationErrorString = verificationErrors.toString();
 if (!"".equals(verificationErrorString)) {
 fail(verificationErrorString);
 }
 }

 @Test
 public void test() throws Exception {
 driver.get(baseUrl);
 WebElement element = driver.findElement(By.id("kw"));
 element.sendKeys("seleniumhq");
 element.submit();
 System.out.println("Driver:" + driver.getTitle());
 }
}

接下来将演示如何在 RQM 中管理并运行现有的 Selenium V2.0 WebDriver Junit4 测试脚本。

  1. 打开登录 RQM 用户界面,进入 Project Area,通过菜单 Construction >> Create Test Case 创建一个 Demo Test Case.
图 2. 创建 Test Case
图 2. 创建 Test Case
  1. 通过菜单进入 Construction >> Create Test Script,填写对应的 Selenium 脚本的信息。注意以下关键字段值的填写:
    • Type:选择 JUnit Selenium 作为脚本类型。
    • Test Class: 要执行的 JUnit Selenium 类的名称。
    • Classpath: 运行测试类所需要的类路径条目,以分号分隔。
    • Java System Properties: 要传递给 JVM 的 Java 系统属性。
图 3. 创建 Test Script
图 3. 创建 Test Script
  1. 将 Test Case 与 Test Script 相关联:

进入步骤 1 创建的 Test Case,加载 Test Script 模块,点击 Add Test Script,选择步骤 2 创建的 Test Script。

点击确认,将选中的 Test Script 加入到当前 Test Case 中,并保存。

图 4. 关联 Test Case 与 Test Script
图 4. 关联 Test Case 与 Test Script
  1. 创建 Test Case Execution Records (ER):
    • 自动生成 ER:若未手动创建 ER,在 run case 之后,RQM 会默认创建相应的 ER。
    • 手动创建 ER:在 Test Case 页,加载 ER 模块,点击 Generate Test Case Execution Records 图标,输入测试环境的信息即可创建。然后确认运行环境信息,并保存 ER。
图 5. 手动创建 ER
图 5. 手动创建 ER
  1. 运行脚本:
    • 前置条件:运行的目标计算机上的 Adapter 是启动着的。
    • 方式一:在 ER 模块中,选中相应运行环境的 ER,点击 Run Test。
图 6. 选择特定的 ER 记录运行脚本
图 6. 选择特定的 ER 记录运行脚本
  • 方式二:通过 Test Case 头尾的图标直接调出 Run Test Case 的配置页面。
图 7. Run Test Case 的图标所在位置
图 7. Run Test Case 的图标所在位置
图 8. Run Test Case 的配置页面
图 8. Run Test Case 的配置页面
  1. 运行过程:
图 9. Test Case 运行时界面
图 9. Test Case 运行时界面
图 10. Test Case 运行结束界面
图 10. Test Case 运行结束界面
  1. 运行后相应的 ER 状态会同步更新。
图 11. 运行成功的 ER 状态
图 11. 运行成功的 ER 状态

五、测试结果和测试报告

运行 Selenium 测试后,RQM 同时提供了相当不错的测试报告。您可以查看执行结果来获取 JUnit 测试的详细信息:

  • JUnit 测试名称
  • 测试的启动和停止次数
  • 成功 / 失败状态,对于失败的测试,将提供导致失败的异常。
  • 由测试生成的屏幕捕获 ( 可选 )

上一章节的示例,运行成功的结果,如图所示:

图 12. 无屏幕捕获的 Test Case 运行结果报告
图 12. 无屏幕捕获的 Test Case 运行结果报告

由于 Selenium 脚本通常会适当地针对浏览器会话屏幕进行屏幕捕获,以便作为测试结果输出,同时也方便排查错误。因此在通过 RQM JUnit Selenium Adapter 运行 Selenium 脚本时,也考虑到了这一点。只要在代码中做一点简单的改动,便可自动将由 JUnit Selenium 测试创建的屏幕捕获添加至测试用例的执行结果中,以供日后查看。

在 JUnit Selenium Adapter 执行测试时,它会设置运行 JUnit Selenium 测试的 JVM 中名为"selenium.screenshot.dir"的 Java 系统属性。此 Java 系统属性的值是运行该适配器的机器上的某个目录的完整路径。在每个 JUnit Selenium 测试执行结束时,将搜索由"selenium.screenshot.dir"指定的目录以查找图像文件(.png、.jpg、.jpeg、.gif、.tif 和 .bmp)。如果找到任何图像文件,那么会在 RQM 服务器上创建文件附件,并将对这些文件附件的引用包括在执行结果中。

修改上一部分中的示例代码:

public class DemoTestCase {
	private WebDriver driver;
	private String baseUrl;
	private StringBuffer verificationErrors = new StringBuffer();

	@Before	
	public void setUp() throws Exception {
		driver = new FirefoxDriver();
		baseUrl = "http://www.baidu.com";
	}

	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}

	@Test
	public void test() throws Exception {
		driver.get(baseUrl);
		WebElement element = driver.findElement(By.id("kw"));
		element.sendKeys("seleniumhq");
		element.submit();
		takeScreenShot("searchresult1.png");
		System.out.println("Driver:" + driver.getTitle());		
	}
	
	private void takeScreenShot(String fname) throws Exception {
	 File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
	 String imageFileDir = System.getProperty("selenium.screenshot.dir");
	 if (imageFileDir == null)
	 	imageFileDir = System.getProperty("java.io.tmpdir");
 	 FileUtils.copyFile(scrFile, new File(imageFileDir, fname));
	}
	
}

修改代码后,重新执行 Test Case,结果如下:

图 13. 保存了屏幕捕获的 Test Case 运行结果报告
图 13. 保存了屏幕捕获的 Test Case 运行结果报告

六、总结

本文通过向读者介绍 JUnit Selenium Adaptor 自动化适配器和 RQM 服务器的连接配置。以及用具体的步骤来演示在 RQM 上执行 Selenium 测试用例,查看执行结果,如何进行调试等场景。让对 RQM 和 Selenium 集成应用有兴趣的读者可以快速入门,并更好的体验这两者集成之后所带来的强大功能。

参考资料

学习

获得产品和技术

  • 访问 Selenium 的官方网站,学习 Selenium 的相关知识并下载 Selenium 的工具包。
  • 获取免费的 Rational 软件工具包系列,了解最新的 IBM Rational 软件开发工具技术文档和资源。
  • 下载更多免费的 IBM Rational 试用版软件,了解 IBM Rational 软件的最新特性。
  • 获取更多 IBM 试用版软件,并熟练掌握来自 DB2®、Lotus®、Tivoli®,以及 WebSphere® 的开发工具和中间件产品,用这些试用版软件开发您的下一个项目。这些试用版软件可以免费直接从 developerWorks 下载。

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
  • 访问 developerWorks 社区上的 Jazz 技术小组,这里汇集了丰富的 Jazz 平台中文技术资源。 您可以通过这里了解更多关于 Jazz 平台和 Jazz 技术发展趋势的最新信息。
  • 加入 IBM 软件下载与技术交流群组,参与在线交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=848053
ArticleTitle=IBM Rational Quality Manager 与 Selenium 的集成应用
publish-date=11302012