Pytest: фатальное исключение Windows: нарушение прав доступаPython

Программы на Python
Anonymous
Pytest: фатальное исключение Windows: нарушение прав доступа

Сообщение Anonymous »

Я использую pytest для запуска некоторых тестов моего проекта. Иногда (примерно от 30 до 50%) я получаю сообщение об ошибке после завершения теста. Но это не позволяет системе тестирования создать тестовый отчет, что действительно доставляет неудобства.
Ошибка:
Windows fatal exception: access violation

Current thread 0x000019e0 (most recent call first):
File "C:\Python38\lib\threading.py", line 1200 in invoke_excepthook
File "C:\Python38\lib\threading.py", line 934 in _bootstrap_inner
File "C:\Python38\lib\threading.py", line 890 in _bootstrap

Thread 0x00001b0c (most recent call first):
File "C:\Python38\lib\site-packages\serial\serialwin32.py", line 240 in _close
File "C:\Python38\lib\site-packages\serial\serialwin32.py", line 246 in close
File "C:\NoBackup\svn\test_system_smets2\pyets\plugins\plugin_zigbee_dongle.py", line 141 in disconnect
File "C:\NoBackup\svn\test_system_smets2\pyets\plugins\plugin_zigbee_dongle.py", line 232 in stop
File "C:\NoBackup\svn\test_system_smets2\pyets\testengine\plugin_manager.py", line 286 in stop
File "C:\NoBackup\svn\test_system_smets2\pyets\testengine\testengine.py", line 112 in session_finalize
File "C:\NoBackup\svn\test_system_smets2\pyets\testengine\pytest_test_engine.py", line 58 in test_engine
File "C:\Python38\lib\site-packages\_pytest\fixtures.py", line 800 in _teardown_yield_fixture
File "C:\Python38\lib\site-packages\_pytest\fixtures.py", line 871 in finish
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 318 in _callfinalizers
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 328 in _teardown_with_finalization
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 310 in _pop_and_teardown
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 350 in _teardown_towards
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 342 in teardown_exact
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 148 in pytest_runtest_teardown
File "C:\Python38\lib\site-packages\pluggy\callers.py", line 187 in _multicall
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 83 in
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 92 in _hookexec
File "C:\Python38\lib\site-packages\pluggy\hooks.py", line 286 in __call__
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 217 in
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 244 in from_call
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 216 in call_runtest_hook
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 186 in call_and_report
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 101 in runtestprotocol
File "C:\Python38\lib\site-packages\_pytest\runner.py", line 85 in pytest_runtest_protocol
File "C:\Python38\lib\site-packages\pluggy\callers.py", line 187 in _multicall
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 83 in
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 92 in _hookexec
File "C:\Python38\lib\site-packages\pluggy\hooks.py", line 286 in __call__
File "C:\Python38\lib\site-packages\_pytest\main.py", line 272 in pytest_runtestloop
File "C:\Python38\lib\site-packages\pluggy\callers.py", line 187 in _multicall
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 83 in
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 92 in _hookexec
File "C:\Python38\lib\site-packages\pluggy\hooks.py", line 286 in __call__
File "C:\Python38\lib\site-packages\_pytest\main.py", line 247 in _main
File "C:\Python38\lib\site-packages\_pytest\main.py", line 191 in wrap_session
File "C:\Python38\lib\site-packages\_pytest\main.py", line 240 in pytest_cmdline_main
File "C:\Python38\lib\site-packages\pluggy\callers.py", line 187 in _multicall
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 83 in
File "C:\Python38\lib\site-packages\pluggy\manager.py", line 92 in _hookexec
File "C:\Python38\lib\site-packages\pluggy\hooks.py", line 286 in __call__
File "C:\Python38\lib\site-packages\_pytest\config\__init__.py", line 124 in main
File "testrun.py", line 1184 in run_single_test
File "testrun.py", line 1548 in main
File "testrun.py", line 1581 in

Кто-нибудь знает, как это исправить или отладить?
Я использую pytest 5.4.1 с Python 3.8.0 на Win10. Но это также можно воспроизвести и в более старых версиях pytest.
Плагин плагин_zigbee_dongle.py использует pyserial (3.4) для связи с USB-RF-ключом в потоке. Следующий код представляет собой фрагмент этого плагина:
import serial
import threading

class ZigbeeDongleSerial(object):

def __init__(self, test_engine):
self.ser = serial.Serial()
self.test_engine = test_engine

# ----------------------------------------------------------
def connect(self,
port,
baud,
timeout):

self.ser.baudrate = baud
self.ser.timeout = timeout
self.ser.port = port
self.ser.open()

# ----------------------------------------------------------
def disconnect(self):

try:
if self.is_connected():
self.ser.close() #

Вернуться в «Python»