我一直在阅读有关自动验收测试的大量文章。但是,我还没有找到有关如何管理外部依赖项的任何信息。

假设您有一个Web应用程序,它充当各种中央业务应用程序的UI,它们公开了采用不同技术的服务。 >
Web应用程序也具有一定数量的自己的业务逻辑,但它实际上与应用程序有关,与公司的核心业务无关,所有这些都由中央服务处理。

问题是,尝试在“真实”系统上编写自动验收测试会导致两个主要问题:


无法保证给定核心数据集下次测试需要时,系统将保持不变(甚至可能不再保持一致)。不能通过直接数据注入进行调整(太复杂),可以通过服务调用进行调整,但只能涵盖最常见的问题,这意味着总是有可能有人必须检查测试以查看数据集发生了什么(或分析是否是代码问题。)
也不能保证稳定的开发环境。最后,其他系统可能正在测试某些功能,因此中央系统至少变得不可用或不可靠。一种选择是在更稳定的环境(质量保证,预生产)下运行测试,但是如果开发依赖于中央服务的某些更改,那么我们将在敏捷开发中放弃验收测试的“快速反馈”性质。 >
因此,遇到这些问题后,我想到,如果团队至少已经使用自动化集成测试针对一致性进行了所有服务的测试,我们就可以相信通信层以及我们调用的服务的输入/输出映射。这些测试中的至少一个错误将明确指出问题所在(与服务的连接或服务的一致性)。我们可以跳过依赖于我们这边的业务逻辑部分。

之后,我们可以在验收测试中模拟服务层,以便将应用程序的行为与环境和环境隔离开来。专注于测试我们的系统的功能,避免在没有直接控制权的情况下避免验证其他实体的正确行为。

但是,我无法从众所周知的敏捷专家那里找到任何文献关于这个问题。

很高兴听到有人在这种方法上是否成功,听听为什么这样的方法会很有趣,或者能读到类似方法的内容...

#1 楼

我同意洛朗,我们也面临着非常相似的情况。我们的团队测试用于数据传输和解析的API。开发人员单元/组件级别的测试全部针对模拟对象和数据存储。

单元测试并不总是很全面,因此我们构建了一个“假服务器”来模拟用于运行附加功能测试的各种Web服务。这种方法的优点是可以控制数据(联系人,提要,照片等),并可以通过故障注入来模拟网络错误。

但是,假服务器可以很好地评估原始数据隔离环境中的功能,它不会测试软件在“现实世界”中如何端对端地执行和运行。验收测试的目的是在类似于客户体验的“实际”情况下评估软件。这是抵制真实服务器的最大优势。

抵制真实服务的缺点之一是某些测试可能变得不可靠。通过重新设计自动化测试,可以解决一些与实际服务有关的零星问题。例如,在测试开始之前对服务进行ping操作,以确保其正在运行,如果在短暂的时间后尚未准备就绪,则中止测试。

因此,我们仍然将两种方法结合使用,但是我们不断增长的客户场景测试套件(验收测试)和性能测试现在正在针对真实服务器。

评论


好的,非常感谢...这些测试是否向开发人员团队提供“快速反馈”?您采用哪种方法进行每天应运行且尽可能稳定但仍由业务驱动的测试?

–马丁
2013年12月2日13:02

我不太确定你在问什么。在我的小组中,所有自动化测试(单元,功能,非功能)至少每天在多个分支上运行。整个团队都通过内部/内联网Web服务立即获得结果反馈。将对所有失败的测试进行调查和分类。

– Bj Rollison
2013年12月5日15:15

谢谢(你的)信息。我刚刚阅读了Thoughtworks的一篇文章,他们建议e2e涵盖至少一个快乐和一个失败的案例。 (thoughtworks.com/insights/blog / ...)。如果我们有外部依赖性而没有控制权,那么如何在没有模拟的情况下实现呢?

–锤子
17年11月30日在2:08

#2 楼

我认为“验收测试”和“模拟服务层”并没有实现。我的感觉是,当您进行验收/功能测试时,尽管您尝试在QA / preprod环境中进行操作以确信系统状态,但仍以接近将要使用的方式运行整个系统。 。如果由于您提到的原因而无法执行此操作,并且想要在不运行服务的情况下将测试集中在一个组件(Web应用程序)上,那么您将不得不在前端的源代码中进行一些挖掘最后,它变成了一个组件测试活动,Web应用程序的开发团队可能会更好地完成。

我的情况与您的情况略有相似,我们决定这样做:


使用QUnit和sinon.js作为模拟库的UI的“组件测试”(这样我们就不需要运行服务/后端)
” end-2-end /在质量保证环境中使用Selenium进行的整个系统的“验收测试”,类似于生产环境。

这并不能完全回答您的问题,但是仍然可以帮助您

评论


嗨,非常感谢您的想法。我知道我可能无法获得具体答案,但是从经验中获得经验总是有帮助的。问题在于,我们正在尝试编写验收测试,以帮助团队快速获得满足验收标准的反馈。如果尝试在质量检查环境中运行它,则会失去快速反馈的机会。对于这种测试,我们已经有了一些公司工具,可以在其中编写此类测试脚本。这些验收测试的性质是帮助开发人员更快地验证验收标准。

–马丁
13年11月29日在10:02

我们的系统正在通过HTTP将价格更新发布到外部系统,并监听队列以获取处理结果。根据结果​​,将向用户显示不同的消息。我们正在实施E2E测试用例。显然,我们没有外部系统的控制权。我们如何实现至少一个快乐案例和一个失败案例?

–锤子
17年11月30日在2:06

#3 楼

我在这里写了一篇关于模拟验收测试的文章:
http://intelligentbee.com/blog/2016/01/06/how-to-mock-endpoints-in-automated-acceptance-tests/

希望您发现它有用!

评论


您的链接帖子是一个不错的方法,但是/ reason /上没有任何信息,有人会在接受测试中使用模拟-这是OP的核心问题。

–凯特·保罗(Kate Paulk)
16年1月6日在17:29

此外,仅链接答案不被视为良好实践。

–demouser123
16年1月6日在17:39

拉杜,我确实想感谢您说这是您的文章,而不仅仅是盲目地在周围散布垃圾邮件;很少见:),但我认为凯特的观点引出了我最喜欢的一句话:“是的,但是,您的科学家对他们是否能做到如此着迷,以至于他们不停地思考是否应该这样做!”我认为这就是她想要达到的目标。 log_file的注释也很强大-答案应该是没有链接的独立完整答案,然后使人们可以获取更多详细信息。我希望这可以帮助您重做,使其更符合我们的标准。谢谢!

–corsiKa♦
16年1月6日在22:58