#api-testing #http-api #testing #api-bindings #dredd

程序+库 droed挂钩

Rust的Dredd HTTP API测试集成

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次下载

MIT/Apache

30KB
462

droed挂钩-rust • Rust的Dredd HTTP API测试集成 Crates.io docs.rs License

此软件包包含一个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

许可

根据您的要求,许可如下

任选其一。

致谢

感谢

依赖

~8–23MB
~326K SLoC