pythonプロジェクトでテストの実行を開始する前に、いくつかの環境変数を読み取り、読み取ったこれらの値でいくつかの変数を設定します。読み取った値に基づいて、目的の環境でテストを実行します.
例えば:環境変数が「ENV_NAME」と「ENV_NUMBER」と呼ばれるとしましょう
今、私はpy.testを使用してテストを実行したいと思います
ENV_NAME = 'staging'、ENV_NUMBER = '5'などの環境変数をハードコードし、プロジェクトディレクトリのルートでpy.testコマンドを実行してテストを実行すると、すべてのテストが正常に実行されます。 。
しかし、これらの値をハードコーディングしたくありません。方法はありますか、これらの環境変数をpy.testのコマンドライン引数として送信できますか?
私はの行でもっと考えていました
py.test -ENV_NAME = 'staging' -ENV_NUMBER = '5'。しかし、これは機能していません。
助けてください!ありがとうございました!
私は最終的に私が探していた答えを見つけました。
py.testを使用してテストを実行する前に、このような環境変数を設定できます
ENV_NAME = 'staging' ENV_NUMBER = '5' py.test
別の方法は、 pytest-env プラグインを使用することです。次のように構成できます。
[pytest]
env =
HOME=~/tmp
D:RUN_ENV=test
D:
プレフィックスはデフォルト値の設定を許可し、py.test
に渡される既存の変数をオーバーライドしません。
注:特別な環境設定を実行する必要がある場合のみ、カスタム設定で明示的にpytestを実行できます:
pytest -c custom_pytest.ini
これを達成する方法はいくつかあります
1)環境変数を使用したくない場合は、pytest addoptionsを https://pytest.org/latest/example/simple.html として使用できます
2)このようなラッパースクリプトを記述して、環境変数を呼び出すことができます。
import os
import py
env_name = os.environ["ENV_NAME"]
env_no = os.environ["ENV_NUMBER"]
pytest_args=(env_name,env_no)
pytest.main('-s' ,pytest_args,test_file.py)
test_file.pyで使用できます
env_n, env_n = pytest.config.getoption('pytest_args')
3)環境変数が設定されていない日付を渡すだけの場合の代替方法
コマンドラインで次のように使用できます
py.test --testdata ="ENV_NAME:staging,ENV_NUMBER:5"
テストファイルで使用できます
pytest_params = pytest.config.getoption('testdata')
params = pytest_params.split(":")
param_dict = dict(params[i:i+2] for i in range(0,len(params),2))
env_name = param_dict["ENV_Name"]
他の答えに加えて。 pytest_generate_tests
のconftest.py
を上書きし、そこでENV変数を設定するオプションがあります。
たとえば、次をconftest.py
に追加します。
import os
def pytest_generate_tests(metafunc):
os.environ['TEST_NAME'] = 'My super test name| Python version {}'.format(python_version)
このコードを使用すると、テストアプリケーションでTEST_NAME
ENV変数を取得できます。また、フィクスチャを作成することもできます。
import os
import pytest
@pytest.fixture
def the_name():
return os.environ.get('TEST_NAME')
また、このENV変数はアプリケーションで使用できます。
1.関数外の環境変数変数をロードしない場合、モンキーパッチを使用します。
import os
# success.py
def hello_world():
return os.environ["HELLO"]
# fail.py
global_ref = os.environ["HELLO"] # KeyError occurs this line because getting environment variable before monkeypatching
def hello_world():
return global_ref
# test.py
def test_hello_world(monkeypatch):
# Setup
envs = {
'HELLO': 'world'
}
monkeypatch.setattr(os, 'environ', envs)
# Test
result = hello_world()
# Verify
assert(result == 'world')
pytest.ini
ファイルを作成する必要がありましたおよび環境変数をpytest
コマンドに渡します。例えば:
Pytest.iniファイルでは、コマンドラインコマンドに渡すものによって上書きされるため、空の値を設定します。
[pytest]
MY_ENV_VAR=
実際の値が設定されたコマンドライン:
$ MY_ENV_VAR=something pytest -c pytest.ini -s tests/**
なぜこのように機能するのか分かりません。他の答えは役に立たなかったため、単なる試行錯誤の結果として機能することがわかりました。