当API还没有准备好时我们要如何进行测试?
随着当今应用程序的复杂性,很容易出现所有代码碎片都没有同时准备好的情况。作为开发人员,你可能在等待第三方API的更新、合作伙伴组织完成他们的代码,或者你组织中的其他团队准备好一个组件开始测试。这可能会拖累你的组织的整个发布计划,因为在等待所有部件完成的过程中,测试工作会受到影响。
服务虚拟化正是考虑到这一点而设计的。它通过模拟依赖性组件,为开发和测试团队提供了对完整测试环境的不受限制的访问,否则你就会缺少或等待这些组件。
责备游戏
在敏捷环境中,开发人员可以在整个代码库中同时对相互关联的系统组件进行工作。每个开发人员都需要访问其他开发人员的组件,以便完成自己的任务。我们经常会遇到这样的情况:一个开发者在项目早期就需要从另一个开发者的组件或API中获得响应——有时,如此早期,以至于另一个开发者甚至还没有创建被调用的代码。这意味着,一个或两个开发人员将被卡住,直到两段代码都完成。在软件中,我们称之为“死锁”。
我在编写代码的时候,经常会面临这种挑战。我的团队可能正在开发一个面向客户的Web应用,每个冲刺都包括一组新的用户故事,以实现基于我从REST API获得的数据的功能。而几乎每天我都会被卡住,无法对我的应用程序代码进行工作,因为我所依赖的一个API不在工作状态。这可能来自于各种原因,但通常与我的一个同事在处理API时在他们的代码中的某个地方引入了一个bug有关。
最大的问题是,我有一个截止日期,而我的经理希望我在冲刺结束前把这段代码写好。所以,我通常要做的就是走到我同事的桌子前,和他们一起深入研究他们的代码,以帮助解决他们所面临的挑战。(这很好......我们是合作开发者......真是难得啊!)但不幸的是,实际上最终发生的情况是,我把大部分时间都花在调试他们的问题上,以解除自己的障碍。这意味着他们按时完成他们的代码,而我没有。
等待访问依赖的功能会节制敏捷性。在这种情况下,我应该如何工作呢?答案是模拟。我可以使用服务虚拟化来打破这些僵局,并快速构建一个虚拟资产,以模拟几乎所有预期的行为。
使用服务虚拟化
我将使用Parasoft Virtualize来向你展示如何做到这一点(现在你可以申请免费试用和技术指导)。你可以在不需要做任何脚本的情况下创建模拟——无论是在GUI中还是从WSDL等定义文件中。例如,在API开发的早期阶段,WSDL或模式可能无法使用,开发人员可能只有一个可用的示例响应。有了Virtualize,这足以让你入门。我只需抓取响应对象并将其粘贴到响应者中。然后我可以打开一个开关,该工具将在飞行中创建一个模式。这非常有用,因为我不需要担心发送正确的有效载荷,随着数据的变化,Virtualize会确保每次发送响应时有效载荷结构保持一致。这使得模拟响应非常容易。端点是自动设置的,并且始终可用。我只需要关注我希望新的响应发送什么数据。通过Virtualize,你还可以可视化地模拟各种消息格式,如XML、JSON以及各种传统的、金融的、医疗保健的和其他特定领域的格式。
用模拟响应这种方式工作有很大的优势,其中最重要的是时间。一个简单的服务响应可以在几分钟内完成设置,而不是等待真实服务的几天。这让我可以立即开始工作,做出响应来对照开发,并立即看到对其新代码的影响。这帮助我更聪明、更快地编写代码,因为通常无法预测的条件可以立即测试出来,并实时调整功能。
这正是我让自己摆脱这种等待周期的方法。当一个后端API出现故障时,我使用服务虚拟化来模拟响应。我可以放入任何我想要的有效载荷,我知道它是准确的,因为我已经使用了一个定义。我也相信它会给我提供正确的数据,因为我在控制之中。使用这项技术可以让我在最后期限内完成任务。