3

TLDR:

私はpytestのcliを拡張したいのですが、独自のAPIを使用してそれを行う方法を知っていますが、argparseモジュールを直接(または少なくともその構文)を使用して行う方法があるかどうか疑問に思っていました.追加したい cli 引数は、プログラムの別の部分の標準 argparse モジュールの構文で記述されています。

完全な質問:

私は約 20 の CLI (コマンド ライン インターフェイス) 引数/フラグ/オプションを持っています。これらは、標準の python モジュールで、pytest を呼び出してテストを実行するときに受け入れられるようにしたいと考えています。

argparse ドキュメントの例に示すような構文を使用して argparse モジュールを使用して、必要なすべての CLI 引数を受け入れる標準の python モジュールのセットアップが既にあります。

# standard_python_module.py

import argparse

# Initialize argument
parser = argparse.ArgumentParser(description='Program Description.')
parser.add_argument('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

# Parse/get value
args = parser.parse_args()
my_int = args.myint

ここconftest.pyで説明されているような構文を使用して、pytest で使用するカスタムの追加の CLI 引数を作成できることも知っています。

# conftest.py

import pytest

# Initialize argument
def pytest_addoption(parser):
    parser.addoption('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

# Parse/get value
def setup(pytestconfig):
    my_int = pytestconfig.getoption("my_int")

argparse と pytest を使用してカスタム CLI 引数を初期化/作成する場合、私が認識しているわずかな違いが 1 つだけあります。Argparse:

parser.add_argument('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

パイテスト:

parser.addoption('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

後で引数とそれぞれの値を解析/アクセスするには、もう少し違いがあります。pytest の 20 個のカスタム CLI 引数すべてを設定するために、ほぼ同じコードをもう一度繰り返す必要はありません。pytest は現在、舞台裏で argparse を使用していると思います。そのため、コードを再利用できる良い方法があるかどうか疑問に思っています。 pytest のカスタム CLI 引数を設定するための argparse モジュールを使用して CLI 引数を設定する方法を書きました。また、解析/アクセス コードを再利用する方法があれば、それはすばらしいことです。

argparse モジュールをconftest.py直接使用して、標準の python モジュールと同じ方法ですべてを実行しようとしましたが、pytest では正しく動作しませんでした。また、独自のカスタム CLI 引数を pytest に追加する魅力レポート モジュールも使用しています。上記の方法を使用すると、魅力カスタム CLI 引数が認識されなくなりました。おそらく、既存の argparse CLI 引数のセットを再定義/上書きしていたためです。 .

おそらく、pytest が使用する基になる argparse.ArgumentParser インスタンスにアクセスする方法はありますか?

また、pytest パーサーをラップし、基になる名前が変更された関数を単に呼び出す標準の argparse 関数と同じ名前の追加関数を追加するラッパー クラスを作成することも考えましたが、それを実装する方法が正確にはわかりません。後で引数を解析する問題には対処しません。

おそらく関連するリンク: pytest Config クラスのドキュメント pytest パーサー クラスのドキュメント

4

0 に答える 0