我正在尝试寻找一种方法来测试平台与外部服务器(例如Twitter)之间的交互。在他/她的Twitter feed上发布内容。该代码依赖Twitter4J。 :我几乎无法修改API来进行特定的测试,当然,我对外部系统没有任何影响。

评论

我可以想象的一种解决方案是:同时启动2个单独的测试。对涉及Web服务调用的功能的测试,以及实际上应该始终有效的对Web服务的简单调用。如果第二个测试不起作用,则表示呼叫本身出了点问题(服务器关闭,网络关闭等),第一个测试(当然会失败)实际上将进入“无法启动”状态,而不是“测试失败”状态。当然,正常运行的测试失败会提醒系统管理员或网络管理员。

#1 楼

测试的基础之一是隔离-如何使测试环境尽可能地隔离。当您处理内部资源时,这很容易,因为您可以完全控制环境。不需要太多外部资源。

对于这种情况,我建议您创建几个测试Twitter帐户。 (我希望这不违反他们的服务条款,我先检查一下。)您可能拥有TrarothTest和TrarothTestFollower。您可以将其自动发布到TrarothTest,然后等待验证TrarothTestFollower是否已从TrarothTest获取了一条新推文。尽可能。

有时您会遇到无法控制的事情。如果Twitter掉线(Twitter掉线时潮人怎么办?在这种情况下,您似乎需要替代方法:本地托管的Twitter网站。维护可能会花费很多额外的工作,但是您可以将流量发送到本地站点,并确保它符合您的期望。然后模拟该推文并“验证它是否发生了”。

#2 楼

通常,在这种情况下,我通常更喜欢使用模拟来创建大多数测试,因此我不必担心Twitter是否崩溃,无法访问,运行缓慢,或者用户是否对大量仅出于测试。使用模拟,您不必担心最终行为,而可以更担心API是否被正确调用。 Mocks至少提供了一个看起来类似于外部API的API,并且可以以相同的方式调用(您使用开发人员或产品提供的配置参数来指向您的模拟服务)并返回一个值。可以在调用智能方法的API方法时将其设置为“播放”某些值,因此您也可以获取期望的响应(在测试中较早设置响应之后)。

这可以减少您对Twitter本身的依赖,但是您仍然需要在某些时候使用模拟帐户进行一些端到端测试。如果要使自动化与Twitter一起工作比您预期的要困难得多,那么您也许可以只使用手动测试,但是希望Twitter的API可以轻松地自动检查代码是否正确连接。 Glowcoder在另一个答案中讨论了此过程,因此我将不重复该解释:)

评论


+1当您的模拟失败时,您只能怪自己。它还提出了一个问题:“如果您不能嘲笑它,您怎么真正知道自己正在正确地做到这一点?”

–corsiKa♦
2011年5月10日23:39

+1用于减少依赖性和使用模拟。如果将代码编写为可测试的,则可以更轻松地创建好的自动化测试。查看您的开发人员是否可以查看Misko Hevery(Google)编写可测试代码以帮助减少依赖性的指南-googletesting.blogspot.com/2008/11/…

–史蒂文
2011年5月11日下午2:09

@Traroth我认为没有人会说不测试相关功能。端到端测试至关重要,但是我相信您的大部分工作应该集中在对软件有影响的软件上。

–史蒂文
2011年5月11日12:44

@ Traroth,@ glocoder,模拟测试和标准测试之间在哲学上肯定存在差异。本文涉及到这一点:stephenwalther.com/blog/archive/2008/06/12/…我喜欢混合使用各种哲学:我验证在模拟测试(我的大部分测试)中正确调用了API,该API会生成快速测试,通常可以在构建中运行,并且更有用。我验证了该API是否能达到E2E测试中所期望的数量,该数量较少且速度较慢-但是我覆盖的表面积较小,因为我在模拟测试中涵盖了其余部分。

– Ethel Evans
2011年5月11日17:43

@Ethel我完全同意确保您最终进行E2E测试。毕竟,为什么我们要使用从未改变过的服务?那将意味着它永远都得不到维护,这将使其相当不可靠。如果您信任任何开发人员/产品从一开始就正确获取API,请举手(看着您,Java 1.0 ...)

–corsiKa♦
2011年5月11日17:54

#3 楼

外部系统肯定会妨碍进行端到端测试。有时,您必须与产品的其余部分分开测试与外部系统的接口。

例如,在我目前的工作中,我们的产品功能之一就是能够在银行帐户之间转移资金。我们没有“测试银行帐户”或模拟银行帐户的方法。我们通过ACH文件转移资金,所以我测试货币转移功能的方法有两个:使用自动化测试我们如何生成ACH文件,以及手动测试银行可以处理我们生成的文件。

您可以在Twitter界面上使用相同的方法。

另一种想法:我不了解Facebook,但是Twitter没有RSS提要吗?

#4 楼

这取决于您是否确信外部系统将与其合同保持一致。另一个团队因其API的运作而臭名昭著,没有适当的沟通。碰巧的是,它们的更改不会更改WSDL(它是一个Web服务)。 。测试对我们很好。我们能够尽早发现偏差并进行纠正。