Я использую 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']