3.7.2 рд╕реЗ 3.8.1 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЦреЛрдЬ рдХреЗ рд╕рд╛рде py.test рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛:
рдкреИрд░рд╛рдореАрдЯрд░ "рд▓реВрдк_рдлреИрдХреНрдЯ" рдХреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЬрд┐рд╕ рд╕рдорд╛рдирддрд╛ рд╕реЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рд╡рд╣ async рдлрд╝рдВрдХреНрд╢рди рдереЗ, рдФрд░ рдпрд╣ рдХрд╣реАрдВ рди рдХрд╣реАрдВ aiohttp рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореИрдВ asyncio рдпрд╛ aiohttp рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдХреЗрдЬ:
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
рдХреЙрд▓рд╕реНрдЯреИрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рд╡рд░рдг:
тЮЬ ~/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
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 3.8.x рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм 3.7.2 рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реИред рдЖрдЧреЗ рдмрдврд╝рддреЗ рд░рд╣рдирд╛ред
рдпрд╣ pytest==5.4.0
рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдмрд╕ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЬрд▓ рдЧрдпрд╛ рдФрд░ pytest<5.4
рд╡рд╛рдкрд╕ рд▓реБрдврд╝рдХрдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рд╣рд╛рдВ рддреБрдо рд╕рд╣реА рд╣реЛред рдмрд╕ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ :)ред
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА Googling рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдкрд░ рдЯреНрд░рд╛рдЗрдПрдЬ рдХрд░реЗрдЧрд╛ред