Pytest-django: فشل إجراء العديد من الاختبارات مع sqlite في الذاكرة الخلفية بسبب خطأ التجزئة

تم إنشاؤها على ٢٦ أكتوبر ٢٠١٦  ·  14تعليقات  ·  مصدر: pytest-dev/pytest-django

حدث هذا لي عدة مرات منذ أن قمت بنقل قاعدة اختبار كبيرة ، من حوالي 450 اختبارًا ، إلى py.test (من nose ) ، وتغيير الواجهة الخلفية django إلى اسم sqlite db ( test.db ) أو خلفية أخرى لا تفشل. يبدو أن الفشل يحدث حول علامة الاختبار 390 ؛ حتى إذا قمت بإزالة الاختبارات المحددة التي حدث فيها الخطأ.

لقد جربت هذا باستخدام py.test 2.9 وأحدث 3.0.1 أو 3.0.3.

tests.py ......
other_tests.py ...... (many more tests, ~390)

Fatal Python error: Segmentation fault

Current thread 0x00007fff73c0e000 (most recent call first):
  File "venv/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 316 in execute
  File "venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 62 in execute
  File "venv/lib/python2.7/site-packages/django/db/backends/base/base.py", line 214 in _savepoint_rollback
  File "venv/lib/python2.7/site-packages/django/db/backends/base/base.py", line 254 in savepoint_rollback
  File "venv/lib/python2.7/site-packages/django/db/transaction.py", line 245 in __exit__
  File "venv/lib/python2.7/site-packages/django/test/testcases.py", line 941 in _rollback_atomics
  File "venv/lib/python2.7/site-packages/django/test/testcases.py", line 998 in _fixture_teardown
  File "venv/lib/python2.7/site-packages/django/test/testcases.py", line 853 in _post_teardown
  File "venv/lib/python2.7/site-packages/django/test/testcases.py", line 189 in __call__
  File "venv/lib/python2.7/site-packages/_pytest/unittest.py", line 153 in runtest
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 104 in pytest_runtest_call
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 596 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 264 in __init__
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 247 in _wrapped_call
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 595 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 333 in <lambda>
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 338 in _hookexec
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 724 in __call__
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 151 in <lambda>
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 163 in __init__
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 151 in call_runtest_hook
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 133 in call_and_report
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 79 in runtestprotocol
  File "venv/lib/python2.7/site-packages/_pytest/runner.py", line 66 in pytest_runtest_protocol
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 596 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 264 in __init__
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 247 in _wrapped_call
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 595 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 264 in __init__
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 247 in _wrapped_call
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 595 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 333 in <lambda>
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 338 in _hookexec
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 724 in __call__
  File "venv/lib/python2.7/site-packages/_pytest/main.py", line 152 in pytest_runtestloop
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 596 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 333 in <lambda>
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 338 in _hookexec
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 724 in __call__
  File "venv/lib/python2.7/site-packages/_pytest/main.py", line 131 in _main
  File "venv/lib/python2.7/site-packages/_pytest/main.py", line 96 in wrap_session
  File "venv/lib/python2.7/site-packages/_pytest/main.py", line 125 in pytest_cmdline_main
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 596 in execute
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 333 in <lambda>
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 338 in _hookexec
  File "venv/lib/python2.7/site-packages/_pytest/vendored_packages/pluggy.py", line 724 in __call__
  File "venv/lib/python2.7/site-packages/_pytest/config.py", line 57 in main
  File "venv/bin/py.test", line 11 in <module>
/bin/sh: line 1: 23353 Segmentation fault: 11  py.test

التعليق الأكثر فائدة

هناك خطأ في sqlite 3.13 أو نحو ذلك يتسبب في حدوث أخطاء في التجزئة ، وللأسف فهو الإصدار الافتراضي في ubuntu. يجب أن تحاول تحديث sqlite ومعرفة ما إذا كان يعمل على إصلاح مشكلتك:

wget https://github.com/ghaering/pysqlite/archive/2.8.3.tar.gz \
    && wget https://www.sqlite.org/2016/sqlite-autoconf-3150200.tar.gz \
    && tar -xzf sqlite-autoconf-3150200.tar.gz \
    && tar -xzvf 2.8.3.tar.gz \
    && cd sqlite-autoconf-3150200 \
    && ./configure \
    && make \
    && make install \
    && cd .. \
    && cp /usr/local/lib/libsqlite3.so.0.8.6 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 \
    && cp -av sqlite-autoconf-3150200/. pysqlite-2.8.3/ \
    && cd ./pysqlite-2.8.3 && python setup.py build_static install \
    && /opt/venv/bin/python setup.py build_static install

