web-dev-qa-db-ja.com

コマンドライン引数をpython-behaveに渡す

BDDテストにpython-behaveを使用していますが、コマンドラインからURL(www.abc.comなど)を渡す必要があります。

$behave -u "www.abc.com" 

これを実現するために、 behaveドキュメント を読みましたが、behave.iniファイルを設定するための十分な資料と説明がありません。また、behave.iniファイルが引数の受け渡しにどのように役立つかわかりません。

誰かが動作するコマンドラインパラメータを設定する方法を教えてもらえますか?

19
user3375505

いいえ、できません。configuration.pyファイルに 定義済み であるparserがあり、 許可 定義済み オプション)のみであるためです。 その。

ただし、必要に応じて(モンキーパッチを使用して!)、このparserに他のオプションと同じオプションを追加するだけです。

そのためには、まずbehave_run.pyなどのファイルを作成し、parserを実行する前にこのbehaveにパッチを適用します。

from behave import configuration
from behave import __main__

# Adding my wanted option to parser.
configuration.parser.add_argument('-u', '--url', help="Address of your url")

# command that run behave.
__main__.main()

そして今、python behave_run.py --helpを実行すると、新しいurlオプションが表示されます。

$ python behave_run.py --help | grep url
  -u URL, --url URL     Address of your url

これで、このbehave_run.pyファイルをbehaveファイルのように実行し、url引数も渡すことができます。

$ python behave_run.py --url http://google.com

また、このurlオプションの値にcontext.config.urlを使用して、たとえばenvironment.pyファイルでアクセスし、他の関数で使用できるように設定できます。

def before_all(context):
    context.browser = webdriver.Firefox()
    context.url = context.config.url

注:

どこからでもpython run_behave.pyrun_behave.pyとして呼び出す場合は、次の行を追加します。

#!/usr/bin/env python

run_behave.pyの最初の行に移動し、そのモードをchmod +x run_behave.pyの実行可能ファイルに変更してから、このファイルをPATHの1つの場所、たとえば/usr/local/binにコピーします。 Sudo mv run_behave.py /usr/local/bin/run_behave.py

20
Omid Raha

上記の提案された解決策は過去に必要でした。

behave-1.2.5は、ユーザーがデータを定義できるようにする「userdata」の概念を提供します。

behave -D browser=firefox ...

関連項目:動作:userdata

24
jenisys

Omidによるすばらしい答えの代わりに、次のような動作を呼び出す前に環境変数を設定することもできます。

TESTURL="www.abc.com" behave

これを行うには注意点があり、いくつかの回答で定義する変数のさまざまなスコープ/永続性の例がいくつかあります ここ

2
ljs.dev

Jenisysが言ったように、ユーザーデータを渡す方法は次のとおりです。

behave -D NAME=VALUE

ビヘイビアステップファイルからアクセスする方法は次のとおりです。

context.config.userdata['NAME']