概要: 通过复杂的企业级测试自动化系统,在执行测试时,至少有一些所需的依赖关系通常是不完整的,不可用的或操作不正确的。结果导致超时,不完整的测试,误报和得出不准确的结果。服务虚拟化可以帮助你克服这个高地并提高测试自动化率。
如果你像今天的许多领先的企业测试团队一样,已经认识到需要测试自动化,并致力于提高测试自动化的工作。你可能甚至在自动化覆盖顶级业务风险的主要用例方面取得了重大进展。但是你碰到了自动化高地。
在构建初始自动化测试套件并定期开始执行后,可能会作为持续集成工作的一部分 - 你的依赖关系产生了一个障碍。每当执行测试时,需要在测试环境中使用被测应用程序(AUT)的从属系统组件可用。
然而,对于复杂的企业系统,在执行测试时,至少有一些所需的依赖关系通常是不完整的,不可用的或操作不正确的。有些可能已变更版本,其他可能使用不准确或过期的测试数据。结果是超时,不完整的测试,误报和得出不准确的结果 - 妨碍你提供测试自动化所需的快速质量反馈。
服务虚拟化可以帮助您克服这个高原并提高测试自动化率。
什么是服务虚拟化?
服务虚拟化是一种模拟技术,允许自动执行测试,即使AUT的依赖系统组件(API,第三方应用程序等)无法正确访问或配置进行测试。通过模拟这些依赖关系,可以确保你的测试每次执行时都会遇到相应的依赖行为和数据。
当集成测试或端对端测试需要与依赖系统组件进行交互时,通常使用服务虚拟化,具体有一下情况:
- 不可靠,不断演变或尚未完成;
- 超出你的控制范围(例如由另一公司或部门经营);
- 只能在有限的容量或不方便的时候进行测试;
- 挑战测试环境中设备或配置;
- 不同团队同时需要不同的测试数据设置和其他要求;
- 自动回归测试过度受限制或代价高昂。
稳定自动测试
为了自动化测试成功执行,每次自动化测试套件执行时,所有相关系统都必须具有适当的配置,功能和测试数据 - 所有这些都同时进行。这是一个巨大的挑战。
当一个自动测试套件的执行暂停,不完整的测试,误报或其他测试问题的阻碍时,通常是测试环境稳定性问题的症状。通过服务虚拟化,可以稳定对相关系统的访问,以便测试可以完全,可靠和持续地执行。
例如,假设你需要执行端到端的测试,它与你直接控制之外的订单处理系统进行交互。然而,该订单管理系统正在不断升级与你的测试无关的新功能。由于这些频繁更新,依赖性通常不可用或不稳定。
如果你使用服务虚拟化来模拟执行测试所需的依赖行为和数据,则可以消除依赖性问题影响自动测试执行的风险。你的测试与它们交互的各种依赖关系隔离越多,你的自动测试执行将按计划进行的机会就越大。
通过以这种方式模拟依赖关系,还可以确信测试失败源自AUT的问题,而不是测试环境的问题;你可以可靠地重新创建测试环境,以便缺陷再现或错误修复验证。
自动化复杂测试场景
一旦初始自动化测试套件像微调机器一样运行,下一个目标通常是使更高级的测试用例自动化。然而,消除涉及状态事务的复杂场景的依赖性问题可能要比简单地搜索数据或添加新对象的简单测试用例更具挑战性。
例如,假设你负责测试一个超出控制范围的与CRM进行交互的帐户管理系统。你需要测试这样一个场景:
加载现有的客户帐户,并检查定价详情是否适合其当前地址;
根据他们当前的地址支付客户的完整帐户余额;
将客户的地址更改为更昂贵地区;
重新加载客户的帐户详细信息,并验证基于新地址正确更新定价详情;
验证a)将额外的到期金额添加到客户的帐户,以及b)帐户状态从“全额付款”更改为“到期付款”。
使用传统的服务虚拟化方法,难以模拟执行此测试用例所涉及的依赖关系。但这是一个精心策划的服务virtualization-a特殊类型的测试,从驱动测试的角度来看。
这里,你可以准确地模拟各种状态的客户帐户更新,以便无需实际与后端CRM系统进行交互(或配置)即可进行测试。它还可以消除任何相关的系统延迟(例如,等待地址更新进入系统和更新定价细节),否则可能会在自动化测试过程中引入瓶颈。
基础服务虚拟化场景:
高级服务虚拟化场景:
精心策划的服务虚拟化有时被称为测试驱动的服务虚拟化,因为它侧重于模拟从测试的角度和地方的测试中心服务虚拟化的资产创造和管理。
服务虚拟化还提供了一种简单的方式来测试AUT在针对分段测试环境中难以配置的极端情况和错误条件的行为。例如,假设你的帐户管理系统与多个相关系统(CRM,位置系统和订单处理系统)进行交互,并且你希望自动化测试,以验证当不同组合的依赖系统关闭,延迟,异常操作。或者,假设你要自动执行一个测试,以验证AUT反应如何,其预期的消息被发送或接收的顺序错误。服务虚拟化可帮助你模拟这些条件,以便你可以自动执行所需的广泛的测试以有效地覆盖你的风险。
应用服务虚拟化来提升测试自动化
举个列,有关这些策略如何实地被测试人员被应用,请思考以下来自最大的欧洲通信提供商的示例:
这个组织中的测试人员已经有了一个具有挑战性的任务来测试一个相当复杂的销售到激活过程。该过程从各种接触点(例如,移动应用程序和Web界面)开始,并通过完整的端到端系统链处理订单,其中包括后端订单处理系统,CRM和各种计费和供应系统。这些事务涉及通过HTTP和SOAP进行通信的两百多个依赖关系,包括ESB驱动和批处理事务。进一步复杂的测试,该过程涉及大量变化,包括私有,小企业和具有明显不同产品特性的企业部门。
可以想象,即使有四到八周的时间测试windows,这也总是一个难以测试的系统。然而,一旦团队通过了两周的敏捷冲刺和预期的持续测试,他们意识到需要一种新的方法:一种在不影响其高质量标准的情况下大大加快测试速度的方式。
他们知道,越来越多的测试自动化对于实现这一目标至关重要。然而,由于测试环境的不稳定性导致了误报和中断的测试执行,他们的测试自动化工作受到限制。为了跨过这个障碍,他们需要一种可靠和具有成本效益的方法,以确保所需的依赖关系全部可用于测试 - 每次执行自动化测试时都具有适当的测试数据。
他们应对这一挑战的第一步是采用服务虚拟化。他们最初使用服务虚拟化来模拟在其测试环境中与不稳定系统相关的行为。他们通过记录服务请求为他们的测试用例组合创建了服务虚拟化场景,实质上是以最小的努力学习现有系统。