2017-07-20 73 views
0

我想知道如何(或者甚至可以)在运行Webdriver测试返回存根输出时替换由我的应用程序所做的API调用。该应用使用了很多完全依赖于时间范围或第三方信息的组件,这些组件对于测试而言不会一致或可靠。目前我没有办法测试这些元素而不使用'运行这个测试如果...'作为一种远非理想的方法。使用C#Selenium WebDriver模拟API响应

我的测试是用C#编写的。

我发现了一个名为xhr-mock的Javascript库,它似乎有点像做我想做的事,但我不能用我当前的测试解决方案。

对这个问题的正确答案可能是'那是不可能',这将是令人讨厌的,但经过一整天阅读Google上不相关的文章,我担心这可能是结果。

+0

你的问题是什么?请阅读这些文章:[How-to-ask](https://stackoverflow.com/help/how-to-ask)和[Minimal Complete Verifiable Example](https://stackoverflow.com/help/mcve)。 – Tom

+0

我的问题就是这样。没有更多的细节,因为它是一个高层次的方法问题,而不是一个特定的代码。 –

回答

1

WebDriver测试是端到端,黑匣子,用户界面测试。 如果您的页面取决于外部网关 您将拥有一个服务和模型来包装整个系统的网关 ,您可能已经在测试中引用了您的模型。

鉴于网关是时间依赖的,您应该在测试中尽可能使用您的api图层消耗的服务,并且只需检查网关随时返回的信息是否显示在页面上期待它。您将有单元测试来正确检查响应模型。

正如你所担心的那样,强制性的“这可能是不可能的”:鉴于你的网关需要改变的级别,你可能需要降低准确性或者在测试中引入某种形式的刷新,两个电话将稍微分开。

鉴于不可预测的网关,您可能需要模拟或存根API才能开发设计。如果您在任何特定环境中使用真实或虚假的网关进行测试,那么这将取决于您。这些测试不应该在生产环境中运行,所以我会使用假网关作为ci测试环境,并使用手动测试环境的真实网关,其中BBT故障不会影响您的发布管道。

+0

这是一个理想的存根解决方案,但必须通过测试进行配置,而不是依赖于环境的部署方式。如果我们可以选择多部署方案,那么这样做会有效,但这将会非常昂贵。基本上我觉得任何解决方案都可能没有可行的投资回报率。 –

+0

如果元素不存在,那么在测试之前,您必须忽略测试或将其注入页面。如果元素在那里,您可以将其缓存在外部存储中,以备下次使用时不使用。您也可以在您的其他测试中删除它。取决于您的其他元素对变化的响应程度。 –