Передача аргумента командной строки в python-behave

Я использую python-behave для тестирования BDD, мне нужно передать URL-адрес (например, www.abc.com) из командной строки.

$behave -u "www.abc.com" 

Чтобы достичь этого, я прочитал вести документацию, но не хватает материалов, а также объяснений, связанных с настройкой файла behave.ini. Я также не уверен, как файл behave.ini помогает мне передать аргумент.

Может кто-нибудь, пожалуйста, скажите мне, как я могу настроить параметры командной строки для поведения?

Ответ 1

Нет, это невозможно, потому что есть parser, который определен в файле configuration.py, и только разрешить определенные параметры.

Но если вы хотите, вы можете (с помощью патча обезьяны!) просто добавить свой вариант, как и другие варианты, к этому 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.py как run_behave.py из любого места, добавьте эту строку:

#!/usr/bin/env python

в первую строку run_behave.py и измените его в исполняемый файл с помощью chmod +x run_behave.py, а затем скопируйте этот файл в одно место вашего PATH, например, в /usr/local/bin с помощью sudo mv run_behave.py /usr/local/bin/run_behave.py

Ответ 2

Предлагаемые выше решения были необходимы в прошлом.

behave-1.2.5 предоставляет концепцию "userdata", которая позволяет пользователю определять свои данные:

behave -D browser=firefox ...

СМ. ТАКЖЕ: behave: userdata

Ответ 3

Альтернативой большому ответу Omid было бы установить переменные среды перед тем, как ваш вызов будет вести себя, например:

TESTURL="www.abc.com" behave

Есть предостережения для этого и некоторые примеры различных областей/постоянства переменных, которые вы определяете в некоторых ответах здесь

Ответ 4

Как сказал jenisys, способ передачи пользовательских данных:

behave -D NAME=VALUE

Способ получить к нему доступ из файлов шагов поведения:

context.config.userdata['NAME']