使用IBM Rational Test Virtualization Server测试移动应用程序

IBM Rational Test Workbench 可帮助模拟可以在集成测试中使用的后端服务。此功能消除了完全理解后端域的需求,使得测试移动应用程序变得更轻松。学习如何使用 IBM® Rational® Test Virtualization Server 测试移动应用程序,而不修改任何代码来使用称为 “存根(stubs)” 的虚拟服务。要通过模拟类似行为来实现存根,则需要分析移动应用程序接口函数的输入和输出行为,这些行为通常是存根执行的操作。移动应用程序连接配置被更 改为通过一个向 Rational Test Virtualization Server 注册的 HTTP 代理来实现路由。

本文将介 绍 Rational Test Virtualization Server、IBM® Rational® Test Workbench 和 IBM® Worklight。还将介绍如何在 IBM Rational Integration Tester 中开发存根和虚拟服务,以及如何将它们与 IBM Worklight Adapter 集成。

备注:要详细理解本文,有必要深入了解这些产品的应用知识。

为什么使用测试虚拟化?

一 些因素限制了充分测试软件的能力:紧张的生产日程、安全限制、第三方软件高昂的使用费用,以及使用不容易获取的硬件的需求。您可以使用测试虚拟化创建虚拟 服务来模拟整个应用程序或系统的行为,这些服务也可以在任何商业硬件、私有云或公共云上运行。要实现测试虚拟化,可以使用:

  • Rational Test Workbench 捕获和建模虚拟服务
  • Rational Test Virtualization Server 管理虚拟服务。

使用 IBM Worklight 开发移动应用程序

IBM Worklight 是一个移动应用程序开发环境。它包含用户代码开发的 Worklight Studio、用于集成后端服务的 Worklight Server、Worklight Runtime Components 和 Worklight Console。Worklight 适配器构成了传输层,供 Worklight Server 用于连接到各种后端系统。

每个 Worklight 适配器包含:

  • 一个 XML 文件,描述连接选项并列出向应用程序或其他适配器公开的过程。
  • 一个 JavaScript 文件,包含 XML 文件中声明的过程的实现。
  • 零个或多个 XSL 文件,包含获取的原始 XML 数据的一种转换模式。

适配器获取的数据保留原始格式,或者由进行适当的预处理。在两种情况下,数据都向应用程序显示为 JSON 对象。

基于 Rational Quality Manager 移动客户端开发一种场景

IBM® Rational® Quality Manager 移动客户端是一种使用 Worklight 集成开发环境 (IDE) 开发的移动应用程序。移动客户端有两个组件:用户界面和 Worklight 适配器。

使用用户界面,测试人员可登录到 Rational Quality Manager 服务器并获取项目区域,获取所选项目的测试执行记录。在本例中,项目为 Testing Purposes Only 2 – CLM 2012 (Quality Management)。 用户界面通过一个在 Worklight 服务器上运行的适配器连接到 Rational Quality Manager 服务器。此适配器使用 REST API 与 Rational Quality Manager 服务器通信来获取数据并将数据传输到用户界面。

Rational Quality Manager Worklight 适配器是一个传输层,可用于配置连接细节和配置获取需要的数据的方法。这些细节在一个称为 adapter.xml 的配置文件中提供。在本例中,该文件名为 RQMAdapter.xml。

在文件 RQMAdapter.xml 中指定配置细节

适配器的常用配置细节如清单 1 所示:

清单 1. RQMAdapter.xml 的配置细节

	<displayName>RQMAdapter</displayName>
	<description>HTTP type Worklight Adapter for jazz server</description>
		<connectivity>
		<connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
		<protocol>https</protocol>
		<domain>jazz.net</domain>
		<port>443</port>
	   	</connectionPolicy>
	<loadConstraints maxConcurrentConnectionsPerNode="2" />
	</connectivity>

更新以下值,使之与您的配置相匹配:

  • jazz.net:Rational Quality Manager 和 Jazz 服务器部署到的公共 URI。
  • https:用于身份验证的安全 http 协议
  • 443:Jazz 服务器使用的安全端口

在文件 RQMAdapter.xml 中获取过程细节

