SmartMockLib 1.2.1

SmartMockLib 1.2.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2020 年 1 月
SPM支持 SPM

Crescent Flare 维护。



  • Crescent Flare

SmartMockServer

CI Status License Version Version Version

通过运行 NodeJS 或使用 iOS 或 Android 的内部模拟库轻松设置模拟服务器。提供 JSON(和其他几种)响应,包括使模拟服务器更灵活的功能。例如,根据 post 体在不同的端点上有多个响应。

特性

  • 通过安装 NodeJS,轻松设置一个实际的服务器。然后只需几行代码即可启动模块
  • 也可以通过包含 iOS 和 Android 的内部应用程序库来提供模拟响应,而无需运行实际的服务器
  • 通过 JSON 文件或命令行参数配置模拟服务器,如运行 SSL 模式
  • 完全数据驱动,可以通过创建文件夹并放置响应 JSON(或其他格式如 HTML)文件来轻松创建端点,大多数操作都可以在不重新启动服务器的情况下完成
  • 使用 get 参数或 post 体过滤器(支持通配符)在单个端点上创建替代响应,也支持头部过滤器
  • 轻松设置索引页面,它将自动列出内部的所有端点(包括文档和替代响应)
  • 可以将端点作为一个文件夹设置,以提供任何类型的文件(如图像),包括一个 HTML 或 JSON 索引页面来列出提供的文件(通过可选的 SHA256 长轮询等待单个文件的变化)
  • 可以将端点用作命令控制台,客户端可以连接到它并轮询命令(具有长轮询机制)。包括一个用户界面以选择客户端并向他们发送命令

NodeJS集成指南

可以通过以下命令使用npm安装此软件包

npm install smart-mock-server

安装npm模块后,创建一个新的文件(例如server.js)来包含启动代码。这可以像下面的例子一样简单:

var SmartMockServer = require('smart-mock-server');
var mockServer = SmartMockServer.start(__dirname);

__dirname参数是javascript文件所在的文件夹,需要传递给模拟服务器模块。模拟服务器模块将使用它作为父目录来读取配置文件或SSL证书等文件。

Android集成指南

当使用gradle时,很容易将库导入项目中的build.gradle文件。添加以下依赖项

implementation 'com.crescentflare.smartmock:SmartMockLib:1.2.1'

确保jcenter是作为仓库添加的。该库与Retrofit 2+集成良好,但也可作为独立库使用。其中包含如何使用的示例。

上述库的最低部署目标为Android API级别14。下面是一个旧版本,支持Android API级别9,可能依赖于旧的gradle插件。

compile 'com.crescentflare.smartmock:SmartMockLib:1.0.0'

iOS集成指南

该库可以通过CocoaPods获得。要安装它,只需将以下任意一行添加到Podfile中

pod "SmartMockLib", '~> 1.2.1'

上述版本是为Swift 5.0准备的。对于旧版本的Swift,请使用以下版本:

  • Swift 4.2: SmartMockLib 1.0.1
  • Swift 4.1: SmartMockLib 1.0.0
  • Swift 4.0: SmartMockLib 0.6.4
  • Swift 3: SmartMockLib 0.6.2
  • Swift 2.2: SmartMockLib 0.5.0

有一个例子展示了如何将其与Alamofire集成。尽管它也可以与其他库或单独使用。

NodeJS模块配置

服务器可以被配置,例如,使用自定义端口和IP地址启动。默认情况下,它将在所有外部IP地址和127.0.0.1上运行。以下是可以配置的项目:

  • 端口: 在指定的端口上运行,某些端口(如端口80)被NodeJS拒绝(默认:2143)
  • 外部IP: 搜索外部IP地址(除127.0.0.1外),服务器将运行在第一个找到的地址上(默认:false)
  • 手动Ip: 用于手动配置特定IP地址的字符串(默认为:空)
  • 安全连接: 启动https服务器,需要在根目录中提供ssl.key和ssl.cert证书(默认为:false)
  • 端点: 相对于根路径的相对路径,用于定位响应端点(默认为:空)
  • 需要密码: 保护模拟服务器,使用该字符串的X-Mock-Secret头部来使用。否则,它将返回一个包含输入令牌的授权错误HTML页面

可以通过在根目录内创建一个 config.json 文件来指定这些设置。此外,可以使用命令行参数来覆盖这些设置,例如

node server.js port=1237 secureConnection=true

添加模拟响应

