Closed
Description
Link to sample failure (it's a public project so hopefully you can see this?)
https://circleci.com/gh/IntelAI/mlt/1857
pytest env:
(.venv) root@2ca5ec29de7d:/usr/share/mlt# pytest --version
This is pytest version 3.7.1, imported from /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pytest.pyc
setuptools registered plugins:
pytest-xdist-1.22.5 at /usr/share/mlt/.venv/local/lib/python2.7/site-packages/xdist/looponfail.py
pytest-xdist-1.22.5 at /usr/share/mlt/.venv/local/lib/python2.7/site-packages/xdist/plugin.py
pytest-forked-0.2 at /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pytest_forked/__init__.pyc
pytest-cov-2.5.1 at /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pytest_cov/plugin.py
The vars get set as they used to, but then in between the variables being set by this class here and when the first test is called, the variables disappear:
class CommandTester(object):
@classmethod
@pytest.fixture(scope='class', autouse=True)
def setup(self):
self.registry = os.getenv('MLT_REGISTRY', 'localhost:5000')
self.tfjob_templates = ('tf-dist-mnist', 'tf-distributed')
class TestConfig(CommandTester):
def test_config_list(self):
"""
Tests listing configs in an init directory
"""
self.init()
def init(self, template='hello-world', template_repo=basedir(),
enable_sync=False):
self._set_new_mlt_project_vars(template)
> init_options = ['mlt', 'init', '--registry={}'.format(self.registry),
'--template-repo={}'.format(template_repo),
'--namespace={}'.format(self.namespace),
'--template={}'.format(template), self.app_name]
E AttributeError: 'TestConfig' object has no attribute 'registry'
I stepped through every line that was called, and it was all stuff in pytest
or an associated package. In the beginning you'll notice that self.registry
is indeed set.
======================================================================== test session starts ===============================================================[277/816]
platform linux2 -- Python 2.7.12, pytest-3.7.1, py-1.5.4, pluggy-0.7.1 -- /usr/share/mlt/.venv/bin/python2
cachedir: .pytest_cache
rootdir: /usr/share/mlt, inifile: tox.ini
plugins: xdist-1.22.5, forked-0.2, cov-2.5.1
collected 1 item
tests/e2e/test_config_updates.py::TestConfig::test_update_config
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /usr/share/mlt/tests/test_utils/e2e_commands.py(46)setup()
-> self.registry = os.getenv('MLT_REGISTRY', 'localhost:5000')
(Pdb) n
> /usr/share/mlt/tests/test_utils/e2e_commands.py(51)setup()
-> self.tfjob_templates = ('tf-dist-mnist', 'tf-distributed')
(Pdb) n
--Return--
> /usr/share/mlt/tests/test_utils/e2e_commands.py(51)setup()->None
-> self.tfjob_templates = ('tf-dist-mnist', 'tf-distributed')
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(800)call_fixture_func()
-> return res
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(800)call_fixture_func()->None
-> return res
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(942)pytest_fixture_setup()
-> fixturedef.cached_result = (result, my_cache_key, None)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(943)pytest_fixture_setup()
-> return result
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(943)pytest_fixture_setup()->None
-> return result
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(181)_multicall() [241/816]
-> if res is not None:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(163)_multicall()
-> for hook_impl in reversed(hook_impls):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(188)_multicall()
-> if firstresult: # first result hooks return a single value
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(189)_multicall()
-> outcome = _Result(results[0] if results else None, excinfo)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(194)_multicall()
-> for gen in reversed(teardowns):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(195)_multicall()
-> try:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(196)_multicall()
-> gen.send(outcome)
(Pdb) n
StopIteration: None
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(196)_multicall()
-> gen.send(outcome)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(198)_multicall()
-> except StopIteration:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(199)_multicall()
-> pass
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(194)_multicall()
-> for gen in reversed(teardowns):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(201)_multicall()
-> return outcome.get_result()
(Pdb) n [205/816]
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(201)_multicall()->None
-> return outcome.get_result()
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/manager.py(61)<lambda>()->None
-> firstresult=hook.spec_opts.get('firstresult'),
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/manager.py(67)_hookexec()->None
-> return self._inner_hookexec(hook, methods, kwargs)
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/hooks.py(258)__call__()->None
-> return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(896)execute()->None
-> return hook.pytest_fixture_setup(fixturedef=self, request=request)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(606)_compute_fixture_value()
-> self.session._setupstate.addfinalizer(
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(607)_compute_fixture_value()
-> functools.partial(fixturedef.finish, request=subrequest),
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(608)_compute_fixture_value()
-> subrequest.node,
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(608)_compute_fixture_value()->None
-> subrequest.node,
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(533)_get_active_fixturedef()
-> self._fixture_defs[argname] = fixturedef
(Pdb) n [169/816]
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(534)_get_active_fixturedef()
-> return fixturedef
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(534)_get_active_fixturedef()-><Fixture...ig::()' >
-> return fixturedef
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(509)getfixturevalue()->None
-> return self._get_active_fixturedef(argname).cached_result[0]
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(463)_fillfixtures()
-> for argname in fixturenames:
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(463)_fillfixtures()->None
-> for argname in fixturenames:
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/fixtures.py(294)fillfixtures()->None
-> request._fillfixtures()
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/python.py(1435)setup()->None
-> fixtures.fillfixtures(self)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(367)prepare()
-> for col in needed_collectors[len(self.stack) :]:
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(367)prepare()->None
-> for col in needed_collectors[len(self.stack) :]:
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(104)pytest_runtest_setup()->None
-> item.session._setupstate.prepare(item)
(Pdb) n [132/816]
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(181)_multicall()
-> if res is not None:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(163)_multicall()
-> for hook_impl in reversed(hook_impls):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(164)_multicall()
-> try:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(165)_multicall()
-> args = [caller_kwargs[argname] for argname in hook_impl.argnames]
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(165)_multicall()
-> args = [caller_kwargs[argname] for argname in hook_impl.argnames]
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(172)_multicall()
-> if hook_impl.hookwrapper:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(180)_multicall()
-> res = hook_impl.function(*args)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(181)_multicall()
-> if res is not None:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(163)_multicall()
-> for hook_impl in reversed(hook_impls):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(188)_multicall()
-> if firstresult: # first result hooks return a single value
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(191)_multicall()
-> outcome = _Result(results, excinfo)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(194)_multicall()
-> for gen in reversed(teardowns):
(Pdb) n [96/816]
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(195)_multicall()
-> try:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(196)_multicall()
-> gen.send(outcome)
(Pdb) n
StopIteration: None
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(196)_multicall()
-> gen.send(outcome)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(198)_multicall()
-> except StopIteration:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(199)_multicall()
-> pass
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(194)_multicall()
-> for gen in reversed(teardowns):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(195)_multicall()
-> try:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(196)_multicall()
-> gen.send(outcome)
(Pdb) n
StopIteration: None
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(196)_multicall()
-> gen.send(outcome)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(198)_multicall()
-> except StopIteration:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(199)_multicall()
-> pass
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(194)_multicall()
-> for gen in reversed(teardowns):
(Pdb) n [58/816]
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(201)_multicall()
-> return outcome.get_result()
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/callers.py(201)_multicall()->[]
-> return outcome.get_result()
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/manager.py(61)<lambda>()->[]
-> firstresult=hook.spec_opts.get('firstresult'),
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/manager.py(67)_hookexec()->[]
-> return self._inner_hookexec(hook, methods, kwargs)
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/pluggy/hooks.py(258)__call__()->[]
-> return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(183)<lambda>()->[]
-> lambda: ihook(item=item, **kwds),
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(210)__init__()
-> self.stop = time()
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(210)__init__()->None
-> self.stop = time()
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(185)call_runtest_hook()-><CallInf...sult: []>
-> treat_keyboard_interrupt_as_exception=item.config.getvalue("usepdb"),
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(162)call_and_report()
-> hook = item.ihook
(Pdb) n [21/816]
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(163)call_and_report()
-> report = hook.pytest_runtest_makereport(item=item, call=call)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(164)call_and_report()
-> if log:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(165)call_and_report()
-> hook.pytest_runtest_logreport(report=report)
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(166)call_and_report()
-> if check_interactive_exception(call, report):
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(168)call_and_report()
-> return report
(Pdb) n
--Return--
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(168)call_and_report()-><TestRep...'passed'>
-> return report
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(76)runtestprotocol()
-> reports = [rep]
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(77)runtestprotocol()
-> if rep.passed:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(78)runtestprotocol()
-> if item.config.option.setupshow:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(80)runtestprotocol()
-> if not item.config.option.setuponly:
(Pdb) n
> /usr/share/mlt/.venv/local/lib/python2.7/site-packages/_pytest/runner.py(81)runtestprotocol()
-> reports.append(call_and_report(item, "call", log))
(Pdb) n
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /usr/share/mlt/tests/test_utils/e2e_commands.py(126)init()
-> self._set_new_mlt_project_vars(template)
(Pdb) n
> /usr/share/mlt/tests/test_utils/e2e_commands.py(127)init()
-> init_options = ['mlt', 'init', '--registry={}'.format(self.registry),
(Pdb) self.registry
*** AttributeError: 'TestConfig' object has no attribute 'registry'
full pip list
is here:
(.venv) root@2ca5ec29de7d:/usr/share/mlt# pip list
Package Version Location
-------------- ----------------- ------------------------------------------------
apipkg 1.5
argh 0.26.2
atomicwrites 1.1.5
attrs 18.1.0
conditional 1.2
configparser 3.5.0
coverage 4.5.1
docopt 0.6.2
enum34 1.1.6
execnet 1.5.0
flake8 3.5.0
funcsigs 1.0.2
functools32 3.2.3.post2
jsonschema 2.6.0
mccabe 0.6.1
mlt 0.2.1+10.gfbc10bf /usr/share/mlt/.venv/lib/python2.7/site-packages
mock 2.0.0
more-itertools 4.3.0
packaging 17.1
pathlib2 2.3.2
pathtools 0.1.2
pbr 4.2.0
pip 18.0
pluggy 0.7.1
progressbar2 3.38.0
py 1.5.4
pycodestyle 2.3.1
pyflakes 1.6.0
pyparsing 2.2.0
pytest 3.7.1
pytest-cov 2.5.1
pytest-forked 0.2
pytest-xdist 1.22.5
python-utils 2.3.0
PyYAML 3.13
scandir 1.8
setuptools 40.0.0
six 1.11.0
tabulate 0.8.2
termcolor 1.1.0
tox 3.1.2
virtualenv 16.0.0
watchdog 0.8.3
wheel 0.31.1
This used to work with the prior version of pytest
(we hadn't pegged pytest
as we should have and tests all broke after the 8/2 release).
EDIT
Pegging to these versions made things work again:
https://github.com/IntelAI/mlt/commit/2d5ec3251da295051b0862fa0db3c6e71dbb22ec