RQMAdapter.xml 文件获取向 Rational Quality Manager 服务器执行身份验证,从服务目录获取项目区域,以及获取指定项目的测试执行记录的过程,如清单 2 所示:

清单 2. RQMAdapter.xml 中的过程细节

<procedure name="loginToRQM" />
<procedure name="fetchServiceCatalogXML" />
<procedure name="getAllTERs" />

使用函数 loginToRQM 执行身份验证

第一步是使用一个用户名和密码向 Rational Quality Manager 服务器执行身份验证。在清单 3 中,loginToRQM 过程使用 POST 方法向 URL jazz/auth/j_security_check 发出这些凭据来执行 Jazz 身份验证。

清单 3. loginToRQM 函数

function loginToRQM(username, passwd) {                                                                
	var lpath = 'jazz/auth/j_security_check';
	var input = {
		method : 'post',
		returnedContentType : 'html',
		path : lpath,
		parameters : {
			j_password : passwd,
			j_username : username
		};
}

使用函数 fetchServiceCatalogXML 获取项目区域

成功执行身份验证后,使用 fetchServiceCatalologXML 函数获取一个该用户(由用户名表示)所属的项目区域列表。在清单 4 中,fetchServiceCatalogXML 函数使用 GET 方法在 URL /qm/oslc_qm/catalog 上获取这些项目区域。

清单 4. fetchServiceCatalogXML 函数

function fetchServiceCatalogXML(catalogPath) {
// catalogPath = '/qm/oslc_qm/catalog'
            var input = {
		method : 'get',
		returnedContentType : 'xml',
		path : catalogPath,
	};
	var response = WL.Server.invokeHttp(input);
	return response;
}

使用函数 getAllTERs 获取测试执行记录

getAllTERS 函数使用 GET 方法在 URL qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/Testing+Purposes+Only+2+-+CLM+2012/executionworkitem/ 上获取项目区域 Testing+Purposes+Only+2+-+CLM+2012 中的测试执行记录,如清单 5 所示。

清单 5. getALLTERs 函数

function getAllTERs() {
	var cpath = "qm/service/com.ibm.rqm.integration.service.\
IIntegrationService/resources/Testing+Purposes+Only+2+-+CLM+2012/executionworkitem/";
	var input = {
		method : 'get',
		path : cpath
	 body : {
	contentType : 'text/xml; charset=utf-8'
	}
	};
	return WL.Server.invokeHttp(input);
}

使用 RQMLight.js 从后端服务获取数据

Rational Quality Manager 移动客户端用户界面是一个移动应用程序,它调用函数来登录到后端服务并从后端服务获取数据。该客户端使用 JavaScript(在本例中为 RQMLight.js)实现,该代码中包含的函数与 RQMadapter 类似,如清单 6 所示。

清单 6. RQMLight.js 函数

//Function to login to Rational Quality Manager Server
function loginToRQM(uname, pword, adapterName) {
	/* set adapter for RQM repository */
	RQM_ADAPTER = adapterName;
 	var invocationData = {
		adapter : RQM_ADAPTER,
		procedure : ADAPTER_PROC1,
		parameters : [ uname, pword ]
	};

	WL.Client.invokeProcedure(invocationData, {
		onSuccess : loginFormSuccessHandler.bind(this),
		onFailure : loginFormFailureHandler.bind(this),
		timeout : 50000
	});

//Function to get the service catalog that contains the project areas
function discoverServices() {
	var cmCatalogURL = "/qm/oslc_qm/catalog";
	var invocationData = {
		adapter : RQM_ADAPTER,
		procedure : ADAPTER_PROC6,
		parameters : [ cmCatalogURL ]
	};

	WL.Client.invokeProcedure(invocationData, {
		onSuccess : discoverServicesSuccessHandler.bind(this),
		onFailure : discoverServicesFailureHandler.bind(this),
		timeout : 30000
	});
}

//Function to parse service catalog
function serviceCatalogSuccessHandler(response) {
	var serviceProviderURLPattern = /(_.+?)\/?$/;
	var serviceProviderURLMatcher;
	var serviceCatalogJsonObj = response.invocationResult;
	var serviceCatalogEntryArr = serviceCatalogJsonObj['ServiceProviderCatalog']['entry'];
	for ( var iter = 0; iter < serviceCatalogEntryArr.length; iter++) {
		var serviceProviderMap = serviceCatalogEntryArr[iter]['ServiceProvider'];
		var serviceProviderTitle = serviceProviderMap['title'];
		var serviceProviderURL = serviceProviderMap['details']['resource'];
		serviceProviderURLMatcher = serviceProviderURLPattern
				.exec(serviceProviderURL);
		projectAreaInfoMap[serviceProviderTitle] = serviceProviderURLMatcher[1];
jq("#projectAreas").append(
				"<option value=\"" + serviceProviderTitle + "\" >"
						+ serviceProviderTitle + "</option>");

//Function to get the test execution records in a specified project area
function getAllTERs() {
	var cpath = "qm/service/com.ibm.rqm.integration.service.\
IIntegrationService/resources/Testing+Purposes+Only+2+-+CLM+2012/executionworkitem/";
	var winput = {
		method : 'get',
		path : cpath
	body : {
	contentType : 'text/xml; charset=utf-8'
	 }
	};
	return WL.Server.invokeHttp(winput);
}

图 1 显示了 Rational Quality Manager 客户端、Rational Quality Manager 适配器和 Rational Quality Manager 服务器之间的集成。

图 1. Rational Quality Manager 客户端、服务器和适配器之间的交互

使用IBM Rational Test Virtualization Server测试移动应用程序

在 IBM Rational Test Workbench 中构建场景

第一步是在 Rational Integration Tester 中通过两个操作来设计一个服务组件:discoverServices 和 getAllTERs。使用这些操作,创建称为 “存根” 的虚拟服务并将它发布到 Rational Test Virtualization Server,部署在一个特定的域中。在 Rational Test Control Panel 中启动存根后,应用程序就可以使用它。

在 Rational Integration Tester 中设计服务组件

图 2 显示了服务组件以及它们各自在 Rational Integration Tester 中的物理视图。

使用IBM Rational Test Virtualization Server测试移动应用程序

图 2. Rational Quality Manager 服务组件和 Rational Integration Tester 中的物理视图

在 Rational Integration Tester 中,通过 HTTP 代理运行存根

Rational Integration Tester 所提供的 HTTP 代理通过 HTTP 运行存根。在 Rational Control Panel 中,可以将该代理视为一个代理,在端口 3128 上注册。向存根发送消息的应用程序必须配置为经由代理发送。如果使用 Rational Integration Tester 测试存根,那么可以在 Web 服务器的 HTTP 连接的 Client 选项卡中输入 HTTP 代理设置。要获取这些设置,可右键单击 localhost 或您的 Web 服务器。在对话框中输入服务器和客户端的细节,如图 3 所示。

图 3. 配置 httpclient 的代理设置

使用IBM Rational Test Virtualization Server测试移动应用程序

配置 discoverServices 操作

要配置 discoverServices 操作的属性,可以从服务组件内双击 discoverServices。如图 4 所示,在 Message Exchange Pattern 选项卡上,应将 Pattern 字段设置为 Request/Reply。在 Request 行上,单击 Browse 打开 Select Schema 对话框。为消息选择一种模式。

图 4. 配置 discoverServices 的模式

使用IBM Rational Test Virtualization Server测试移动应用程序

在 Select a Schema 对话框中,选择 REST 选项并单击 new URL 按钮(在工具栏上以红色突出显示)导入一个 REST 模式。URL 对话框打开时,单击 Import URL Template 并输入 /qm/oslc_qm/catalog 作为 Importing URL,如图 5 所示。

图 5. 导入 URL 模板作为 discoverServices 的模式

使用IBM Rational Test Virtualization Server测试移动应用程序

指定导入 URL,单击 OK。这将打开 Edit URL Template 对话框。在 Template Name 字段中,键入 discoverServices,如图 6 所示。

图 6. Edit URL Template 对话框

使用IBM Rational Test Virtualization Server测试移动应用程序

要添加 discoverServices 作为新模式名称,请单击 OK,如图 7 所示。

图 7. 添加 discoverServices 作为内部模式

使用IBM Rational Test Virtualization Server测试移动应用程序

要添加 discoverServices 作为 Request 字段中的模式名称,可单击 Finish。在 Reply 字段中,选择 Root 字段中的 xml:Element,如图 8 所示。

图 8. 配置 discoverServices 的 Request 和 Reply 字段

使用IBM Rational Test Virtualization Server测试移动应用程序

使 用相同的流程,使用 URL qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/Testing+Purposes+Only+2+-+CLM+2012/executionworkitem/ 为 getAllTERs 添加一种模式,如图 9 所示。

图 9. 配置 getALLTERs 的属性

使用IBM Rational Test Virtualization Server测试移动应用程序

开发 discoverServices 存根

在 Rational Integration Tester 的 Test Factory Logical 视图中,右键单击 discoverServices。选择 New>Stubs>Stub using MEP。在打开的 Create new Stub 对话框中,将存根的名称指定为 discoverServicesStub,如图 10 所示。

图 10. Create new Stub from MEP 对话框

使用IBM Rational Test Virtualization Server测试移动应用程序

打开 discoverServices 的存根编辑器,将 Input Message Body 设置为 /qm/oslc_qm/catalog。在 Message Header 中输入 /qm/oslc_qm/catalog 作为 URL,如图 11 所示。

图 11. 指定 discoverServices 的消息标头和消息主体

使用IBM Rational Test Virtualization Server测试移动应用程序

在 discoverServices 的存根编辑器中,将包含 Rational Quality Manager 服务器的目录细节的 XML 复制到 Output 选项卡中的 Message 部分,如图 12 所示。此消息会在收到针对 Catalog 的请求时返回。

图 12. discoverServicesStub 的 Output 选项卡


使用IBM Rational Test Virtualization Server测试移动应用程序

清单 7. discoverServicesStub 消息输出的示例

<?xml version="1.0" encoding="UTF-8"?>
<oslc_disc:ServiceProviderCatalog xmlns:oslc_disc="http://open-services.net/xmlns/discovery/1.0/" 
rdf:about="https://jazzdev.torolab.ibm.com:9443/qm/oslc_qm/catalog" xmlns="
http://purl.org/dc/elements/1.1/" xmlns:calm="http://jazz.net/xmlns/prod/jazz/calm/1.0/"
 xmlns:dc="http://purl.org/dc/terms/" xmlns:jpres="http://jazz.net/xmlns/prod/jazz/presentation/1.0/"
xmlns:jproc="http://jazz.net/xmlns/prod/jazz/process/1.0/" xmlns:ns3="
http://open-services.net/ns/core#" xmlns:ns5="http://open-services.net/ns/qm#" 
xmlns:ns8="http://jazz.net/ns/qm/rqm#" xmlns:oslc_qm="http://open-services.net/xmlns/qm/1.0/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
   <dc:title>RQM Quality Management Service Provider Catalog</dc:title>
   <oslc_disc:entry>
      <oslc_disc:ServiceProvider>
         <dc:title>Jazz Collaborative ALM (QM)</dc:title>
         <oslc_disc:details rdf:resource=
"https://jazz.net/qm/process/project-areas/_lOUgkJ5fEd-SNKZzk9mZxQ"/>
         <oslc_disc:services rdf:resource=
"https://jazz.net/qm/oslc_qm/contexts/_lOUgkJ5fEd-SNKZzk9mZxQ/services.xml"/>
         <jproc:consumerRegistry rdf:resource=
"https://jazz.net/qm/process/project-areas/_lOUgkJ5fEd-SNKZzk9mZxQ/links"/>
      </oslc_disc:ServiceProvider>
   </oslc_disc:entry>
   <oslc_disc:entry>
      <oslc_disc:ServiceProvider>
         <dc:title>Rational Team Concert (QM)</dc:title>
         <oslc_disc:details rdf:resource=
"https://jazz.net/qm/process/project-areas/_e2-coJ5iEd-SNKZzk9mZxQ"/>
         <oslc_disc:services rdf:resource=
"https://jazz.net/qm/oslc_qm/contexts/_e2-coJ5iEd-SNKZzk9mZxQ/services.xml"/>
         <jproc:consumerRegistry rdf:resource=
"https://jazz.net/qm/process/project-areas/_e2-coJ5iEd-SNKZzk9mZxQ/links"/>
      </oslc_disc:ServiceProvider>
   </oslc_disc:entry>
   <oslc_disc:entry>
      <oslc_disc:ServiceProvider>
         <dc:title>Jazz Foundation (QM)</dc:title>
         <oslc_disc:details rdf:resource=
"https://jazz.net/qm/process/project-areas/_op9jIJ8yEd-SNKZzk9mZxQ"/>
         <oslc_disc:services rdf:resource=
"https://jazz.net/qm/oslc_qm/contexts/_op9jIJ8yEd-SNKZzk9mZxQ/services.xml"/>
         <jproc:consumerRegistry rdf:resource=
"https://jazz.net/qm/process/project-areas/_op9jIJ8yEd-SNKZzk9mZxQ/links"/>
      </oslc_disc:ServiceProvider>
   </oslc_disc:entry>
   <oslc_disc:entry>
      <oslc_disc:ServiceProvider>
         <dc:title>Testing Purposes Only 2 - CLM 2012 (Quality Management)</dc:title>
         <oslc_disc:details rdf:resource=
"https://jazz.net/qm/process/project-areas/_C1_L14ZiEeGGGbas5O0s4A"/>
         <oslc_disc:services rdf:resource=
"https://jazz.net/qm/oslc_qm/contexts/_C1_L14ZiEeGGGbas5O0s4A/services.xml"/>
         <jproc:consumerRegistry rdf:resource=
"https://jazz.net/qm/process/project-areas/_C1_L14ZiEeGGGbas5O0s4A/links"/>
      </oslc_disc:ServiceProvider>
   </oslc_disc:entry>
</oslc_disc:ServiceProviderCatalog>

现在将存根发布到 Rational Test Virtualization Server。右键单击 Stubs 文件夹并选择 Publish stub。这将打开 Publish Stubs 对话框,其中已选择了默认的域和环境 RQMEnv。单击 Publish 将存根发布到服务器,如图 13 所示。按照类似的步骤创建 getAllTERs 存根。

图 13. Publish Stubs 对话框


使用IBM Rational Test Virtualization Server测试移动应用程序

在 Rational Test Virtualization Server 中运行存根

启动浏览器并连接到 http://localhost:7819/RTCP。单击 VIE 菜单显示 RQM Service Component 下的存根,如图 14 所示。要运行该存根,可右键单击它并选择 Start stub。

图 14. Rational Test Control Panel 中的 RQMEnv 选项卡

使用IBM Rational Test Virtualization Server测试移动应用程序

修改 Worklight Rational Quality Manager 适配器连接选项

这些存根现在已准备好与 Worklight Rational Quality Manager 适配器集成。您需要修改连接选项,以便包含 HTTP 代理细节。如清单 8 所示。

清单 8. RQMAdapter 连接选项

<displayName>RQMAdapter</displayName>
	<description>HTTP type Worklight Adapter for jazz server</description>
	<connectivity>
		<connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
			<protocol>http</protocol>
			<domain>localhost</domain>
			<proxy>
			<protocol>http</protocol>
			<domain>localhost</domain>
			<port>3128</port>
			</proxy>
	    </connectionPolicy>
		<loadConstraints maxConcurrentConnectionsPerNode="2" />
	</connectivity>

替换以下值:

  • localhost:localhost 或部署 HTTP 代理的 URI
  • http:用于连接到 HTTP 代理的 HTTP 协议
  • 3128:HTTP 代理使用的端口

重 新将 Worklight Rational Quality Manager 适配器部署到 Worklight 控制台中。刷新 Worklight 控制台,以便查看 HTTP 代理的已更新的连接细节。移动应用程序现在已与存根相集成。重新运行移动应用程序,您可以登录到 Rational Quality Server 来获取项目区域和测试执行记录。

结束语

开 发存根的过程是劳动密集型的。本文提供了实现和部署 REST API 存根的简单步骤。我们使用 Rational Quality Manager REST API 来获取项目区域和关联的测试执行记录,通过该场景演示了这些步骤。类似的过程可用于其他任何 REST 服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值