mountebankSwift

一个用于与 mountebank 交互的 Swift 包。

Swift package index swift compatibility Swift package index platform compatibility

Swift lint status Swift build and test status Quality Gate Status

目录

该软件包目前支持以下功能:

开发中

目前正在计划/开发的功能有:

使用 mountebankSwift

添加到 Xcode 项目

要将 mountebankSwift 添加到 Xcode 项目,请按照此处的说明进行操作。

添加到 swift package 项目。

要在 swift package 中包含 mountebankSwift,需要将其设置为 package 依赖项

// swift-tools-version: 5.7

import PackageDescription

let package = Package(
    name: "ExamplePackage",
    products: [
        .library(
            name: "ExamplePackage",
            targets: ["ExamplePackage"]),
    ],
    dependencies: [
        .package(url: "https://github.com/dave-t-c/mountebankSwift.git", revision: "0.1")
    ],
    targets: [
        .target(
            name: "ExamplePackage"),
        .testTarget(
            name: "ExamplePackageTests",
            dependencies: [
                "ExamplePackage",
                "mountebankSwift"
            ]),
    ]
)

示例

创建 HTTP 模拟服务器

要创建一个 http 模拟服务器,您需要创建 http stub,如下所示。

请注意 - 请求/响应体现在需要作为 JSON 字符串传入,但将在以后的版本中改进

func createHttpImposter() async throws {
    let exampleRequestBody: SimpleRequestBody = SimpleRequestBody(
        exampleInt: 2,
        exampleBool: false,
        exampleString: "test")
    let jsonRequestData: Data = try JSONEncoder().encode(exampleRequestBody)
    let jsonRequestBodyString = String(data: jsonRequestData, encoding: .utf8)

    let predicateHttpFields = HttpFields(
        path: "/v1/test",
        method: .POST,
        body: jsonRequestBodyString)
    let equalsPredicate = EqualsPredicate(equals: predicateHttpFields)
    let predicates = [equalsPredicate]

    let expectedStatusCode: Int = 201
    let httpResponseFields = HttpResponseFields(statusCode: expectedStatusCode)
    let response = IsResponse(isResponse: httpResponseFields)
    let responses = [response]

    let httpStub = HttpStub(predicates: predicates, responses: responses)
    let httpStubs = [httpStub]

    let mountebankClient = MountebankClient(mountebankUrl: "https://:2525")
    try await mountebankClient.createHttpImposterAsync(port: 2526, stubs: httpStubs)
}

创建一个带有响应体的 HTTP 模拟服务器

这与上述类似,但是您可以传入响应头/响应体,否则这些都是可选的。

func createHttpImposter() async throws {
    let predicateHttpFields = HttpFields(
        path: "/v1/test",
        method: .GET)
    let equalsPredicate = EqualsPredicate(equals: predicateHttpFields)
    let predicates = [equalsPredicate]

    let expectedResponse: [Int] = [1, 2, 3]
    let bodyData = try JSONEncoder().encode(expectedResponse)
    let bodyJsonString = String(data: bodyData, encoding: .utf8)

    let responseHeaders = ["content-Type": "application/json"]
    let expectedStatusCode: Int = 200
    let httpResponseFields = HttpResponseFields(
        statusCode: expectedStatusCode,
        headers: responseHeaders,
        body: bodyJsonString)
    let response = IsResponse(isResponse: httpResponseFields)
    let responses = [response]
    let httpStub = HttpStub(predicates: predicates, responses: responses)
    let httpStubs = [httpStub]

    let mountebankClient = MountebankClient(mountebankUrl: "https://:2525")
    try await mountebankClient.createHttpImposterAsync(port: 2526, stubs: httpStubs)
}

移除所有已创建的模拟服务器

要删除给定端口上的所有已创建的模拟服务器,请使用

func removeCreatedImposters() async throws {
    let mountebankClient = MountebankClient(mountebankUrl: "https://:2525")
    try await mountebankClient.deleteImposterAsync(port: 2526)
}

检索所有已创建的模拟服务器

要检索所有已创建的模拟服务器,请使用

func retrieveCreatedImposters() async throws {
    let mountebankClient = MountebankClient(mountebankUrl: "https://:2525")
    let retrievedImposters = try await mountebankClient.retrieveCreatedImpostersAsync()
}

对于每个模拟服务器,这将返回 portprotocolnumberOfRequests

请注意:请求目前未被记录,但将在以后的版本中包含。

检索特定的 Http 模拟服务器

要从给定端口检索特定的 Http 模拟服务器,请使用

func retrieveHttpImposter() async throws {
    let mountebankClient = MountebankClient(mountebankUrl: "https://:2525")
    let retrievedImposter = try await mountebankClient.retrieveHttpImposterAsync(port: 2526)
}

这将包括对此模拟服务器发出的所有请求的详细信息。