Parameter "loop_factory" should be declared explicitly via indirect or in function itself
See original GitHub issueAs of pytest 5.4.0 there is an issue with async tests, at the very least when using aiohttp. Can confirm that downgrading pytest fixed the issue.
Here’s the same details I submitted over there when I thought aiohttp was the culprit:
Parameter “loop_factory” should be declared explicitly via indirect or in function itself
The commonality it turns out were async functions, and it appears to be caused somewhere within aiohttp. I’m not that familiar with asyncio or aiohttp, so I’m happy to debug more with guidance, but I’m hoping someone might have more thoughts here.
Related packages:
aiohttp==3.6.2
pytest==5.4.0
pytest-aiohttp==0.3.0
pytest-cov==2.8.1
pytest-forked==1.1.3
pytest-mock==2.0.0
pytest-responses==0.4.0
pytest-xdist==1.31.0
Some detail around the callstack:
➜ ~/D/zeus (feat/increase-lru-cache) ✗ py.test -x --pdb
=========================================================================================== test session starts ============================================================================================
platform darwin -- Python 3.8.1, pytest-5.4.0, py-1.8.1, pluggy-0.13.1
rootdir: /Users/dcramer/Development/zeus, inifile: setup.cfg
plugins: mock-2.0.0, celery-4.1.1, xdist-1.31.0, aiohttp-0.3.0, forked-1.1.3, responses-0.4.0, cov-2.8.1
collecting 186 items
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> traceback >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
In function "test_health_check":
Parameter "loop_factory" should be declared explicitly via indirect or in function itself
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> entering PDB >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB post_mortem (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/_pytest/python.py(1144)_validate_explicit_parameters()
-> fail(msg, pytrace=False)
(Pdb) l
1139 func_name = self.function.__name__
1140 msg = (
1141 'In function "{func_name}":\n'
1142 'Parameter "{arg}" should be declared explicitly via indirect or in function itself'
1143 ).format(func_name=func_name, arg=arg)
1144 -> fail(msg, pytrace=False)
1145
1146
1147 def _find_parametrized_scope(argnames, arg2fixturedefs, indirect):
1148 """Find the most appropriate scope for a parametrized call based on its arguments.
1149
(Pdb) u
> /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/_pytest/python.py(939)parametrize()
-> self._validate_explicit_parameters(argnames, indirect)
(Pdb) l
934
935 self._validate_if_using_arg_names(argnames, indirect)
936
937 arg_values_types = self._resolve_arg_value_types(argnames, indirect)
938
939 -> self._validate_explicit_parameters(argnames, indirect)
940
941 # Use any already (possibly) generated ids with parametrize Marks.
942 if _param_mark and _param_mark._param_ids_from:
943 generated_ids = _param_mark._param_ids_from._param_ids_generated
944 if generated_ids is not None:
(Pdb) u
> /Users/dcramer/Development/zeus/.venv/lib/python3.8/site-packages/aiohttp/pytest_plugin.py(203)pytest_generate_tests()
-> metafunc.parametrize("loop_factory",
(Pdb) l
198 "Unknown loop '%s', available loops: %s" % (
199 name, list(factories.keys())))
200 else:
201 continue
202 factories[name] = avail_factories[name]
203 -> metafunc.parametrize("loop_factory",
204 list(factories.values()),
205 ids=list(factories.keys()))
206
207
208 @pytest.fixture
Issue Analytics
- State:
- Created 4 years ago
- Reactions:7
- Comments:16 (6 by maintainers)
Top Results From Across the Web
Parametrizing tests — pytest documentation
Indirect parametrization¶. Using the indirect=True parameter when parametrizing a test allows to parametrize a test with a fixture receiving the values before ...
Read more >pytest parametrize with indirect - Raphael Pierzina
You can pass a keyword argument named indirect to parametrize to change how its parameters are being passed to the underlying test function....
Read more >Pass a parameter to a fixture function - Stack Overflow
But I need to the parametrization directly in the test module. Is it possible to access the params attribute of the fixture from...
Read more >pytest fixtures: explicit, modular, scalable
fixtures have explicit names and are activated by declaring their use from test functions, modules, classes or whole projects. fixtures are implemented in...
Read more >Armstrong Pump, Inc. v. Hartman, 10-CV-446S - Casetext
Thus, systems using the Hartman LOOP technology maximize their cooling efficiency ... simply makes the JACE itself functional, as Mr. Matthys testified.
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
5.4.1 is out, thanks everyone!
Thanks everyone for the report!
This was intended to remove what we assumed was “surprising” behavior, but as things always goes with projects used by many many people, “surprising” often becomes “used and expected”. 😁
@RonnyPfannschmidt I propose we just revert that change, and make it part of the expected behavior of fixtures. What do you think?