2016-11-30 16 views
9

私はコードを持っており、ターミナルからの名前のような引数を渡す必要があります。 ここに私のコードと引数を渡す方法です。私はエラーが発生しています。ファイルが見つかりません。私は理解できません。pytestで引数を渡す方法

私はターミナルでコマンドを試してみました

pytest <filename>.py -almonds 私はofficial documentによると「アーモンド」

@pytest.mark.parametrize("name") 
def print_name(name): 
    print ("Displaying name: %s" % name) 

答えて

2

として印刷名を取得する必要があり、マークデコレータは以下のようになります。

@pytest.mark.parametrize("arg1", ["StackOverflow"]) 
def test_mark_arg1(arg1): 
    assert arg1 == "StackOverflow" #Success 
    assert arg1 == "ServerFault" #Failed 

実行

python -m pytest <filename>.py 
  • 注1:関数名は
  • test_注2で開始する必要がありますので、直接実行し、pytestがstdout (print)リダイレクトするstdoutが上の任意の結果を表示することができなくなります画面。また、テストケースでは、関数に結果を出力する必要はありません。
  • 注3:pytestはあなたが本当に外に設定可能な引数を取得したい場合は、あなたがあなたのスクリプト内でこれを実装する必要があり、直接

をsys.argvのを取得することができないのpythonが運営するモジュールであり、 。

@pytest.mark.unit 
def test_print_name(name): 
    print ("Displaying name: %s" % name) 

conftest.pyで:@pytest.mark.parametrizeを使用していない、あなたのpytest試験で

with open("arguments.txt") as f: 
    args = f.read().splitlines() 
... 
@pytest.mark.parametrize("arg1", args) 
... 
6

(例えば、ファイルの内容をロードする)

def pytest_addoption(parser): 
    parser.addoption("--name", action="store", default="default name") 


def pytest_generate_tests(metafunc): 
    # This is called for every test. Only get/set command line arguments 
    # if the argument is specified in the list of test "fixturenames". 
    option_value = metafunc.config.option.name 
    if 'name' in metafunc.fixturenames and option_value is not None: 
     metafunc.parametrize("name", [option_value]) 

次に、あなたから実行することができますコマンドライン引数付きコマンドライン:

pytest -s tests/my_test_module.py --name abc 
関連する問題