8 releases (5 breaking)
0.6.0 | Dec 6, 2024 |
---|---|
0.5.0 | Oct 27, 2024 |
0.5.0-alpha.1 | Sep 4, 2023 |
0.4.0 | Jan 26, 2023 |
0.1.0 | Dec 10, 2021 |
#97 in Testing
509 downloads per month
195KB
4.5K
SLoC
Grillon
Grillon offers an elegant and natural way to approach API testing in Rust.
- Elegant, intuitive and expressive API
- Built-in testing functions
- Extensible
Please note that the API is subject to a lot of changes until the
v1.0.0
.
Documentation
Getting started
Before you begin, be sure to read the book to learn more about configuring logs and assertions!
You need Tokio as asynchronous runtime. Generally, testing libs are
used in unit or integration tests so let's declare grillon
as a dev-dependency.
Add grillon
to Cargo.toml
[dev-dependencies]
grillon = "0.6.0"
tokio = { version = "1", features = ["macros"] }
Then use grillon
:
use grillon::{dsl::*, dsl::http::*, json, Grillon, StatusCode, Result};
use grillon::header::{HeaderValue, CONTENT_LENGTH, CONTENT_TYPE};
use grillon::Assert;
#[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)))
.header(CONTENT_TYPE, is("application/json; charset=utf-8"))
.headers(contains(vec![
(
CONTENT_TYPE,
HeaderValue::from_static("application/json; charset=utf-8"),
),
(CONTENT_LENGTH, HeaderValue::from_static("15")),
]))
.assert_fn(|assert| {
let Assert {
headers,
status,
json,
..
} = assert.clone();
assert!(!headers.unwrap().is_empty());
assert!(status.unwrap() == StatusCode::CREATED);
assert!(json.is_some());
println!("Json response : {:#?}", assert.json);
});
Ok(())
}
Dependencies
~12–25MB
~381K SLoC