I tend to use std::fs:read but don't have a good argument for it.
I prefer include_bytes!() if possible; as a general principle I strive to make the runtime infallible for things that I'm not actively testing.
With that said, I noticed once that include_bytes!() can explode build times if files are large, so it depends on the size of the file.
For packaging's sake I slightly favor fs::read. This way, the tests can still be compiled even if the data is not shipped in the .crate – and reunited with the data at another point in time. If you wanted to be fancy maybe use two environment variables for the root of the test data with dynamic paths
env::var("MY_CRATE_TEST_ROOT").unwrap_or(env!("CARGO_MANIFEST_DIR"))
But that really depends on packaging, there's lots of variance here. When you containerize the stages anyways it does not matter that much.
TBH I much prefer inline, where reasonable. Jumping to another file to understand a test is annoying.
If it's going to read a file, I find that best when it kinda has to be fs::read because it's also enumerating a directory or something to run lots of things and be able to add more without rebuilding the tests.
It depends on a use case, if the content is always required and not changing from time to time, then definatelly include_bytes!().