どのようにinit()
がed(おそらく最高のデザインではないが、書き換えはオプションではない)によってまったく異なる振る舞いを持つ(python3)パッケージがあります。モジュールはinit()
にしか適用できません.2度目はエラーとなります。 py.testを使ってこのパッケージ(両方の動作)をテストしたいと思います。py.testテストでpython(またはリロードモジュール)を再起動
注:パッケージの性質上、2つの動作を相互に排他的にするため、単一のプログラムで両方の動作を行う必要はありません。
モジュールtest_xxx.py
モジュールが私のテストディレクトリにあります。各モジュールは、必要に応じて(フィクスチャを使用して)パッケージを初期化します。 py.test
はPythonインタプリタを一度起動するので、1つのpy.testですべてのテストモジュールを実行すると失敗します。
第2のinit()
を許可するようにパッケージをモンキーパッチすると、内部キャッシングなどが原因で説明できない動作が発生する可能性があるため、やりたいことではありません。
- それは
- (それによって、他のテストモジュールでのINITに影響されない)別のPythonのプロセスで各テストモジュールを実行するためにpy.testを伝えることは可能です確実に(パッケージを再ロードする方法はありますすべてのサブ依存関係などを含む)
- もう一つの解決策がありますか(私はインポートを考えていますが、フィクスチャでパッケージをインポートすることは考えていますが、これは過剰です)。モジュールをリロードするには
私は経験がないが、あなたは、いくつかのサブプロセスを開始し、物事そのように行うには、このプラグインを適応/使用することができる場合がありますhttps://pytest.org/latest/xdistを。 html#running-tests-in-a-python-subprocess –
pytestを1つのファイル( 'pytext text/text_xyz.py)で実行することができれば、test_xyzファイルを見つけてそれぞれを実行するプログラムを書くことができますサブプロセスモジュールと別のプロセス。これはSimeonによって参照されるプラグインが何をしているべきかです。 –
ありがとうございます。 'pytest-xdist'を見ると、残念ながらモジュールごとに新しいサブプロセスが開始されません。確かに私は2つのディレクトリにテストモジュールを用意しています.1つは初期化の一方の方法を使用し、もう一方はもう一方を使用します。それから私はディレクトリごとに一度pytestを実行します。しかし、残念ながら、個々の実行の戻り値とテストレポートが確実に組み合わされるように、スクリプトを追加する必要があります。 – Claude