ال 14 كومينتر

لقد تلقيت خطأً مشابهًا ، على الرغم من أنني بدأت للتو مشروعًا وليس لدي سوى اختبار أساسي واحد (جدًا) ، وأنا أستخدم المكون الإضافي المكاني لـ SQLite. ومن المثير للاهتمام ، أن إعداد قواعد البيانات الخاص بي يحدد 'NAME': ':memory:' ولكن كلا الملفين test_:memory: و test_:memory:-journal يتم إنشاؤهما في الدليل الجذر الخاص بي بعد تشغيل pytest. asfaltboy هل واجهت نفس السلوك؟

$ pytest
==================================================================== test session starts ====================================================================
platform darwin -- Python 3.5.2, pytest-3.0.3, py-1.4.31, pluggy-0.4.0
Django settings: config.settings.test (from ini file)
rootdir: [...], inifile: pytest.ini
plugins: cov-2.4.0, django-3.0.0, faulthandler-1.3.0
collected 1 items

apps/firms/tests/test_models.py Fatal Python error: Segmentation fault

Current thread 0x00007fffce84c3c0 (most recent call first):
  File ".../project/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 335 in execute
  File ".../project/lib/python3.5/site-packages/django/db/backends/utils.py", line 62 in execute
  File ".../project/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/base.py", line 75 in prepare_database
  File ".../project/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 81 in handle
  File ".../project/lib/python3.5/site-packages/django/core/management/base.py", line 345 in execute
  File ".../project/lib/python3.5/site-packages/django/core/management/__init__.py", line 130 in call_command
  File ".../project/lib/python3.5/site-packages/django/db/backends/base/creation.py", line 70 in create_test_db
  File ".../project/lib/python3.5/site-packages/django/test/runner.py", line 743 in setup_databases
  File ".../project/lib/python3.5/site-packages/pytest_django/fixtures.py", line 96 in django_db_setup
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 720 in call_fixture_func
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 815 in pytest_fixture_setup
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 785 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 529 in _getfixturevalue
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 464 in _get_active_fixturedef
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 766 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 529 in _getfixturevalue
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 464 in _get_active_fixturedef
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 439 in getfixturevalue
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 447 in getfuncargvalue
  File ".../project/lib/python3.5/site-packages/pytest_django/plugin.py", line 375 in _django_db_marker
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 720 in call_fixture_func
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 815 in pytest_fixture_setup
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 785 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 529 in _getfixturevalue
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 464 in _get_active_fixturedef
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 439 in getfixturevalue
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 397 in _fillfixtures
  File ".../project/lib/python3.5/site-packages/_pytest/fixtures.py", line 252 in fillfixtures
  File ".../project/lib/python3.5/site-packages/_pytest/python.py", line 1560 in setup
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 453 in prepare
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 100 in pytest_runtest_setup
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 151 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 163 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 151 in call_runtest_hook
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 133 in call_and_report
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 73 in runtestprotocol
  File ".../project/lib/python3.5/site-packages/_pytest/runner.py", line 66 in pytest_runtest_protocol
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
  File ".../project/lib/python3.5/site-packages/_pytest/main.py", line 152 in pytest_runtestloop
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 265 in __init__
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 248 in _wrapped_call
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 613 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
  File ".../project/lib/python3.5/site-packages/_pytest/main.py", line 131 in _main
  File ".../project/lib/python3.5/site-packages/_pytest/main.py", line 96 in wrap_session
  File ".../project/lib/python3.5/site-packages/_pytest/main.py", line 125 in pytest_cmdline_main
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 614 in execute
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 334 in <lambda>
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 339 in _hookexec
  File ".../project/lib/python3.5/site-packages/_pytest/vendored_packages/pluggy.py", line 745 in __call__
  File ".../project/lib/python3.5/site-packages/_pytest/config.py", line 56 in main
  File ".../project/bin/pytest", line 11 in <module>
[1]    34950 segmentation fault  pytest

تحديث: اجتازت اختباراتي الآن بعد تثبيت pytest-ipdb ، فأنا على v0.1dev2:

pip install git+git://github.com/mverteuil/pytest-ipdb.git

إنه يثبت قدرًا لا بأس به من التبعيات - قد يكون أحدها قد أصلح المشكلة - لكن ليس لدي الوقت في الوقت الحالي للبحث في أي منها على وجه التحديد. ها هي القائمة:

Successfully installed appnope-0.1.0 decorator-4.0.10 ipdb-0.10.1 ipython-5.1.0
ipython-genutils-0.1.0 pexpect-4.2.1 pickleshare-0.7.4 prompt-toolkit-1.0.8 
ptyprocess-0.5.1 pygments-2.1.3 pytest-ipdb-0.1.dev2 simplegeneric-0.8.1 
traitlets-4.3.1 wcwidth-0.1.7

