#python #python-3.x #pytest
#python #python-3.x #pytest
Вопрос:
Мы тестируем нашу библиотеку c поверх SWIG на python с помощью pytest
. Однако иногда, когда возникают проблемы с интерпретацией SWIG, мы не получаем правильную информацию обратной трассировки при импорте нашей библиотеки в conftest.py
Когда мы импортируем нашу библиотеку непосредственно в python, мы получаем полную трассировку исключения
Как мы можем получить полную обратную трассировку в pytest, что может быть достигнуто при импорте библиотеки непосредственно в python?
Ниже приведен фрагмент из автоматически сгенерированного SWIG с дополнительным введенным вручную исключением для целей тестирования импорта
from sys import version_info as _swig_python_version_info
if _swig_python_version_info >= (2, 7, 0):
def swig_import_helper():
import importlib
pkg = __name__.rpartition('.')[0]
mname = '.'.join((pkg, '_sdk')).lstrip('.')
try:
# Added - Generate exception use case
raise ImportError("**** Import Error Use Case ****")
return importlib.import_module(mname)
except ImportError:
return importlib.import_module('_sdk')
Когда мы импортируем библиотеку непосредственно в python, мы получаем полную трассировку, включая первое возникновение исключения:
Импорт в библиотеку непосредственно в python
>>> from leaba import sdk
Traceback (most recent call last):
File ".../out/opt3-debug/pylib/leaba/sdk.py", line 17, in swig_import_helper
raise ImportError("**** Import Error Use Case ****")
ImportError: **** Import Error Use Case ****
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../out/opt3-debug/pylib/leaba/sdk.py", line 21, in <module>
_sdk = swig_import_helper()
File ".../out/opt3-debug/pylib/leaba/sdk.py", line 20, in swig_import_helper
return importlib.import_module('_sdk')
File "/common/pkgs/python/3.6.0/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_sdk'
Импорт в pytest conftest.py ,
отсутствует вывод первой обратной трассировки
ImportError while loading conftest '.../fishnet/tests/conftest.py'.
fishnet/tests/conftest.py:60: in <module>
from init import device_init
fishnet/init/device_init.py:28: in <module>
from leaba import sdk
.../out/opt3-debug/pylib/leaba/sdk.py:21: in <module>
_sdk = swig_import_helper()
.../out/opt3-debug/pylib/leaba/sdk.py:20: in swig_import_helper
return importlib.import_module('_sdk')
/common/pkgs/python/3.6.0/lib/python3.6/importlib/__init__.py:126: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
E ModuleNotFoundError: No module named '_sdk'
Как мы можем указать pytest предоставлять полную обратную трассировку, а не усекать и предоставлять только последнюю?