コードがpy.testで実行されている場合、別のデータベースに接続したいと思います。 py.testセッションで実行しているかどうかを確認できる、呼び出す関数またはテストできる環境変数はありますか?これを処理する最良の方法は何ですか?
ソリューションは [〜#〜] rtfm [〜#〜] から来ましたが、明白な場所ではありませんでした。マニュアルのコードにもエラーがありました。以下で修正しました。
pytest run内から実行されているかどうかを検出します
通常、テストから呼び出された場合にアプリケーションコードの動作を変えることはお勧めできません。しかし、アプリケーションコードがテストから実行されているかどうかを絶対に確認する必要がある場合は、次のようなことができます。
# content of conftest.py def pytest_configure(config): import sys sys._called_from_test = True def pytest_unconfigure(config): import sys # This was missing from the manual del sys._called_from_test
次に、sys._called_from_testフラグを確認します。
if hasattr(sys, '_called_from_test'): # called from within a test run else: # called "normally"
アプリケーションに応じて。フラグの処理には、sysではなく独自のアプリケーションモジュールを使用することもお勧めします。
私がたどった簡単な解決策:
import sys
if "pytest" in sys.modules:
...
Pytest runnerは常にpytest
モジュールをロードし、sys.modules
で使用できるようにします。
もちろん、この解決策は、テストしようとしているコードがpytest
自体を使用していない場合にのみ機能します。
マニュアルに記載されている別の方法もあります: https://docs.pytest.org/en/latest/example/simple.html#pytest-current-test-environment-variable
Pytestは次の環境変数を設定しますPYTEST_CURRENT_TEST
。
上記の変数の存在をチェックすることで、コードがpytestの傘から実行されているかどうかを確実に検出できるはずです。
import os
if "PYTEST_CURRENT_TEST" in os.environ:
# We are running under pytest, act accordingly...
一緒に働く pytest==4.3.1
上記の方法が失敗したため、私は古い学校に行って次のことを確認しました。
if 'pytest' in sys.argv[0]:
print('pytest was called!')
これは、テストコード内で環境変数を設定することで実行できます。たとえば、プロジェクトが
conftest.py
mypkg/
__init__.py
app.py
tests/
test_app.py
test_app.py
あなたは付け加えられます
import os
os.environ['PYTEST_RUNNING'] = 'true'
そして、中を確認できますapp.py
:
import os
if os.environ.get('PYTEST_RUNNING', '') == 'true':
print('pytest is running')