serial_test
serial_test
allows for the creation of serialised Rust tests using the serial
attribute
e.g.
#[test]
#[serial]
fn test_serial_one() {
// Do things
}
#[test]
#[serial]
fn test_serial_another() {
// Do things
}
#[tokio::test]
#[serial]
async fn test_serial_another() {
// Do things asynchronously
}
Multiple tests with the serial
attribute are guaranteed to be executed in serial. Ordering of the tests is not guaranteed however.
Tests without the serial
attribute may run at any time, including in parallel to tests marked as serial
. Note that if you're using
an async test reactor attribute (e.g. tokio::test
or actix_rt::test
) then they should be listed before serial
, otherwise we
don't get an async function and things break. There's now an error for this case to improve debugging.
For cases like doctests and integration tests where the tests are run as separate processes, we also support file_serial
, with
similar properties but based off file locking. Note that there are no guarantees about one test with serial
and another with
file_serial
as they lock using different methods.
Usage
We require at least Rust 1.51. Upgrades to this will require at least a minor version bump (while in 0.x versions) and a major version bump post-1.0.
Add to your Cargo.toml
[dev-dependencies]
serial_test = "*"
plus use serial_test::serial;
(for Rust 2018) or
#[macro_use]
extern crate serial_test;
for earlier versions.
You can then either add #[serial]
or #[serial(some_text)]
to tests as required.