如何在 UITesting 上存根网络请求

Posted

技术标签:

【中文标题】如何在 UITesting 上存根网络请求【英文标题】:How to stub network requests on UITesting 【发布时间】:2017-04-04 14:41:49 【问题描述】:

有没有办法为 Swift 编写的 UITests 存根网络请求?

我已经安装了 OHHTTPStubs pod,但无法通过使用它的方法来存根我的网络请求,这是因为 UITest 目标和应用程序目标在不同的线程中执行。

我会很感激任何建议。

【问题讨论】:

请看这篇文章masilotti.com/ui-testing-stub-network-data 【参考方案1】:

这里有两种不同的选择:

    您可以采用 Oletha 的方法,并在应用程序代码中触摸网络。您必须存根 NSURLSession 以注入您想要的响应,并使用一些启动参数来确定何时使用存根会话而不是常规会话。本文中有关如何执行此操作的更多详细信息:http://masilotti.com/ui-testing-stub-network-data/

    您可以运行本地服务器并直接从测试代码中注入数据。巨大的优势是您根本不必接触您的应用程序代码。您还可以在测试期间轻松更改您的响应,这在第一个解决方案中是不可能的。

要运行本地服务器,您有多种选择。我正在使用Swifter,但还有其他选项:Ambassador 和SBUITestTunnel。

无论你选择哪种解决方案,一般流程如下:

传递启动参数以识别您正在运行 UITests 在application:didFinishLaunchingWithOptions: 中捕获该启动参数,并将您的API 基本URL 切换到本地服务器之一:http://localhost 启动您的服务器 为您正在测试的 URL 注入响应

this article for Swifter你有更详细的方法

【讨论】:

有人可以访问那篇更快捷的文章吗? web.archive.org/web/20190213235819/http://swiftpearls.com/…【参考方案2】:

存根需要在被测应用程序的代码中完成,而不是在测试代码中。这是因为 UI 测试过程无法控制被测应用的网络,因为它们是相互独立的。

当您从测试启动应用时发送一个启动参数,并在您的应用中读取启动参数以调用存根作为您AppDelegateapplication:didFinishLaunchingWithOptions: 的一部分。

let app = XCUIApplication()
app.launchArguments = ["stub"]
app.launch()

【讨论】:

以上是关于如何在 UITesting 上存根网络请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MetaMask 上触发更改区块链网络请求

如果网络请求失败,如何在流的基础上显示警报对话框

请求规范中的存根身份验证

如何监控手机网络请求?

React-native - 如何在 android 上监控原生端生成的网络请求?

在网络选项卡上过滤请求时如何永久禁用 chrome 的警告