pytest-dev / pytest-timeout

MIT License
206 stars 63 forks source link

how can I get rid of the stack-trace #148

Closed fenchu closed 1 year ago

fenchu commented 1 year ago

I use timeout on tests running in ci-runner containers, so they timeout and create reports just before the runners timeout and kill everything. Works fine, but how Do I get rid of the stacktrace?

pytest -s --capture=tee-sys --log-cli-level=INFO --durations=0 --tb=short --junitxml=report.xml .\tests\

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Stack of Thread-96 (_readerthread) (8784) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  File "C:\dist\Python311\Lib\threading.py", line 995, in _bootstrap
    self._bootstrap_inner()
  File "C:\dist\Python311\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "C:\dist\Python311\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "C:\dist\Python311\Lib\subprocess.py", line 1597, in _readerthread
    buffer.append(fh.read())

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Stack of Thread-95 (_readerthread) (12876) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  File "C:\dist\Python311\Lib\threading.py", line 995, in _bootstrap
    self._bootstrap_inner()
  File "C:\dist\Python311\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "C:\dist\Python311\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "C:\dist\Python311\Lib\subprocess.py", line 1597, in _readerthread
    buffer.append(fh.read())

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Stack of MainThread (19156) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\dist\venvs\trk-fullstack-test\Scripts\pytest.exe\__main__.py", line 7, in <module>
    sys.exit(console_main())
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\config\__init__.py", line 189, in console_main
    code = main()
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\config\__init__.py", line 166, in main
    ret: Union[ExitCode, int] = config.hook.pytest_cmdline_main(
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\main.py", line 316, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\main.py", line 269, in wrap_session
    session.exitstatus = doit(config, session) or 0
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\main.py", line 323, in _main
    config.hook.pytest_runtestloop(session=session)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\main.py", line 348, in pytest_runtestloop
    item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 114, in pytest_runtest_protocol
    runtestprotocol(item, nextitem=nextitem)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 133, in runtestprotocol
    reports.append(call_and_report(item, "call", log))
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 222, in call_and_report
    call = call_runtest_hook(item, when, **kwds)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 261, in call_runtest_hook
    return CallInfo.from_call(
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 341, in from_call
    result: Optional[TResult] = func()
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 262, in <lambda>
    lambda: ihook(item=item, **kwds), when=when, reraise=reraise
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\runner.py", line 169, in pytest_runtest_call
    item.runtest()
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\python.py", line 1799, in runtest
    self.ihook.pytest_pyfunc_call(pyfuncitem=self)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\pluggy\_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "C:\dist\venvs\trk-fullstack-test\Lib\site-packages\_pytest\python.py", line 194, in pytest_pyfunc_call
    result = testfunction(**testargs)
  File "C:\dist\work\trk-fullstack-test\tests\test_02_scim.py", line 134, in test03_delete_insert
    dat = tools.exe.psexe(["./bin/ver.py", "--ldap", f"--ldapuser={str(k)}", f"--server={webhost}"], returnjson=False)
  File "C:\dist\work\trk-fullstack-test\tools\exe.py", line 41, in psexe
    out = subprocess.run(shell_exe, shell=shell, timeout=timer, capture_output=True)
  File "C:\dist\Python311\Lib\subprocess.py", line 550, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "C:\dist\Python311\Lib\subprocess.py", line 1209, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "C:\dist\Python311\Lib\subprocess.py", line 1626, in _communicate
    self.stdout_thread.join(self._remaining_time(endtime))
  File "C:\dist\Python311\Lib\threading.py", line 1116, in join
    self._wait_for_tstate_lock(timeout=max(timeout, 0))
  File "C:\dist\Python311\Lib\threading.py", line 1132, in _wait_for_tstate_lock
    if lock.acquire(block, timeout):

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Timeout ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
flub commented 1 year ago

If you don't want the stacktrace, why use pytest-timeout? The entire reason it exists is to get stacktraces.

fenchu commented 1 year ago

for me it is to timeout before gitlab kills the pod. so the pipeline can perform its logging and cleanup stages. but I can write my own plugin

flub commented 1 year ago

do you not want to know what the state of the test was at the time of the timeout? how do you debug this failure case?

fenchu commented 1 year ago

I just want to run an exit command before the container is hard deleted. There is another challenge. the report.xml is not finished. this is what our quality system needs.