Fixtures are always created when a test function requests them, by declaring them on the parameter list, as we've seen already. By default, each fixture is destroyed when each test finishes.
As mentioned at the beginning of this chapter, some fixtures can be costly to create or set up, and it would be helpful to be able to create as few instances of it as possible, to save time. Here are some examples:
- Initializing database tables
- Reading cached data from a disk, for example, large CSV data
- Starting up external services
To help solve this issue, fixtures in pytest can have different scopes. The scope of a fixture defines when the fixture should be cleaned up. While the fixture is not cleaned up, tests requesting the fixture will receive the same fixture value.
The scope parameter of the @pytest.fixture decorator is used to set the fixture's scope:
@pytest.fixture...