将命令行参数传递给 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/bin
和sudo 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的主要内容,如果未能解决你的问题,请参考以下文章