对于每个端点,创建一个包含JSON或其他相关数据的文件夹。以下示例将使用JSON。在文件夹内,创建一个包含响应数据的 responseBody.json 文件。

使用 responseHeaders.json 添加特定的响应头,JSON中的每个键/值对应一个头部的值。添加 properties.json 用于其他数据,例如HTTP响应代码(默认为200,OK)和文档说明。属性包括

  • method: 限制请求到指定的方法,例如GET或POST(如果不匹配方法,将返回错误)
  • 延迟: 延迟请求的响应
  • 名称: 为请求命名,建议与其它文档一起使用
  • 描述: 为请求添加额外描述,有助于提高文档质量
  • 分类: 使用此项将类似请求组合到类别中,有助于在添加更多请求时维护模拟服务器
  • GET参数: GET参数的字典,如"key": "value"。这些将被添加到URL中
  • POST参数: 与GET参数相同,用于请求包含正文的请求(参数将作为请求正文的一部分)
  • POSTJson: 需要JSON正文的请求的JSON结构
  • 替代选项: 满足某些条件时提供替代响应(基于参数),在以下章节中将进一步解释
  • 生成: 用于自动设置索引页面或文件服务器等。支持值:indexPage, fileList, commandConsole
  • 重定向: 要重定向的路径。使用此属性指定的相对路径中的属性、responseBody和其他文件
  • 替换令牌: 替换输出响应中此令牌的所有出现。替换文本可以使用请求中的X-Mock-Replace-Output头部进行指定

文件服务器的额外设置(使用fileList)

  • 生成Json: 访问索引页面时,这将生成文件列表的JSON响应
  • 包含SHA256: 生成所列文件的SHA256哈希

所有数据都可以实时更改,而无需重新启动服务器。服务器将在发送响应之前尝试解析JSON文件。如果失败,将返回解析错误的文本和500响应代码

建议在端点文件夹的根目录中放置一个具有'generates: indexPage'值的properties文件。

在使用文件服务器时,可以对单个文件使用长轮询,服务器将在文件更改或轮询超时之前等待响应。通过提供 X-Mock-Wait-Change-Hash 标头启用此功能。此标头应包含文件的最后一个已知 SHA256 哈希值(可能已由 X-Mock-File-Hash 标头中的早期调用返回)。默认超时时间为 10 秒,如需自定义,请使用 X-Mock-Wait-Change-Timeout 标头。

在使用命令控制台时,客户端应通过 GET 参数发送其名称以启动会话。它将返回一个令牌,该令牌可以用于新请求以获取新命令。使用 waitUpdate GET 参数来使用长轮询(超时时间为 10 秒)。

针对相同请求的不同响应

默认情况下,任何请求只能给出一个响应。然而,在发送某些 GET 或 POST 参数时,可以创建不同的响应。首先在 request.properties.json 文件中定义替代方案。它是一个属性字典对象数组。

每个对象可以有以下属性

  • name: 替代方案的名称,如果未指定,索引页面将简单地命名为 "alternative"
  • hidden: 防止索引页面列出替代方案
  • responsePath: 指定替代响应文件的名称前缀,如果此值为 "alternativeTest",要读取的 JSON 文件可以是 alternativeTest.json。如果未提供,则回退到 alternative[name].json 或 alternative1.json
  • responseCode: 指定不同的 HTTP 结果代码
  • getParameters: 一个 GET 参数的字典,如 "key": "value"。如果所有给出参数都有匹配项,则调用替代方案。值也支持通配符(* 和 ?)。高级提示:值或通配符需要发送参数,如果参数是可选的,请勿将参数列入列表。
  • postParameters: 与 getParameters 相同,但用于匹配请求体
  • postJson: 要与替代请求一起发送的 JSON 请求体,如果 JSONs 匹配,则调用替代方案。这些 JSON 对象可以嵌套
  • checkHeaders: 一个包含键/值组合的字典。作用类似于匹配 GET 参数。键不区分大小写
  • method: 替代方案的不同方法(例如,用于在同一个端点上使用 DELETE 和 POST)
  • delay: 替代响应的不同延迟

如上所述,使用 post 或 get 参数 properties 来定义替代方案应该为哪种类型的参数而调用(而不是默认响应)。例如,可以定义一个替代方案,对于登录调用,如果用户名为 "error",则响应为身份验证失败消息(基于某些 POST 参数)。

状态

模拟服务器应在NodeJS或通过iOS和Android的库内部准备就绪。未来可能会添加新的功能。