passing command line argument to python-behave
Outdated answer, Currently supported itself as described by this answer.
No, it's not possible, because there is a parser
that is defined in configuration.py
file, and only allow defined options of it.
But if you want you can (by help of monkey patch !), just add your option same as other options to this parser
.
For do that, first create a file for example behave_run.py
and patch this parser
before running of 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()
And now if you run python behave_run.py --help
, you can see your new url
option:
$ python behave_run.py --help | grep url
-u URL, --url URL Address of your url
Now, you can run this behave_run.py
file like behave
file and pass your url argument too:
$ python behave_run.py --url http://google.com
And you can access this value of url
option with context.config.url
, for example in environment.py
file and then set it for use in other functions:
def before_all(context):
context.browser = webdriver.Firefox()
context.url = context.config.url
Note:
If you want to call python run_behave.py
as run_behave.py
from anywhere, add this line:
#!/usr/bin/env python
to first line of run_behave.py
and change mode of it to a executable file with chmod +x run_behave.py
and then copy this file to one location of your PATH
, for example in /usr/local/bin
with sudo mv run_behave.py /usr/local/bin/run_behave.py
The suggested solutions above were needed in the past.
behave-1.2.5 provides a "userdata" concept that allows the user to define its data:
behave -D browser=firefox ...
SEE ALSO: behave: userdata