Mencoba meningkatkan dari 3.7.2 ke 3.8.1 dan saya mulai melihat yang berikut di py.test dengan penemuan pengujian:
Parameter "loop_factory" harus dideklarasikan secara eksplisit melalui tidak langsung atau dalam fungsi itu sendiri
Kesamaan itu ternyata adalah fungsi asinkron, dan tampaknya disebabkan di suatu tempat di dalam aiohttp. Saya tidak begitu paham dengan asyncio atau aiohttp, jadi saya senang men-debug lebih banyak dengan panduan, tetapi saya berharap seseorang mungkin memiliki lebih banyak pemikiran di sini.
Paket terkait:
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
Beberapa detail seputar 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
Ini mungkin sebenarnya tidak terkait 3.8.x, seperti yang sekarang saya lihat di 3.7.2. Akan terus membelah dua.
Ini disebabkan oleh dirilisnya pytest==5.4.0
. Saya baru saja terbakar olehnya dan memutar kembali ke pytest<5.4
menyelesaikan masalah.
Ya Anda benar. Baru saja sejauh itu dalam debugging saya :).
Semoga ini membantu seseorang Googling untuk itu. Akan melakukan triase pada pytest.