نأمل أن يكون ذلك مرتبطًا: لدي مجموعة اختبار تعمل على sqlite - وهي تمر أثناء التشغيل العادي. ومع ذلك ، إذا قمت بإضافة --pdb ، فسأحصل على خطأ التجزئة. هل يمكن أن يكون الأمر متعلقًا بكيفية تخزين آثار المكدس التي تم إصلاحها بواسطة pytest-ipdb ؟

لست متأكدًا مما إذا كان مرتبطًا ، ولكن بعد إجراء مزيد من الاختبارات ، لم أواجه سوى أخطاء segfaults أو ناقل مع SQLite> 3.13.0

أنا على إصدار قديم من sqlite 2.8.17

إذا كنت تستخدم systemd فراجع coredumpctl gdb (ثم bt عند وجوده داخل gdb) لمعرفة ما إذا كان هناك المزيد من المعلومات حول مكان تعطله.

هناك خطأ في sqlite 3.13 أو نحو ذلك يتسبب في حدوث أخطاء في التجزئة ، وللأسف فهو الإصدار الافتراضي في ubuntu. يجب أن تحاول تحديث sqlite ومعرفة ما إذا كان يعمل على إصلاح مشكلتك:

wget https://github.com/ghaering/pysqlite/archive/2.8.3.tar.gz \
    && wget https://www.sqlite.org/2016/sqlite-autoconf-3150200.tar.gz \
    && tar -xzf sqlite-autoconf-3150200.tar.gz \
    && tar -xzvf 2.8.3.tar.gz \
    && cd sqlite-autoconf-3150200 \
    && ./configure \
    && make \
    && make install \
    && cd .. \
    && cp /usr/local/lib/libsqlite3.so.0.8.6 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 \
    && cp -av sqlite-autoconf-3150200/. pysqlite-2.8.3/ \
    && cd ./pysqlite-2.8.3 && python setup.py build_static install \
    && /opt/venv/bin/python setup.py build_static install

nMustaki هل لديك رابط / مشكلة لهذا الخطأ؟ انا فضولي

هذا إذا كنت أتذكر بشكل صحيح ولكن لا يمكنني التحقق الآن:
https://www.sqlite.org/src/info/16c9801ceba49

في الجمعة ، 27 يناير 2017 ، الساعة 15:25 ، كتب جون ميلر ، [email protected] :

nMustaki https://github.com/nMustaki هل لديك رابط / مشكلة لذلك
خلل برمجي؟ انا فضولي

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pytest-dev/pytest-django/issues/409#issuecomment-275676636 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AA-fUbC400zZ_Tq89EP3tZQlUGTrPMpGks5rWf5mgaJpZM4Kg-gh
.

لا أحد يوفر Stacktrace ؟! 🤷‍♂️
هل ما زالت موجودة في الإصدار الحالي؟

ليس حشرة pytest-django حقًا - الإغلاق.

لا تتردد في تقديم العلاقات العامة إذا كان لديك بعض الحلول ، وهو مناسب بالرغم من ذلك.

فقط لمعلوماتك ، أرى خلفية متشابهة جدًا مع Django 2.0 و sqlite 3.8.2 ، Python 3.6.3 على Ubuntu (Travis CI) وليس على محطة عمل devel الخاصة بي وهي RHEL 7 مع sqlite3 أقدم. مما يمكنني قوله فإن segafult يحدث في استعلام UPDATE.

لقد أسقطت أيضًا pytest وأجري اختباراتي عبر manage.py test لا يزال يعيد إنتاج المشكلة. أي تلميحات ستكون موضع ترحيب. شكرا.

atodorov ، قد ترغب في إلقاء نظرة على بطاقة Django رقم 24080 والتي يبدو أنها تشير إلى أن هذه مشكلة على الأرجح مع SQLite وليس مع Django.

يشير أحد المعلقين إلى البطاقة ذات الصلة في SQLite # 7f7f8026eda38 والتي تم إصلاحها في الإصدار 3.12.1 . أعتقد أنني قمت في النهاية بحل مشكلتي الأصلية عن طريق الترقية إلى أحدث إصدار من SQLite أيضًا ، لذا أقترح عليك تجربة ذلك أيضًا.

شكرا على الروابط. لقد رأيت تذكرة Django وبالفعل أدت ترقية sqlite إلى حل المشكلة. ومع ذلك ، لا أعتقد أنني أواجه نفس مشكلة sqlite التي ربطتها. على أي حال التحديث يحل ذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات