20 个版本
0.9.0 | 2024 年 3 月 27 日 |
---|---|
0.8.0 | 2021 年 10 月 5 日 |
0.7.4 | 2021 年 7 月 21 日 |
0.6.0 | 2020 年 12 月 31 日 |
0.1.0 | 2019 年 12 月 3 日 |
#146 in 测试
每月 117 次下载
170KB
4K SLoC
Darkroom 
使用 filmReel 格式构建的 Rust 合约测试工具。
示例请求:
// Cut: the data sharing system allowing one Frame to pass messages to the next Frame
{"HTTP_ENDPOINT": "/create_user"}
// Frame: the JSON file where input an output expectations are set
{
"protocol": "HTTP", // protocol: the declared communication protocol
"cut": { // cut: declare what variables should be pulled "from" and pushed "to" `usr.cut.json`
"from": ["HTTP_ENDPOINT"], // pull the HTTP_ENDPOINT "from" `usr.cut.json`
"to": { // push the USER_ID found in .response.body.msg "to" `usr.cut.json`
"USER_ID": "'response'.'body'.'msg'"
}
},
"request": { // request object
"body": { // request body
"email": "new_user@humanmail.com"
},
"uri": "POST ${HTTP_ENDPOINT}" // request uri: HTTP_ENDPOINT will be replaced by "/create_user"
},
"response": { // response object
"body": { // response body
"msg": "created user: ${USER_ID}" // USER_ID will be stored if there is a match for the surrounding values
},
"status": 200 // expected response status code
}
}
安装
- 简单:
cargo install darkroom
- 克隆子模块:
git clone --recurse-submodules -j8 https://github.com/mkatychev/darkroom
对于 gRPC 请求:Darkroom 0.3
或更高版本需要 grpcurl v1.6.0 或更高版本 来进行 gRPC 请求。
用法
dark
:
Usage: dark [<address>] [-v] [-H <header>] [--cut-out <file>] [-i] [--tls] [--proto-dir <dir...>] [-p <file...>] <command> [<args>]
Darkroom: A contract testing tool built in Rust using the filmReel format.
Options:
-v, --verbose enable verbose output
-H, --header fallback header passed to the specified protocol
--cut-out output of final cut file
-i, --interactive interactive frame sequence transitions
--tls enable TLS (automatically inferred for HTTP/S)
--proto-dir the path to a directory from which proto sources can be
imported, for use with --proto flags.
-p, --proto pass proto files used for payload forming
--help display usage information
Commands:
version Returns CARGO_PKG_VERSION
take Takes a single frame, emitting the request then validating
the returned response
record Attempts to play through an entire Reel sequence running a
take for every frame in the sequence
man return a given manual entry
vrecord Attempts to play through an entire VirtualReel sequence
running a take for every frame in the sequence
Examples:
Step through the httpbin test in [-i]nteractive mode:
$ dark -i record ./test_data post
Echo the origin `${IP}` that gets written to the cut register from the httpbin.org POST request:
$ dark --cut-out >(jq .IP) take ./test_data/post.01s.body.fr.json
Run the post reel in a v-reel setup:
$ dark vrecord ./test_data/post.vr.json
Notes:
Use `dark man` for details on filmReel, the JSON format.
示例
# step through the httpbin test in [-i]nteractive mode
dark -i record ./test_data post
# to fail at the third httpbin frame, set a timeout of two seconds
dark --interactive record ./test_data post --timeout 2
# multiple merge cuts can be used, with values being overridden left to right (right will have newer values)
dark --interactive record ./test_data post --cut ./test_data/post.cut.json '{"NEW":"value"}' '{"NEWER": "value", "NEW":"overridden"}'
# echo the origin "${IP}" that gets written to the cut register from the httpbin.org POST response
dark --cut-out >(jq .IP) take ./test_data/post.01s.body.fr.json --cut ./test_data/post.cut.json
# create a stripe token using the public Stripe API key
dark --verbose --cut-out >(jq) record ./test_data stripe_token
# create a stripe subscription preceding it with the stripe_token flow
dark --cut-out >(jq) record ./test_data stripe_subscription --component './test_data&stripe_token'
CHANGELOG
请参阅 CHANGELOG 了解发布历史。
依赖项
~13–31MB
~537K SLoC