我正在研究一个新项目,该项目将从第三方REST API查询数据。这是用于实时体育数据供稿,因此,供稿仅在实际进行比赛时才起作用。
尽管第三方提供了很好的文档(XSD等),但是他们无法模拟游戏的进行,因此要测试我针对该API编写的代码,我必须等待实际的游戏进行。
我唯一的办法就是自己编写代码来模拟游戏,但这似乎需要大量工作。您将如何处理?
我正在研究一个新项目,该项目将从第三方REST API查询数据。这是用于实时体育数据供稿,因此,供稿仅在实际进行比赛时才起作用。
尽管第三方提供了很好的文档(XSD等),但是他们无法模拟游戏的进行,因此要测试我针对该API编写的代码,我必须等待实际的游戏进行。
我唯一的办法就是自己编写代码来模拟游戏,但这似乎需要大量工作。您将如何处理?
Answers:
这是模拟对象的完美用例。每个流行语言都有模拟库。您可能希望模拟提供REST服务响应以返回测试数据的对象。您可以手动生成测试数据,也可以从先前对实时系统的调用中收集数据。
等待游戏开始。从提要中捕获每个事件。编写一个模拟器,在适当的时间重放事件。瞧,您有一个包含真实数据的Feed模拟器。
我建议编写自己的模拟器。您可以使用它来测试各种场景。
过去完成此操作后,我在请求消息中使用了“特殊”值来提示模拟器执行所需的操作。这也使运行端到端测试成为可能,而无需超出开发环境。
编辑:例如,如果您的项目将XML提交给第三方服务,则请求可能包括例如<value>50.00</value>
。可以对模拟器进行编码(或更好地对其进行配置),以便50.00 =>爆炸,60.00 =>垃圾,70.00 =>关闭连接,依此类推。这个想法是模拟器的行为取决于它的输入,您可以在每个测试用例中对其进行控制。
考虑到庄家可能提供了一些示例数据(可以在集成阶段保存这些数据),我的建议是以这种方式来组织这些提要:
提供商可能提供两种更新:推(POST)和拉(GET)。
此时,您应该
无需详细介绍要使用的技术,您将获得一个迷你服务器和一个迷你推送服务,该服务器仅响应4个URL(或取决于提供商所提供的URL)。
HTTP协议的处理程序是在使用“小型服务器”时要牢记的一件好事。在端口80上创建服务器非常简单,并且可以解决问题。您必须确保按照提供者的要求将所有信息注入到GET响应中(这样可以避免投入生产时出现问题)。
我个人将使用Nodejs 做一个简单的Perl服务器或相同的服务器。关于数据注入,一个计时器就足够了,它可以调用离线浏览器(CURL,WGET)
我用cucumberjs,用代理服务器设置为127.0.0.1,钩住的node.js过程与phantomjs的组合模拟REST API http-proxy
和nock
那里。CucumberJS不是重要的部分,您可以以任何方式编写测试方案,其余的是仿真的关键。它能够简单地通过match-request-return-data进行模拟,但是您也可以通过模式进行过滤并通过钩子回调函数产生答复,因此您可以模拟所需的任何粒度级别(在极端情况下以a完整的演示服务器,但您可以逐步进行操作。
效果很好:
http-proxy
。因此,任何“正常”加载(页面,图像)都可以工作。nock
它。在我的场景中,我以相同的过程将其与黄瓜js测试结合使用,因此它的结果如下:
nock
为要测试的场景设置HTTP模拟。其余部分如本段前面所示(也就是说,这是一个周期,我作为测试运行程序指示phantomjs加载页面,该页面将所有请求转发回给我,然后将它们转发到网络;或者拦截它们(如果它是经过测试的API)。