We should provide function scoped by default for correctness, and we can offer fixtures with a different scope if needed.
Ideally, it'd look something like this:
def s3_server_impl():
yield MockedS3Server()
@pytest.fixture():
def s3_server():
yield s3_server_impl()
@pytest.fixture(scope="session"):
def session_s3_server():
yield s3_server_impl()
...