35个版本 (7个稳定版)
2.0.0-beta.0 | 2024年7月2日 |
---|---|
1.0.6 | 2024年5月8日 |
1.0.5 | 2024年3月15日 |
1.0.3 | 2023年7月11日 |
0.2.0 | 2016年7月13日 |
#51 in Web编程
每月 1,765 次下载
210KB
4K SLoC
独立的Pact模拟服务器
该项目提供RESTful Web API和命令行界面来运行Pact模拟服务器。它是一个单独的可执行二进制文件,能够管理多个模拟服务器。每个模拟服务器的生命周期可以通过RESTful Web API或通过命令行界面进行控制。它实现了V4 Pact规范。
命令行界面
模拟服务器捆绑为单个二进制可执行文件 pact_mock_server_cli
。在没有选项的情况下运行它将显示标准帮助信息。
$ ./pact_mock_server_cli --help
./pact_mock_server_cli v1.0.0
Standalone Pact mock server
USAGE:
pact_mock_server_cli [FLAGS] [OPTIONS] <SUBCOMMAND>
FLAGS:
--help Prints help information
--no-file-log Do not log to an output file
--no-term-log Use a simple logger instead of the term based one
-v, --version Prints version information
OPTIONS:
-h, --host <host> hostname the master mock server runs on (defaults to localhost)
-l, --loglevel <loglevel> Log level for mock servers to write to the log file (defaults to info) [possible
values: error, warn, info, debug, trace, none]
-p, --port <port> port the master mock server runs on (defaults to 8080)
SUBCOMMANDS:
create Creates a new mock server from a pact file
help Prints this message or the help of the given subcommand(s)
list Lists all the running mock servers
shutdown Shutdown the mock server by id or port number, releasing all its resources
shutdown-master Performs a graceful shutdown of the master server (displayed when it started)
start Starts the master mock server
verify Verify the mock server by id or port number, and generate a pact file if all ok
选项
以下选项适用于所有子命令
主机:-h, --host
这将设置主模拟服务器运行的主机。默认情况下,这将为本机。
端口:-p, --port
这将设置主模拟服务器运行在的端口。默认情况下,这将为8080。启动命令将使用此端口启动主服务器。
日志级别:-l, --loglevel
这将设置CLI和模拟服务器记录的日志级别。默认为info。有效值:error,warn,info,debug,trace,none。
子命令
帮助
这将打印主要帮助或子命令的帮助。
启动
这启动主模拟服务器。此服务器需要运行,其他子命令才能工作。
$ ./pact_mock_server_cli help start
Starts the master mock server
Usage: pact_mock_server_cli start [OPTIONS]
Options:
--help Print help and exit
-o, --output <output> the directory where to write files to (defaults to current directory)
--base-port <base-port> the base port number that mock server ports will be allocated from. If not specified, ports will be randomly assigned by the OS.
-v, --version Print version information and exit
-p, --port <port> port the master mock server runs on (defaults to 8080)
--server-key <server-key> the server key to use to authenticate shutdown requests (defaults to a random generated one)
-h, --host <host> hostname the master mock server runs on (defaults to localhost)
-l, --loglevel <loglevel> Log level for mock servers to write to the log file (defaults to info) [possible values: error, warn, info, debug, trace, none]
--no-term-log Turns off using terminal ANSI escape codes
--no-file-log Do not log to an output file
选项
输出目录:-o, --output
这设置日志文件和Pact文件写入的输出目录。默认为当前工作目录。
示例
$ ./pact_mock_server_cli start -l debug -o logs/
15:40:08 [DEBUG] hyper::server: threads = 10
15:40:08 [INFO] pact_mock_server_cli::server: Server started on port 8080
创建
这将从Pact文件创建一个新的由主服务器管理的Pact模拟服务器。将显示模拟服务器的ID和端口。
注意,如果启用了 tls 创建功能,则 tls 选项才可用。
$ ./pact_mock_server_cli help create
Creates a new mock server from a pact file
Usage: pact_mock_server_cli create [OPTIONS] --file <file>
Options:
-f, --file <file> the pact file to define the mock server
--help Print help and exit
-c, --cors-preflight Handle CORS pre-flight requests
-v, --version Print version information and exit
-p, --port <port> port the master mock server runs on (defaults to 8080)
--tls Enable TLS with the mock server (will use a self-signed certificate)
-h, --host <host> hostname the master mock server runs on (defaults to localhost)
-l, --loglevel <loglevel> Log level for mock servers to write to the log file (defaults to info) [possible values: error, warn, info, debug, trace, none]
--no-term-log Turns off using terminal ANSI escape codes
--no-file-log Do not log to an output file
选项
契约文件:-f, --file
此选项指定基于契约文件的模拟服务器。这是一个必选选项。
示例
$ ./pact_mock_server_cli create -f ../../../libpact_matching/tests/pact.json
15:43:47 [INFO] pact_mock_server_cli::create_mock: Creating mock server from file ../../../libpact_matching/tests/pact.json
Mock server "7d1bf906d0ff42528f2d7d794dd19c5b" started on port 52943
list
列出所有正在运行的模拟服务器及其 ID、端口号、提供者名称和状态。
$ ./pact_mock_server_cli list --help
Lists all the running mock servers
Usage: pact_mock_server_cli list [OPTIONS]
Options:
--help Print help and exit
-v, --version Print version information and exit
-p, --port <port> port the master mock server runs on (defaults to 8080)
-h, --host <host> hostname the master mock server runs on (defaults to localhost)
-l, --loglevel <loglevel> Log level for mock servers to write to the log file (defaults to info) [possible values: error, warn, info, debug, trace, none]
--no-term-log Turns off using terminal ANSI escape codes
--no-file-log Do not log to an output file
示例
$ ./pact_mock_server_cli list
Mock Server Id Port Provider Status
7d1bf906d0ff42528f2d7d794dd19c5b 52943 Alice Service error
verify
此选项检查指定的模拟服务器(通过 ID 或端口号)是否满足契约文件中的所有期望。如果所有期望都已满足,则将契约文件写入由 start 子命令指定的输出目录。如果有任何错误,则不会写入契约文件,并将错误显示在控制台上。
$ ./pact_mock_server_cli verify --help
Verify the mock server by id or port number, and generate a pact file if all ok
Usage: pact_mock_server_cli verify [OPTIONS]
Options:
--help
Print help and exit
-i, --mock-server-id <mock-server-id>
the ID of the mock server
-m, --mock-server-port <mock-server-port>
the port number of the mock server
-v, --version
Print version information and exit
-p, --port <port>
port the master mock server runs on (defaults to 8080)
-h, --host <host>
hostname the master mock server runs on (defaults to localhost)
-l, --loglevel <loglevel>
Log level for mock servers to write to the log file (defaults to info) [possible values: error, warn, info, debug, trace, none]
--no-term-log
Turns off using terminal ANSI escape codes
--no-file-log
Do not log to an output file
选项
模拟服务器 ID:-i, --mock-server-id
要验证的模拟服务器的 ID。必须提供此选项或模拟服务器端口选项。
模拟服务器端口:-m, --mock-server-port
要验证的模拟服务器的端口号。必须提供此选项或模拟服务器 ID 选项。
示例
如果模拟服务器存在问题
$ ./pact_mock_server_cli verify -m 52943
Mock server 7d1bf906d0ff42528f2d7d794dd19c5b/52943 failed verification with 1 errors
0 - Expected request was not received - {"method":"GET","path":"/mallory","query":"name=ron&status=good"}
以及对于已匹配所有请求的模拟服务器
$ ./pact_mock_server_cli verify -m 52943
Mock server 7d1bf906d0ff42528f2d7d794dd19c5b/52943 verified ok
shutdown
通过 ID 或端口号关闭模拟服务器,释放其所有资源。
$ ./pact_mock_server_cli help shutdown
Shutdown the mock server by id or port number, releasing all its resources
Usage: pact_mock_server_cli shutdown [OPTIONS]
Options:
--help
Print help and exit
-i, --mock-server-id <mock-server-id>
the ID of the mock server
-m, --mock-server-port <mock-server-port>
the port number of the mock server
-v, --version
Print version information and exit
-p, --port <port>
port the master mock server runs on (defaults to 8080)
-h, --host <host>
hostname the master mock server runs on (defaults to localhost)
-l, --loglevel <loglevel>
Log level for mock servers to write to the log file (defaults to info) [possible values: error, warn, info, debug, trace, none]
--no-term-log
Turns off using terminal ANSI escape codes
--no-file-log
Do not log to an output file
选项
模拟服务器 ID:-i, --mock-server-id
要关闭的模拟服务器的 ID。必须提供此选项或模拟服务器端口选项。
模拟服务器端口:-m, --mock-server-port
要关闭的模拟服务器的端口号。必须提供此选项或模拟服务器 ID 选项。
示例
$ ./pact_mock_server_cli shutdown -i 3a94a472d04849048b78109e288702d0
Mock server with id '3a94a472d04849048b78109e288702d0' shutdown ok
RESTful JSON API
主模拟服务器提供 RESTful JSON API,该 API 是命令行子命令用来与主服务器通信和控制所使用的。
端点
GET /
此操作返回由该主服务器管理的所有运行中的模拟服务器列表。
示例请求
GET https://127.0.0.1:8080/ HTTP/1.1
示例响应
{
"mockServers": [
{
"id": "7d1bf906d0ff42528f2d7d794dd19c5b",
"port": 52943,
"provider": "Alice Service",
"status": "ok"
}
]
}
POST /
此操作从必须以 JSON 格式存在于正文中契约文件创建一个新的模拟服务器。在响应中返回模拟服务器的详细信息。
示例请求
POST https://127.0.0.1:8080/ HTTP/1.1
Content-Type: application/json
负载
{
"provider": {
"name": "Alice Service"
},
"consumer": {
"name": "Consumer"
},
"interactions": [
{
"description": "a retrieve Mallory request",
"request": {
"method": "GET",
"path": "/mallory",
"query": "name=ron&status=good"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "text/html"
},
"body": "\"That is some good Mallory.\""
}
}
]
}
示例响应
{
"mockServer": {
"id": "81c3483901e647ba8f545f2842d09cba",
"port": 58276
}
}
响应代码
200 OK
当模拟服务器创建成功时返回。
422 无法处理实体
如果契约 JSON 无法解析或无法启动模拟服务器,则返回。
GET /mockserver/:id
返回具有 :id
的模拟服务器的详细信息,其中 id 可以是模拟服务器 ID 或端口号。
示例请求
GET https://127.0.0.1:8080/mockserver/33218 HTTP/1.1
示例响应
{
"id": "3201b3e2f04f402c83b374a077f8f8dd",
"port": 33218,
"provider": "Alice Service",
"status": "error"
}
响应代码
200 OK
如果模拟服务器有效,则返回。
404 未找到
如果未找到具有给定 ID 或端口号的模拟服务器,则返回。
POST /mockserver/:id/verify
检查指定的模拟服务器(通过 ID 或端口号)是否满足契约文件中的所有期望。如果所有期望都已满足,则将契约文件写入由 start 子命令指定的输出目录。如果模拟服务器收到了任何不匹配的请求,则将返回这些请求。
示例请求
POST https://127.0.0.1:8080/mockserver/33218/verify HTTP/1.1
响应代码
204 无内容
当所有期望都成功满足并且契约文件已写入输出目录时返回。
422 无法处理实体
如果任何期望未满足或收到了任何未识别的请求,则返回。详细信息在正文中返回。
示例响应
{
"mismatches": [
{
"method": "GET",
"path": "/mallory",
"request": {
"method": "GET",
"path": "/mallory",
"query": "name=ron&status=good"
},
"type": "missing-request"
}
],
"mockServer": {
"id": "3201b3e2f04f402c83b374a077f8f8dd",
"port": 33218,
"provider": "Alice Service",
"status": "error"
}
}
404 未找到
如果 ID 或端口号不对应于正在运行的模拟服务器或无法写入契约文件,则返回。
DELETE /mockserver/:id
关闭具有 :id
的模拟服务器,其中 id 可以是模拟服务器 ID 或端口号。
示例请求
DELETE https://127.0.0.1:8080/mockserver/33218 HTTP/1.1
响应代码
204 无内容
当模拟服务器关闭时返回。
404 未找到
如果未找到具有给定 ID 或端口号的模拟服务器,则返回。
依赖项
~27-63MB
~1M SLoC