#api-testing #testing-http #http #http-api #e2e #api

grillon

Grillon以优雅自然的方式在Rust中实现API测试

5个版本 (重大更新)

0.5.0-alpha.12023年9月4日
0.4.0 2023年1月26日
0.3.0 2022年1月25日
0.2.0 2022年1月22日
0.1.0 2021年12月10日

#289 in 测试

MIT/Apache

125KB
2.5K SLoC

Grillon

Crates.io docs.rs GitHub Workflow Status Check Links

Grillon以优雅自然的方式在Rust中实现API测试。

  • 优雅、直观且易于表达
  • 内置测试函数
  • 可扩展

请注意,API在v1.0.0.0之前会经历很多变化。

文档

入门指南

此示例使用Tokio作为异步运行时。通常,测试库用于单元测试或集成测试。你可以将grillon声明为开发依赖项。

grillon添加到Cargo.toml

[dev-dependencies]
grillon = "0.5.0-alpha.1"
tokio = { version = "1", features = ["macros"] }

然后使用grillon

use grillon::{dsl::*, dsl::http::*, json, Grillon, StatusCode, Result};
use grillon::header::{HeaderValue, CONTENT_LENGTH, CONTENT_TYPE};

#[tokio::test]
async fn end_to_end_test() -> Result<()> {
    Grillon::new("https://jsonplaceholder.typicode.com")?
        .post("posts")
        .payload(json!({
            "title": "foo",
            "body": "bar",
            "userId": 1
        }))
        .assert()
        .await
        .status(is_success())
        .status(is(201))
        .response_time(is_less_than(700))
        .json_body(is(json!({
            "id": 101,
        })))
        .json_body(schema(json!({
            "properties": {
                "id": { "type": "number" }
            }
        })))
        .json_path("$.id", is(json!(101)))
        .headers(contains(vec![
            (
                CONTENT_TYPE,
                HeaderValue::from_static("application/json; charset=utf-8"),
            ),
            (CONTENT_LENGTH, HeaderValue::from_static("15")),
        ]))
        .assert_fn(|assert| {
            assert!(!assert.headers.is_empty());
            assert!(assert.status == StatusCode::CREATED);
            assert!(assert.json.is_some());

            println!("Json response : {:#?}", assert.json);
        });

    Ok(())
}

依赖

~18–31MB
~516K SLoC