13

pyDev で pytest 単体テストを実行する際に問題があります。モジュール共有フィクスチャと、最後のテストの後に実行する必要があるファイナライザーを使用して単体テストを実行しようとしています。ただし、pyDev で単体テストを実行すると、同じインスタンスは使用されず、代わりに 2 つの異なるインスタンスが作成されます。この例は、コンソールで、または pydev 内のスクリプトから開始したときに正常に実行されています。

Win7でプラットフォームPython 2.7.3、pytest-2.3.4、pyDev 2.7.3.2013031601、Eclipse 4.2を使用しています。

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

次を使用してスクリプトからテストを実行します。

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

ご提案とご協力に感謝します!

4

2 に答える 2

1

私はEclipseを持っていませんが、Pydevとpytestのソースコードを見てきました。pytest はデフォルトではマルチプロセッシングを使用しませんが、xdist がインストールされている場合は使用します。おそらくあなたはそれを持っていますか?それともEclipseがインストールしたのでしょうか?

システムがまだ利用可能な場合は、pytest パラメーターで以下のオプションを設定してみてください。ここに記載されているように、xdist を使用するときに 1 つのプロセスを使用するように pytest に指示するだけです

-n=1またはおそらくそれを好むでしょう-n 1

それがうまくいかない場合は、これもうまくいかないはずですが、試してみていただけますか? モジュールレベルのテストを有効にするには、前と同じように (pydev テスト ランナー オプションではなく) pytestオプションで以下のオプションを使用します。これはpydevテストランナーオプションなので、エラーが発生すると思いますが、オプションをオフにする他のコードがそれを利用する可能性があります。

--split_jobs=moduleまたはまた多分--split_jobs module

于 2013-12-02T17:49:26.440 に答える
1

これは pydev 側の長年のバグのようです。私はそれを修正し、Pydev にプル リクエストを送信しました。 https://github.com/fabioz/Pydev/pull/120を参照してください。それまでの間、おそらく小さな変更を取り出して、インストールされているバージョンの pydev に適用し、適切な pydev/pytest の実行をスコープで有効にすることができます。

于 2014-04-02T07:18:31.417 に答える