3.7.2์์ 3.8.1๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ค๊ณ ์๋ํ๊ณ ํ ์คํธ ๊ฒ์์ผ๋ก py.test์์ ๋ค์์๋ณด๊ธฐ ์์ํ์ต๋๋ค.
๋งค๊ฐ ๋ณ์ "loop_factory"๋ ๊ฐ์ ๋๋ ํจ์ ์์ฒด๋ฅผ ํตํด ๋ช ์ ์ ์ผ๋ก ์ ์ธํด์ผํฉ๋๋ค.
๊ณตํต์ ์ ๋น๋๊ธฐ ํจ์์์ผ๋ฉฐ 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.7.2์์ ๋ณผ ์ ์๋ฏ์ด ์ด๊ฒ์ ์ค์ ๋ก 3.8.x์ ๊ด๋ จ์ด ์์ ์ ์์ต๋๋ค. ๊ณ์ ์๋ถ ํ ๊ฒ์ ๋๋ค.
์ด๋ pytest==5.4.0
์ ๋ฆด๋ฆฌ์ค๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ๋ฐฉ๊ธ ๋ถ์ ํ์ pytest<5.4
๋ก ๋กค๋ฐฑํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
๋ค ๋ง์ด ๋ง์์. ๋ด ๋๋ฒ๊น ์์ ๊ทธ ์ ๋๊น์ง ์ป์์ต๋๋ค. :).
๋ฐ๋ผ๊ฑด๋ ์ด๊ฒ์ ๋๊ตฐ๊ฐ ์ธํฐ๋ท ๊ฒ์์ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. pytest์์ ๋ถ๋ฅํฉ๋๋ค.