10 releases (breaking)

0.8.0 Jun 25, 2022
0.6.0 Feb 20, 2022
0.5.1 Nov 25, 2020
0.4.0 Feb 14, 2020
0.1.0 Dec 30, 2018

#159 in Testing

Download history 85102/week @ 2022-03-16 79807/week @ 2022-03-23 82005/week @ 2022-03-30 91249/week @ 2022-04-06 74945/week @ 2022-04-13 87022/week @ 2022-04-20 82430/week @ 2022-04-27 81542/week @ 2022-05-04 83559/week @ 2022-05-11 91613/week @ 2022-05-18 66459/week @ 2022-05-25 89126/week @ 2022-06-01 101466/week @ 2022-06-08 91708/week @ 2022-06-15 107420/week @ 2022-06-22 79917/week @ 2022-06-29

398,347 downloads per month
Used in fewer than 11 crates

MIT license

360 lines


Version Downloads Docs MIT license Build Status MSRV: 1.51.0

serial_test allows for the creation of serialised Rust tests using the serial attribute e.g.

fn test_serial_one() {
  // Do things

fn test_serial_another() {
  // Do things

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. Other tests with the parallel attribute may run at the same time as each other, but not at the same time as a test with serial. Tests with neither attribute may run at any time and no guarantees are made about their timing!

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, and parallel doesn't support file_serial yet (patches welcomed!).


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

serial_test = "*"

plus use serial_test::serial; (for Rust 2018) or

extern crate serial_test;

for earlier versions.

You can then either add #[serial] or #[serial(some_text)] to tests as required.


~16K SLoC