【问题标题】:Acceptance testing focused on outgoing http requests验收测试侧重于传出的 http 请求
【发布时间】:2016-09-03 14:00:30
【问题描述】:

这似乎是一个奇怪的问题,因为我没有看到任何在线讨论或教程,所以我认为人们通常不会这样做 - 但是当接受标准时,自动化接受测试有什么好的选择Web 应用程序发送的特定网络请求是特定用户交互的结果吗?举个最简单的例子,用户点击一个按钮,页面上的 javascript 代码发送一个 ajax 请求。 QA 团队希望确定请求确实已发送,并且它具有特定的参数。现在,一种典型的解决方案是完全忽略网络请求,而是检查由此类请求引起的接口更改,但如果请求没有立即产生接口更改怎么办?另一种典型的方法是将此类测试移至单元测试或集成测试级别——但如果 QA 宁愿看到它在真实浏览器中工作怎么办。

那么编写自动化验收测试的选项是什么,这些测试从浏览器中的一些用户交互开始,然后断言已发送预期的网络请求?进行这种测试需要什么工具(据我了解,Selenium 无法自行完成)?您是否知道此类测试的任何可用示例(已经实现它的开源项目、描述如何进行测试的教程等),或者您能否提供一个详细的示例?

【问题讨论】:

    标签: javascript ajax selenium testing automated-tests


    【解决方案1】:

    听起来您想要在测试中模拟来自前端应用程序的 Ajax 调用。如今,使用 SinonAngular's httpBackendjQuery Mockjax(我维护的一个库)等库很容易做到这一点。

    您可以在我不久前写的blog post 中阅读更多有关该主题的信息,但基本思想是在 Ajax 请求到达核心 JavaScript XMLHttpRequest 接口之前拦截它(从而发送网络请求)。然后,在您的 JS 测试中,您可以检查拦截器以查看是否发出了网络请求,以及向它提供了什么。

    在不了解您的技术堆栈(JS 框架、测试框架等)的情况下,很难准确地说出您将如何设置它,但请查看上面引用的工具。

    【讨论】:

    • 感谢您的回复。但是你所描述的模拟 ajax 调用听起来比我想象的要低一些。如果你使用 Angular 的 httpBackend,那么(除非我错了)请求甚至不会到达真正的后端,你将不得不在 mock 中重新实现所有后端的响应。不,我的想法是拥有一个完整的 Web 应用程序,客户端连接到真正的后端,但能够检查客户端发出的请求。
    • 比如我做的是用webdriver.js控制浏览器,也用node-http-mitm-proxy截取浏览器和后端之间的网络流量,并上报给测试运行者一个带有特定参数的请求确实已经被发送。它似乎确实有效,但看起来有点麻烦和脆弱,所以我想知道是否存在一些更好的工具或策略来进行此类测试。
    • 嗯...我明白你在说什么,但你为什么要测试网络请求是否实际发送?您是否出于某种原因需要测试网络硬件?如果没有,为什么不使用模拟库简单地测试发送到 Ajax 请求的参数?这消除了与后端的耦合,从而使您的测试运行得更快。是的,它需要更多设置,但最终更稳定。
    • 只是 QA 团队负责处理最终产品,而我正在想办法自动化他们的日常任务。完全模拟后端的测试听起来像是前端开发人员检查应用程序部分可靠性的测试;但在某些时候,需要对应用进行完整的端到端测试。
    • 是的,我可以看到。 E2E 测试绝对重要。对不起,我没有更好的解决方案给你!听起来像节点代理可能会成功,虽然我不知道任何自动化解决方案......也许那是我的下一个项目。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多