19

X11にアクセスする必要があるPythonパッケージがあります。Xvfbを使用して、ビルドマシン(この場合はHudson)に実際のX11をインストールする必要がないようにします。そこで、py.testの起動時にXvfbサーバーを起動し、その1台のサーバーをすべてのテストに使用してから、サーバーを閉じます。

どうやってやるの?


:各テストクラスのSetUp(TearDown)でXvfbサーバーを起動(停止)することはできますが、2つの問題があります。1つは無駄です。Fatal IO error 0 (Success) on X server次に、サーバーを正しく終了したり、停止しないXvfbプロセスがハングしたりすると、奇妙なために機能しません。誰かが興味を持っているなら、 これはxvfbwrapperを使用しています。

4

2 に答える 2

20

これをいじる代わりにpytest-xvfbを使用することができます…それはより簡単でしょう。


それは実際にはかなり単純です。conftest.pyこれを含むプロジェクトルートで呼び出されるファイルを作成します。

import pytest
import os
import subprocess
import tempfile

@pytest.fixture(scope="session", autouse=True)
def start_xvfb_server (request):
    tempdir = tempfile.mkdtemp()
    xvfb_cmd = ['Xvfb',
                ':1022',
                '-screen', '0', '800x600x24',
                '-fbdir', tempdir,
                '-noreset'
    ]
    xvfb_proc = subprocess.Popen(xvfb_cmd,
            stdout=open(os.devnull),
            stderr=open(os.devnull),
            shell=False
    )
    request.addfinalizer(xvfb_proc.kill)

さて、あなたがしなければならないのは、各テストを設定してDISPLAYを1022に設定することだけです。これは簡単なことです。

于 2013-01-18T14:22:16.773 に答える
4

または、モジュールのドキュメント で説明されているように、 setUpClass/tearDownClassメソッドを定義するだけでもかまいません: https ://docs.python.org/2/library/unittest.html#unittest.TestCase.setUpClassunittest

py.test v2.4以降、完全にサポートされています。この公式ドキュメントページには、xunitスタイルと互換性のあるすべてのメソッドも記載されています: https ://pytest.org/latest/xunit_setup.html

于 2015-02-15T12:42:34.917 に答える