将命令行参数传递给python-behave
我正在使用python-behave进行BDD测试,我需要从命令行传递一个网址(比如:www.abc.com)。
$behave -u "www.abc.com"
为了实现这个目标,我查阅了behave的文档,但是里面关于如何设置behave.ini文件的资料和解释都不够详细。我也不太确定behave.ini文件是如何帮助我传递参数的。
有没有人能告诉我如何为behave设置命令行参数呢?
4 个回答
除了Omid给出的很棒的答案,还有一种方法就是在你调用behave之前设置环境变量,像这样:
TESTURL="www.abc.com" behave
不过这样做有一些注意事项,还有一些关于你定义的变量在不同范围和持久性方面的例子,可以在这里找到。
正如jenisys所说,传递用户数据的方法是:
behave -D NAME=VALUE
而从behave步骤文件中访问这些数据的方法是:
context.config.userdata['NAME']
上面提到的解决方案在过去是需要的。
behave-1.2.5 引入了一个叫“userdata”的概念,允许用户定义自己的数据:
behave -D browser=firefox ...
另见: behave: userdata
过时的回答, 目前的支持情况可以参考这个 回答。
不,这个是不可能的,因为有一个 parser
是在 configuration.py
文件中 定义 的,而它只 允许 里面已经定义的 选项。
不过,如果你想的话,可以通过一种叫做猴子补丁的方式,像其他选项一样把你的选项添加到这个 parser
中。
要做到这一点,首先创建一个文件,比如叫 behave_run.py
,然后在运行 behave
之前补丁这个 parser
:
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
文件一样运行这个 behave_run.py
文件,并且也可以传入你的 url
参数:
$ python behave_run.py --url http://google.com
你可以通过 context.config.url
来访问这个 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
然后把它的模式改成可执行文件,使用 chmod +x run_behave.py
,接着把这个文件复制到你的 PATH
的某个位置,比如 /usr/local/bin
,使用 sudo mv run_behave.py /usr/local/bin/run_behave.py
。