rational rosa

    技术2022-07-21  92

    问题

    为什么要同时运行虚拟服务的两个不同变体? 通常,当存在两个不同的被测系统(SUT)或集成系统的两个组件,而这两个组件都依赖于相同的服务接口定义时,将使用此功能。 您的情况可能要求这两个组件从该服务接口接收不同的响应,即使它们提交的请求相同。 这可以在两种主要情况下发生:

    多个测试用例并行运行 :例如,当SUT托管在云中时,很容易部署多个相同的实例以在其上运行单独的测试用例。 对于所讨论的服务接口,这些多个测试用例可能需要虚拟服务的不同行为。 SUT中的多个组件 :这些组件依赖于相同的服务接口,但是出于测试用例的目的,它们必须收到不同的响应。 虚拟服务设计不能仅根据请求来区分这些组件。

    本文考虑了在独立的SUT上并行运行多个测试用例的情况。 但是,相同的步骤和原理适用于单独的组件。 只需将SUT替换为component即可 。

    这个例子

    本文遵循一个特定的服务虚拟化示例,如图1所示。在此示例中,被测系统是一个Web应用程序。 该Web应用程序依赖于calculator Web服务,该Web服务由IBM®Rational®Test Virtualization Server中的IBM®Rational®Test Control Panel提供。

    图1.没有服务虚拟化的测试环境

    如图2所示,您可以设置此依赖项的虚拟化,以在测试依赖它的Web应用程序时使用。

    图2.具有服务虚拟化的测试环境

    可以部署此Web应用程序的多个实例,这在测试时特别有用,因此并非所有测试都在等待使用同一实例。 在此示例中,我们将在两个测试单元中设置虚拟化,以便可以同时执行测试,并且可以一次运行两个测试,每个测试单元一个。

    calculator依赖关系未托管在要测试的Web应用程序的生产环境中,而是外部依赖关系。 因此,它也不是托管在测试单元中,而是默认情况下,两个单元都指向相同的外部依赖关系,如图3所示。

    图3.没有服务虚拟化的多个实例使用相同的依赖关系

    如图4所示,您可以对依赖关系进行虚拟化,以提供对服务及其在单个测试单元范围内的行为的控制。

    图4.具有服务虚拟化的多个实例使用单独的虚拟服务

    目标听众

    本文的目标读者是具有使用IBM®Rational®Integration Tester和Rational Test Virtualization Server的一些初步经验的用户。 它适用于面临针对不同的虚拟服务变体运行不同系统的问题的用户,或想要了解有关如何使用Rational Test Control Panel环境和Rational Integration Tester HTTP代理的更多信息的用户。

    先决条件

    确保您可以访问以下软件:

    Rational Test Control Panel,可在Rational Test Virtualization Server安装程序中找到。 在Rational Integration Tester项目中已经创建的虚拟服务,该虚拟服务必须已经定义了环境。 在示例中,本文使用一个项目,从Rational Test Control Panel示例中将calculator WSDL文件导入到该项目中,可以在http:// localhost:7819 / RTCP / examples /的本地安装中找到该文件。 IBM Rational Integration Tester平台包中的HTTP代理 运行并在Rational Test Control面板上注册的IBM Rational Integration Tester代理。

    虚拟服务变体概述

    如问题陈述中所述,此方案包括一个虚拟服务,该虚拟服务在任何时候针对不同的调用者以两种不同的方式运行。 本文将它们称为存根的不同变体 。 但是,这不是在Rational Integration Tester用户界面中找到的术语。

    如何使用这些变体取决于您的情况。 例如,他们可能需要返回不同的数据,使用不同的测试数据集,或者可能需要模拟一个错误,并且可能需要模拟一个成功案例。 您可以使用以下选项之一来定义变体:

    创建一个参数化的存根:单个存根将输入值带入标签数据存储区中的一个标签中。 将存根配置为基于该输入值而表现不同。 例如,如果虚拟服务返回一个数字,例如信用评分,并且两个变体之间的唯一区别是返回的数字,则可以将其配置为将要返回的数字作为输入标签。 有关存根输入标签的更多信息, 请参阅Rational Integration Tester的文档 。 为第一个变量创建一个存根,并为其他变量进行修改:您可以为第一个变量创建一个存根,并以一个版本(例如1.0版)发布。 然后将其修改为其他变体,然后将其发布为第二个版本(例如2.0)。 不推荐使用这种方法,除非被测系统之一确实旨在针对虚拟服务的特定基准运行。 此方法不适用于为服务接口或服务的实际实现的不同版本建模。 在这些情况下,请使用参数化的存根。

    逻辑与物理绑定的环境

    在Rational Integration Tester中, 环境用于将系统的逻辑模型绑定到物理资源,例如Web服务器或消息代理。 逻辑模型没有包含有关物理资源(例如,Web服务器的主机和端口)的足够信息,无法向操作发出请求或虚拟化操作。

    例如,您可能具有用于以下各项的绑定的环境:生产环境,登台环境和连续集成环境。 在这些环境中的每一个中,被测系统和依赖项都可能具有不同的绑定。 这些可能是不同的物理测试单元,或者可能是共享组件的逻辑分组。

    Rational Test Control Panel扩展了这一概念,并且可以将其拦截(包括HTTP代理)和代理限制在特定环境的范围内。 优良作法是为每个环境使用不同的HTTP代理,以防止它们相互干扰。 例如,您不希望连续集成测试环境中的虚拟服务从暂存环境路由流量。

    虚拟服务绑定

    虚拟化的计算器 Web服务在被测系统的外部,因此所有被测系统将在相同的DNS域名上使用相同的HTTP终结点。 因此,对于两种环境,Rational Integration Tester项目中对物理资源的绑定都是相同的。

    将虚拟服务发布到环境时,会在Rational Test Control Panel中创建环境。 控制面板中的环境分为多个域 。 在本文中,使用的域称为default ,但这可以是任何名称。 您可以在发布虚拟服务时或使用控制面板中的“ 管理”页面来创建域 。

    对于本文中的场景,您需要两个环境:一个用于每个被测系统。 也就是说,虚拟服务的每个变体都必须在其自己的环境中运行。

    在Rational Integration Tester中创建环境

    本文假定您在对系统进行建模时已创建了初始环境。 例如,当导入WSDL文件时,它将为您创建具有正确绑定的环境。 在此示例中,原始环境名为TestCell1 。

    在您的Rational Integration Tester项目中,创建另一个环境,如图5所示:

    单击项目 > 编辑环境 选择您现有的环境。 单击“ 克隆所选环境” 。 给新环境起一个名字(例如, TestCell2 )。
    图5.克隆环境

    配置HTTP代理

    如上所述,Rational Test Control Panel可以将其HTTP代理的范围限定在各个环境中。 此范围在HTTP代理配置文件中定义。 从Rational Integration Tester Platform Pack的一次安装中,可以运行两个实例(即两个HTTP代理)。

    设置平台包的HTTP代理的两个实例-针对您的每个环境一个:

    如果HTTP代理正在运行,请停止它。 在平台包的安装目录中,复制httptcp目录,并将新副本命名为httptcp2 。 编辑httptcp / registration.xml文件:取消注释文件底部的<domains>元素,然后插入第一个环境的名称及其域。 这意味着该代理仅选择该环境的规则。 例如,如果您的域称为default而您的第一个环境称为TestCell1 ,则代码看起来类似于清单1。
    清单1.使用TestCell1环境配置第一个代理
    <!-- A proxy does not need to register against a domain or environment. By default it will proxy for all domains/environments. If you want to restrict its use then add <domain> entries based on the example below. Each domain may have 0 or more environments → <domains> <domain name="default"> <environment name="TestCell1" /> </domain> </domains>

    注意:如果尚未创建域,请立即选择其名称。 代理注册后,它将为您创建域。

    编辑文件httptcp2 / registration.xml: 将<http-proxy>元素的port属性更改为其他值,例如3130。 删除<https-proxy>元素(或将其端口号和plainCommsPort号更改为不同的值)。 注释掉或删除<forward>元素。 取消注释文件底部的<domains>元素,然后插入第二个环境的名称及其域。 例如,如果您的域称为default ,第二个环境称为TestCell2 ,则代码看起来类似于清单2。
    清单2.使用环境TestCell2配置第二个代理
    <!-- A proxy does not need to register against a domain or environment. By default it will proxy for all domains/environments. If you want to restrict its use then add <domain> entries based on the example below. Each domain may have 0 or more environments → <domains> <domain name="default"> <environment name="TestCell2" /> </domain> </domains> 通过运行httptcp/startup.bat和httptcp2/startup.bat启动这两个代理。 转到Rational Test Control Panel的代理页面,然后选择适当的域。 确保您可以看到两个注册的HTTP代理,每个代理都报告不同的环境。 如果域是刚创建的,则可能需要刷新页面。
    图6.已注册的代理

    配置被测系统以使用不同的环境

    在代理页面上查看域

    除了HTTP代理条目外,Rational Test Control面板上还显示了其他条目,如图6所示。每个HTTP代理还注册了一个TCP条目,因为它允许TCP端口转发。 代理之一可能不会声明第二个端口,因为<https-proxy>元素被删除(在前面的步骤4中),以避免端口冲突。 RTVS条目是Rational Integration Tester代理。

    为了使SUT使用环境,需要进行两项配置:

    必须为SUT配置与Rational Integration Tester项目环境中使用的绑定相同的绑定。 在此阶段不需要采取任何措施,因为应该使用SUT使用的值(例如,通过导入描述其使用的服务的WSDL)在Rational Integration Tester中创建环境。 必须将SUT配置为通过HTTP代理为适当的环境发送HTTP流量。

    将每个受测系统配置为使用适当的代理,该代理将确定该系统使用哪个环境的虚拟服务:

    应当转到存根的第一个变体的系统应配置为使用第一个代理(在默认端口3128 )。 应当使用存根的第二个变体的系统配置为使用第二个代理,并使用您在httptcp2 / registration.xml的<http-proxy>元素中配置的端口(先前示例中为3130 )。

    创建和发布虚拟服务变体

    使用虚拟服务变体概述中描述的策略之一创建虚拟服务的两个变体 。 如何创建虚拟服务存根不在本文讨论范围之内。 有关更多信息,请参阅Rational Integration Tester 信息中心和资源部分中的链接。 在两种环境下,都将存根发布到Rational Test Control Panel。 此操作使这两种变体均可用于Rational Test Virtualization Server。 转到测试工厂透视图。 右键单击“ 逻辑”文件夹,然后单击“ 发布存根” 。 如图7所示,键入一个新的版本号(例如2.0 )。 如果Rational Test Control面板上不存在任何域,请选择Create new domain ,输入一个名称,然后单击OK 。 选择您的域和两个环境。 点击发布 。
    图7.发布存根

    启动虚拟服务的两个变体

    现在,只要测试单元之一中的测试需要虚拟服务的变体之一,就可以在适当的环境中启动该变体。 然后,它将仅影响该测试单元的流量,而不会干扰其他测试单元中的测试。

    为了证明这一点,请在适当的环境中启动存根的每个变体。

    转到Rational Test Control Panel,打开VIE页面,然后选择第一个环境,如图8所示。
    图8.选择环境
    启动第一个变体。 如果创建了单个存根来接受输入参数,请在启动存根对话框中选择“ 配置” >“ 输入标签” ,然后在相应输入标签的值输入字段中输入第一个变量的值。 如果为单个存根创建了两个版本,每个版本对应一个存根,则在选择存根的名称后,选择第一个版本。 返回VIE页面并选择第二个环境。 启动第二个存根。 如果创建了单个存根来接受输入参数,请在启动存根对话框中选择“ 配置” >“ 输入标签” ,然后在相应输入标签的值输入字段中,输入第二个变量的值。 如果您为单个存根创建了两个版本,每个变体一个,则选择存根的名称并选择第二个版本。

    现在,配置为使用第一个代理的被测系统在向虚拟化服务接口提交请求时将接收到存根的第一个变体的响应,配置为使用第二个代理的系统将接收来自代理的响应。存根的第二个变体。

    为什么这样做

    该方法之所以有效,是因为虚拟服务的每个变体都会为在运行该虚拟服务的环境下注册的代理创建路由规则。 要查看存在的规则,请转至Rational Test Control Panel的“代理”页面,选择适当的域,然后单击“ 显示规则” 。

    在第一个环境中注册的代理将拾取第一个虚拟服务创建的路由规则,并将流量定向到该服务。 在第二个环境中注册的代理将拾取第二个虚拟服务创建的路由规则,并将流量定向到该服务。

    因为已将每个受测系统配置为使用不同的代理,所以它们每个都使用不同的虚拟服务,即使它们同时运行并且具有匹配请求的相同规则条件。

    可以通过两种主要方式在Rational Integration Tester和Rational Test Control Panel中使用环境,并且两者之间存在很大的重叠:

    Rational Integration Tester可以将不同的物理传输(即,不同的端点绑定)分配给不同环境中的服务。 本文不使用此功能。 两种环境都使用相同的绑定,因为在两种情况下,被测系统都为虚拟化的依赖项配置了相同的端点。 在Rational Test Control Panel中,可以使用不同的环境来代表不同的测试实验室,或者用于测试的不同机器集合。 在本文中,每个测试实验室(无论是实际的物理测试实验室,还是测试资源的概念上的分离)都有其自己的HTTP代理,因此可以分别控制每种情况下的流量,而不会干扰测试实验室中正在发生的测试由其他环境代表。 以相同的方式,可以在单个环境中注册Rational Test Virtualization Server代理,因此每个测试实验室可以拥有自己的代理或代理集合,再次避免环境之间的干扰。

    结论

    本文从两个不同的测试系统开始,它们同时使用虚拟服务的两个不同变体。 为实现此目的,该示例在不同的环境下运行每个受测系统,其中每个环境都有其自己的HTTP代理,并且每个虚拟服务都在适当的环境中运行。 本文为如何使用Rational Integration Tester和Rational Test Virtualization Server中的环境提供了帮助,以实现更加灵活,强大,并行的测试和虚拟化。


    翻译自: https://www.ibm.com/developerworks/rational/library/multiple-behaviors-parallel-test-virtualization-server/index.html

    Processed: 0.008, SQL: 9