Android 使用 MockServer 快速模拟 API 数据

2,085 阅读4分钟

前言

在当今的移动应用开发中,API 请求已经成为了不可或缺的一部分。开发人员需要通过 API 请求获取数据,以便为应用程序提供所需的信息和功能。但是,在开发过程中,我们经常遇到一些挑战,比如依赖于外部服务,网络延迟,请求超时等等。这些问题会影响开发人员的工作效率,同时也可能影响应用程序的性能和用户体验。

这时候,Mock 请求数据就显得尤为重要。Mock 请求是一种模拟 API 请求数据的方法,开发人员可以在没有实际 API 响应的情况下,通过 Mock 数据来测试和开发应用程序。Mock 数据可以帮助开发人员在开发早期就确定应用程序的结构和功能,并且在解决问题时能够快速定位到问题出现的位置。Mock 请求还可以提高开发人员的工作效率,减少依赖于外部服务的风险。

因此,在开发 Android 应用程序时,有一个方便好用的 Mock 框架来帮助开发者模拟 API 请求数据是非常必要的。本篇就向大家介绍一个在 Android 开发中可以快速、灵活模拟 API 请求的框架。

使用

整体预览效果:

mock.gif

该框架分为两部分,服务端和客户端,这里的服务端并不是 API 的后台服务,而是接收 Mock 数据的服务,集成到我们的 Android 程序中;客户端为管理 Mock 数据的 PC 程序,支持 Macos、Windows、Linux。

集成 MockServer

在需要使用到 Mock 的 Android 项目中添加 Mock 的依赖库,然后进行简单的初始化就可快速集成 MockServer。

目前 MockServer 只支持对 OKHttp 的请求进行数据模拟

添加依赖

在 module 的 build.gradle 中添加 MockServer 依赖:

dependencies {
	implementation 'com.loongwind.ardf:mock:1.0.0'
}

初始化

在项目的 Application 中或者使用 Http 请求之前进行 MockServer 的初始化,初始化代码如下:

MockServer.init(context = context, enable = true, enableCache = false)

初始化方法有三个参数:

  • context:Android 的上下文,建议穿 ApplicationContext
  • enable:是否开启 Mock,默认是 true,可以通过 BuildConfig.DEBUG�来控制 debug 时开启,release 时关闭
  • enableCache:是否启用缓存,默认是 false,不会缓存配置的 Mock 数据,开启缓存后会本地缓存配置的 Mock 数据,下次启动会自动应用,适用于 Mock 启动时就需要访问的接口数据。

添加 OKHttp 拦截器

初始化后还需要给 OKHttp 添加 MockServer 的拦截器,MockServer 库提供对应的扩展方法,使用如下:

val okHttpClient = OkHttpClient.Builder()
    // 扩展方法,用于添加 MockServer 的拦截器
    .addMockInterceptor()
    .build()

到这里在 Android 代码中集成 MockServer 就完成了,然后运行 APP 到设备上,等待结合客户端的使用。

使用 MockServer 客户端

首先在项目的 Github Release 中下载最新客户端,根据自己的系统选择下载对应的版本,如下图:

image.png

下载后进行安装,打开后客户端界面如下: image.png

没错,就是一篇空白...,问题不大,点击 New添加需要 Mock 的设备:

image.png

名称随便填,地址填写你设备的 ip 地址,端口默认为 8080,比如:192.168.1.12:8080,然后点击确定:

image.png

然后点击右边的加号创建 Mock 数据:

image.png

填写完成后点击提交即可在对应设备下显示,如下:

image.png

在该页面可对 Mock 数据进行修改;可开启、关闭 Mock,可针对整个设备开启关闭也可针对某一个接口进行开启关闭。

需要电脑跟设备在同一局域网才可进行数据的 Mock

实现原理

下面来简单介绍一下实现原理,后续将会以单独的文章介绍详细实现。

Android

在 Android 中通过对 OKHttp 添加拦截器,拦截 Http 请求,当检测到是我们需要 Mock 的请求时就返回 Mock 的 Response 数据。 那 Mock 的数据是怎么传到设备里的呢?那是因为在 Android 中开启了一个 Http 服务,客户端通过 Http 请求将数据提交到 Android 设备上,从而实现了 Mock 数据的传输。

客户端

客户端是采用 Flutter 开发的桌面应用程序,支持 Macos、Windows、Linux,主要是通过设置的地址将输入的 Mock 数据提交到对应的 Android 设备上。 整体核心结构如下:

mock.drawio.png

最后

MockServer 是一种用于模拟 Android HTTP 响应的库,它可以在应用程序开发过程中模拟 API 响应,从而让开发人员在不依赖于实际 API 响应的情况下进行测试和开发,减少对外部服务的依赖,从而提高开发效率。

TODO:

  • 支持对 HTTP 响应码的 Mock
  • 支持对响应延迟的 Mock
  • 支持参数匹配

源码地址:AndroidMockServerandroid_mock_client

本文正在参加「金石计划」