Подтвердить что ты не робот

PyDev с запуском pytest unit test с подключенным модулем

У меня проблема с запуском тестов pytest с pyDev. Я пытаюсь запустить unit test с модульным общим устройством и финализатором, который должен быть отменен после последнего теста. Но при запуске unit test в pyDev он не использует один и тот же экземпляр, но вместо этого создает два разных экземпляра. Пример выполняется нормально в консоли или при запуске из script внутри pydev.

Я использую платформу Python 2.7.3, pytest-2.3.4, pyDev 2.7.3.2013031601, Eclipse 4.2 на Win7.

Я попробовал пример из http://pytest.org/latest/fixture.html

Результат от pydev:

============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
__________________________________ test_ehlo ___________________________________
smtp = <smtplib.SMTP instance at 0x027F9080>
__________________________________ test_noop ___________________________________
smtp = <smtplib.SMTP instance at 0x027FF3C8>

Выход консоли:

============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
__________________________________ test_ehlo ___________________________________
smtp = <smtplib.SMTP instance at 0x01E51288>
__________________________________ test_noop ___________________________________
smtp = <smtplib.SMTP instance at 0x01E51288>

Каково ожидаемое поведение. Что я делаю неправильно?

используемый код - conftest.py:

import pytest
import smtplib

@pytest.fixture(scope="module")
def smtp():
return smtplib.SMTP("merlinux.eu")

Тестовый код в test_smtplib.py:

# content of test_module.py
def test_ehlo(smtp):
    response = smtp.ehlo()
    assert response[0] == 250
    assert "merlinux" in response[1]
    assert 0  # for demo purposes

def test_noop(smtp):
    response = smtp.noop()
    assert response[0] == 250
    assert 0  # for demo purposes

Запуск теста из script с помощью

import pytest,os
os.chdir("[path_to_tests]/tests") #your file location
pytest.main(['-s', 'test_smtplib.py'])

Любые предложения и большое спасибо за вашу помощь!

4b9b3361

Ответ 1

У меня нет eclipse, но я просматриваю исходный код для Pydev и pytest. pytest по умолчанию не использует многопроцессорность, но он будет, если у вас установлен xdist. Возможно, у вас это есть? Или, возможно, Eclipse установил его?

Если у вас все еще есть система, можете ли вы попробовать установить параметр ниже в ваших параметрах pytest? Это просто говорит pytest использовать один процесс при использовании xdist как описано здесь.

-n=1 или, возможно, он предпочтет -n 1

Если это не сработает, то это также не должно работать, но вы могли бы попробовать? Используйте опцию ниже в параметрах pytest, как и раньше (не в параметрах run runter теста pydev), чтобы включить тестирование уровня модуля. Это вариант для опытного тестирования pydev, поэтому я предполагаю, что это вызовет ошибку, но, возможно, какой-нибудь другой код, который отключит этот параметр, будет использовать его.

--split_jobs=module или, опять же, возможно, --split_jobs module

Ответ 2

Похоже, это давняя ошибка на стороне pydev. Я только что исправил это и отправил запрос на выгрузку Пидеву, см. https://github.com/fabioz/Pydev/pull/120. Между тем, вы могли бы, вероятно, вытащить небольшое изменение и примениться к вашей установленной версии pydev, что обеспечит правильные прогоны pydev/pytest с определением области видимости.