4个版本 (2个重大更改)
使用旧的Rust 2015
0.3.0 | 2017年8月2日 |
---|---|
0.2.1 | 2017年8月1日 |
0.2.0 | 2017年8月1日 |
0.1.0 | 2017年7月31日 |
#24 in #api-testing
每月34次下载
30KB
462 行
droed挂钩-rust • Rust的Dredd HTTP API测试集成
此软件包包含一个Rust Dredd挂钩处理器,它提供Dredd API测试框架与Rust环境之间的桥梁,以简化Dredd提供的测试挂钩的实现。在Rust中编写Dredd挂钩以将API Blueprint与您的Rust项目连接起来。
不确定这些Dredd挂钩是什么?请阅读Dredd文档中的它们。
以下是一些挂钩可用的示例
- 加载数据库测试数据
- 测试步骤后的清理
- 处理身份验证和会话
- 在事务之间传递数据(从响应中保存状态到暂存区)
- 修改从蓝图生成的请求
- 更改生成的期望值
- 设置自定义期望值
- 通过日志记录进行调试
安装
全局安装
如果您还没有安装,请通过npm安装Dredd CLI
npm install -g dredd
为了使Dredd CLI能够与您的测试二进制文件接口,您需要安装dredd-hooks-rust
二进制文件,您可以通过运行以下命令来获取它:
# This will install both `dredd-hooks-rust` and `cargo-dredd`
cargo install dredd-hooks
项目设置
要开始使用Dredd测试您的Rust项目,只需将dredd-hooks
添加到您的Cargo.toml
文件中。
[dependencies]
dredd-hooks = "0.3.0"
或者如果您已安装cargo-edit,您可以直接在命令行中运行此命令
cargo add dredd-hooks
快速入门示例
以下是一个简短的示例,展示了Dredd测试正在针对一个iron
服务器运行。
此示例中项目的名称假定是dredd-rust-test
测试.apib
# My Api
## GET /message
+ Response 200 (text/plain)
Hello World!
main.rs
:
extern crate iron;
extern crate router;
extern crate dredd_hooks;
use iron::prelude::*;
use router::Router;
use dredd_hooks::{HooksServer};
// HTTP endpoint
fn endpoint(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((iron::status::Ok, "Hello World!\n\n")))
}
fn main() {
let mut hooks = HooksServer::new();
// Start the server before any of the tests are running.
hooks.before_all(Box::new(|tr| {
::std::thread::spawn(move || {
let mut router = Router::new();
router.get("/message", endpoint, "endpoint");
Iron::new(router).http("127.0.0.1:3000").unwrap();
});
tr
}));
// Execute a hook before a specific test.
hooks.before("/message > GET", Box::new(|mut tr| {
// Set the skip flag on this test.
// Comment out the next line and you should see a passing test.
tr.insert("skip".to_owned(), true.into());
tr
}));
HooksServer::start_from_env(hooks);
}
运行以下命令:
cargo build && dredd ./test.apib http://127.0.0.1:3000 --language=dredd-hooks-rust --hookfiles=target/debug/dredd-rust-test
现在您应该会看到Dredd正在尝试运行对刚刚编译的二进制文件的测试,但实际上跳过了它尝试运行的单一测试,因为我们通过一个before
挂钩告诉Dredd这样做。
项目设置
上述快速入门示例假设钩子文件被编译为一个bin
目标。然而,在大多数项目中,你可能需要一个更健壮的设置,如下所示
Cargo.toml
:
[[test]]
name = "dredd_test_hooks"
path = "tests/dredd/hooks.rs"
test = false
harness = false
[package.metadata.dredd_hooks]
hook_targets = ["dredd_test_hooks"]
将test
值设置为false
是必要的,这样我们的阻塞钩子服务器在运行cargo test
时不会干扰其他测试。将harness
设置为false
会导致测试二进制文件在没有测试框架的情况下编译,因为我们已经有了dredd
作为我们的测试框架。
最后,在package.metadata.dredd_hooks
下的值给我们提供了一些关于测试设置的额外元数据,这使得我们可以使用cargo dredd
命令来简化调用
cargo dredd ./test.apib http://127.0.0.1:3000
许可
根据您的要求,许可如下
- Apache License,版本 2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
致谢
感谢
- goodman背后的开发者为我们提供了一个如何将Dredd与编译语言集成的良好示例。
依赖
~8–23MB
~326K SLoC