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

Posted

技术标签:

【中文标题】将命令行参数传递给 python-behave【英文标题】:passing command line argument to python-behave 【发布时间】:2014-04-27 00:52:16 【问题描述】:

我正在使用 python-behave 进行 BDD 测试,我必须从命令行传递一个 URL(例如 www.abc.com)。

$behave -u "www.abc.com" 

为了实现这一点,我已经阅读了behave documentation,但是没有足够的材料以及设置behave.ini 文件的解释。我也不确定 behavior.ini 文件如何帮助我传递参数。

有人可以告诉我如何设置命令行参数的行为吗?

【问题讨论】:

我不明白你在问什么。运行behave 时,应在命令行上传递命令行参数。有什么不清楚的地方?您是否尝试从其他代码运行behave?您想在ini 文件中放入什么? 我只想从命令行传递一个 url,例如: $behave --url "www.abc.com" 并在方法 def before_all(context) 中将此 url 用于 environment.py 文件: context.browser = webdriver.Firefox() context.url = "www.abc.com" 【参考方案1】:

过去需要上述建议的解决方案。

behave-1.2.5 提供了一个“userdata”概念,允许用户定义其数据:

behave -D browser=firefox ...

另请参阅: behave: userdata

【讨论】:

@user3375505 恕我直言,这应该是公认的分析器 此答案中的参考链接需要更新:behave.readthedocs.io/en/latest/… 对此答案的一个权衡是您不能使用--help 来发现支持的参数。修补parser 会将参数和文档添加到--help。您建议如何记录或使用户数据选项可被发现?【参考方案2】:

过时的答案, 当前支持自身,如 answer 所述。

不,这是不可能的,因为在configuration.py 文件中有一个parser 即defined,并且只有allow 定义了其中的options。

但如果您愿意(借助猴子补丁!),只需将您的选项与其他选项相同添加到此 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

注意:

如果您想从任何地方以run_behave.py 的形式调用python run_behave.py,请添加以下行:

#!/usr/bin/env python

run_behave.py 的第一行并将其模式更改为带有chmod +x run_behave.py 的可执行文件,然后将此文件复制到PATH 的一个位置,例如在/usr/local/binsudo mv run_behave.py /usr/local/bin/run_behave.py

【讨论】:

我认为截至behave-1.2.5 @jenisys 的答案应该是公认的——这是对上述内容的干净实现。 这个答案已经过时了。继续滚动查看@jenisys 发布的更好的方法。【参考方案3】:

Omid 的最佳答案的替代方法是在调用行为之前设置环境变量,例如:

TESTURL="www.abc.com" behave

这样做有一些注意事项,以及您将在某些答案here中定义的变量的不同范围/持久性的一些示例

【讨论】:

如果你要走这条路,你还需要知道how to access environment variables in Python—TL;DR:os.environ['FOO']【参考方案4】:

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

behave -D NAME=VALUE

从行为步骤文件中访问它的方法是:

context.config.userdata['NAME']

【讨论】:

你知道它是否需要多个键值对吗? 嗨 Vreddhi!,是的,您可以在命令行中使用 -D 选项来传递尽可能多的用户数据。

以上是关于将命令行参数传递给 python-behave的主要内容,如果未能解决你的问题,请参考以下文章

将命令行参数传递给函数

如何将命令行参数传递给构建的 Mix Release

如何将命令行参数传递给 WinForms 应用程序?

如何将命令行参数传递给 c 程序

将命令行参数传递给 AWS Fargate 容器

将命令行参数传递给 QPython