一个用于与 mountebank 交互的 Swift 包。
该软件包目前支持以下功能:
目前正在计划/开发的功能有:
mockEndpoint
以更轻松地跟踪请求。要将 mountebankSwift 添加到 Xcode 项目,请按照此处的说明进行操作。
要在 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 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)
}
这与上述类似,但是您可以传入响应头/响应体,否则这些都是可选的。
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()
}
对于每个模拟服务器,这将返回 port
、protocol
和 numberOfRequests
。
请注意:请求目前未被记录,但将在以后的版本中包含。
要从给定端口检索特定的 Http 模拟服务器,请使用
func retrieveHttpImposter() async throws {
let mountebankClient = MountebankClient(mountebankUrl: "https://:2525")
let retrievedImposter = try await mountebankClient.retrieveHttpImposterAsync(port: 2526)
}
这将包括对此模拟服务器发出的所有请求的详细信息。