【问题标题】:Using okhttp mock webserver in production在生产中使用 okhttp 模拟网络服务器
【发布时间】:2016-12-29 15:04:52
【问题描述】:

我已经使用 okhttp 的模拟网络服务器 (https://github.com/square/okhttp/tree/master/mockwebserver) 进行了相当多的测试,并且效果非常好。从阅读文档和浏览 Google 来看,该库似乎确实是用于测试的。

我的问题是,我是否有任何理由不能在生产代码中使用它?我有一个正在开发的 android 应用程序,它需要一个模拟 Web 服务器。我已经集成它并且工作正常,但我担心我正在做的事情是否完全错误。

另外,在生产环境中使用模拟 Web 服务器时,我应该注意哪些安全风险?

谢谢!

【问题讨论】:

  • 您是如何在生产环境中实现 MockWebServer 的。我需要这样做,但无法让它在单个请求的上下文中运行。

标签: android webserver okhttp3


【解决方案1】:

MockWebServer 返回“模拟”(换句话说,“非真实”)数据。如果您在生产中使用该类,您将不得不继续向它提供假数据,或者通过一些单独的库或工具进行真正的 HTTP 调用,并将其响应填充到 MockWebServer 中。那么,这有什么意义呢?为什么不让 OkHttp 直接按照设计进行调用?

我猜你可能误解了 OkHttp3 和 MockWebServer 之间的关系。

  • OkHttp3 - 通过任何 HTTP 堆栈发出 HTTP 请求的 HTTP 客户端(默认情况下,使用提供的 Android 设备 HTTP 网络;wi-fi、cell 等)
  • MockWebServer - 仅在测试中用于向 OkHttp HTTP 客户端提供硬编码(非真实)HTTP 响应,以便在测试期间不需要实时网络连接,或持续模拟各种网络连接问题,例如连接断开、无效的 HTTP 响应、服务器错误等。

您应该只在应用程序代码中使用 OkHttp3。

在您的仅测试中,您有 MockWebServer 来伪造响应(或者如果您以这种方式配置它,则拦截)来测试您的应用程序对 OkHttp3 的调用。当您投入生产时,不应引用或调用任何 MockWebServer 代码(因为您将其全部放在 test/androidTest 源代码目录中,对吗?)并且 OkHttp3 代码将通过 Internet 进行真正的 HTTP 调用,因为 MockWebServer 获胜'不要再在那里拦截他们了。

基本上,如果您的build.gradle 中有除testCompile 'com.squareup.okhttp3:mockwebserver:x.x.x' 和/或androidTestCompile 'com.squareup.okhttp3:mockwebserver:x.x.x' 之外的任何内容,那么您就做错了。主要的、真实的、生产应用程序不需要模拟 Web 服务器,因为它将通过 Internet 对真实的 Web 服务器进行真正的调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2020-02-08
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多