1 个不稳定版本

0.1.0 2021 年 12 月 9 日

#1269 in 编码

MIT/Apache

22KB
171

restest

Rust 中 REST API 的黑盒集成测试。

此包提供了 assert_api 宏,允许根据特定的请求声明式地测试服务器发出的响应是否正确。

示例

#![feature(assert_matches)]

use serde::{Deserialize, Serialize};

restest::port! { 8080 }

restest::assert_api! {
    POST "/user",
    PostUser {
        year_of_birth: 2000,
    } => User {
        year_of_birth: 2000,
        ..
    }
}

#[derive(Debug, Serialize)]
struct PostUser {
    year_of_birth: usize,
}

#[derive(Debug, Deserialize)]
struct User {
    year_of_birth: usize,
    id: Uuid
}

编写测试

port 宏设置请求必须运行的端口。

测试以常规 Rust 测试编写(即:带有 #[test] 注释的函数)。由于我们使用异步代码,必须编写异步测试,可能使用 #[tokio::test]

具体来说,可以使用 assert_api 宏来查询服务器 API 并分析其响应。

运行测试

在运行 cargo test 时,服务器必须在后台运行。

所需的工具链

nightly 功能允许 assert_api 宏扩展为针对 nightly 特定的代码。这提供了以下功能

  • 当请求体与预期模式不匹配时,提供更好的 panic 信息(需要 assert_matches),
  • 能够在响应体中重用匹配的变量(需要 let_else) (仍在开发中)。

必须使用以下两行在 crate 根目录下添加这两个功能

#![feature(assert_matches)]
#![feature(let_else)]

行为准则

我们有一份行为准则,以便创造一个更加愉快和工作的社区环境。请参阅 CODE_OF_CONDUCT 文件以获取更多详细信息。

许可

在以下任一许可下许可

根据您的选择。

双重 MIT/Apache2 许可证更为宽松。

依赖项

~4–17MB
~251K SLoC