2016-10-28 8 views
13

私のテストのリストを得るためにpytest --collect-onlyを実行すると、<Function: test_whatever>のような形式で取得されます。しかし、pytest -k ...を使用して特定のテストを実行する場合は、テストの「アドレス」をfoo::test_whateverの形式で入力する必要があります。 -kと同じ形式ですべてのテストのすべてのアドレスのリストを取得することは可能ですか?Pytest:すべてのテストのアドレスを取得する

+0

は、なぜあなたは、おそらくそれが必要なのでしょうか? '--collect-only'があなたに与えるすべてのテストを実行するには、パラメータなしで' pytest'を実行するだけで十分です。そして、テストのセットが変更された場合、あなたのリストはそれがどんなフォーマットであっても古くなります。 –

答えて

2

conftest.pyでは、あなたが収集したテスト「アイテム」についての情報を印刷する「コレクション」のフックをオーバーライドすることができます

をあなたが導入することができる:あなたの例のために(すべてのDEFSはfoo::が付けていると仮定。 (--collectのみのような)独自のコマンドラインオプションこのオプションを指定した場合、テスト(あなたが好きな方のように)の項目と出口を印刷

以下のサンプルconftest.py(ローカルテスト):。。

import pytest 

def pytest_addoption(parser): 
    parser.addoption("--my_test_dump", action="store", default=None, 
     help="Print test items in my custom format") 

def pytest_collection_finish(session): 
    if session.config.option.my_test_dump is not None: 
     for item in session.items: 
      print('{}::{}'.format(item.fspath, item.name)) 
     pytest.exit('Done!') 
pytestフックの詳細については

、以下を参照してください

http://doc.pytest.org/en/latest/_modules/_pytest/hookspec.html

+0

'pytest_collection_finish'は' pytest_collectreport'とどうやって比較されますか?後者は[公式プラグインのドキュメント](http://doc.pytest.org/en/latest/writing_plugins.html)にリストされていますが、前者はそうではありません。我々はどちらか一方を好むべきか、または機能は根本的に異なっているのでしょうか? – ravron

2

使用方法は指定したとおりではありません。ドキュメントから: http://doc.pytest.org/en/latest/usage.html

pytest -k stringexpr # only run tests with names that match the 
         # "string expression", e.g. "MyClass and not method" 
         # will select TestMyClass.test_something 
         # but not TestMyClass.test_method_simple 

ので、あなたが「-k」に合格するために必要なもの(あなたはこれらの文字列間の論理演算子を使用することができます)確認したいすべての呼び出し可能な関数に含まれる文字列です。

pytest -k "foo::" 
関連する問題