将命令行参数传递给python-behave

22 投票
4 回答
17478 浏览
提问于 2025-04-17 23:06

我正在使用python-behave进行BDD测试,我需要从命令行传递一个网址(比如:www.abc.com)。

$behave -u "www.abc.com" 

为了实现这个目标,我查阅了behave的文档,但是里面关于如何设置behave.ini文件的资料和解释都不够详细。我也不太确定behave.ini文件是如何帮助我传递参数的。

有没有人能告诉我如何为behave设置命令行参数呢?

4 个回答

2

除了Omid给出的很棒的答案,还有一种方法就是在你调用behave之前设置环境变量,像这样:

TESTURL="www.abc.com" behave

不过这样做有一些注意事项,还有一些关于你定义的变量在不同范围和持久性方面的例子,可以在这里找到。

5

正如jenisys所说,传递用户数据的方法是:

behave -D NAME=VALUE

而从behave步骤文件中访问这些数据的方法是:

context.config.userdata['NAME']
34

上面提到的解决方案在过去是需要的。

behave-1.2.5 引入了一个叫“userdata”的概念,允许用户定义自己的数据:

behave -D browser=firefox ...

另见: behave: userdata

22

过时的回答, 目前的支持情况可以参考这个 回答

不,这个是不可能的,因为有一个 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

撰写回答