News for hackers. Stuff that matters.
Re:Pytest Tips and Tricks by progval on Wednesday March 22, 2023 @02:26AM (#35257512)
with or without IDEs, you cannot easily tell where fixtures come from. Is it from the same module? same package? a plugin? pytest itself? some non-test module that happened to be imported? You can't tell. And it's a global namespace where everything can override everything else.
Re:Pytest Tips and Tricks by Aperocky on Wednesday March 22, 2023 @03:29AM (#35257906)
The hierarchy is pretty clearly stated here and it seemed to be against what you're suggesting: https://docs.pytest.org/en/6.2.x/fixture.html#fixture-availa..., even though I don't think the hierarchy matters much if the fixtures are explicitly placed and named.

If you're instantiating the same fixture name across a bunch of different tests, using similar fixtures in different locations and not use import or a central or hierarchical location to define your fixtures after you have accumulated a number of similar items, I find it hard to blame the module for not being explicit.

Re:Pytest Tips and Tricks by progval on Wednesday March 22, 2023 @04:50AM (#35258457)
If for some reason a fixture is misbehaving, it's hard to find what package provides it because I don't explicitly import it.

I have to use `pytest --fixtures | less` and search for the fixture's name (or `pytest --fixtures | grep -C 50`)

> If you're instantiating the same fixture name across a bunch of different tests

It means I cannot name my fixture `database`, I have to call it `myplugin_database` instead to make sure it won't conflict with other plugins. And tests using this fixture have the long `myplugin_database` as argument.

Python already had namespaces as first-class citizens, it's a shame we have to go back to name prefixes.

Re:Pytest Tips and Tricks by Aperocky on Wednesday March 22, 2023 @10:17AM (#35261362)
> I cannot name my fixture `database`, I have to call it `myplugin_database` instead

On the subject of implicit vs explicit, `myplugin_database` is unquestionably more explicit.

Re:Pytest Tips and Tricks by Timon3 on Wednesday March 22, 2023 @01:06PM (#35264018)
I just ran into the fixture problem myself, maybe you can help me understand how I could find this myself.

I wanted to integrate pytest-benchmark[1]. Their docs mention fixtures a couple of times, but the examples only show that test functions receive a magic untyped parameter called "benchmark".

How would I make my usage more explicit? Can I somehow explicitly import the fixture, or at least type it?

[1] https://pytest-benchmark.readthedocs.io/en/latest/index.html

Re:Pytest Tips and Tricks by progval on Wednesday March 22, 2023 @04:44PM (#35266818)
I don't think you can do better than make pytest-benchmark a dependency