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

use*_*505 18 python bdd python-behave

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

$behave -u "www.abc.com" 
Run Code Online (Sandbox Code Playgroud)

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

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

小智 25

过去需要上面提出的建议解决方案.

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

behave -D browser=firefox ...
Run Code Online (Sandbox Code Playgroud)

还请参见: 表现:userdata

  • 此答案中的参考链接需要更新:https://behave.readthedocs.io/en/latest/behave.html?highlight = user%20data#cmdoption-define (2认同)

Omi*_*aha 21

不,这是不可能的,因为有一个parser定义configuration.py文件中,并且只允许定义选择它.

但是如果你想要的话(通过猴子补丁的帮助!),只需添加与其他选项相同的选项即可parser.

为此,首先创建一个文件,然后在运行之前对其进行behave_run.py补丁:parserbehave

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()
Run Code Online (Sandbox Code Playgroud)

现在如果你跑python behave_run.py --help,你可以看到你的新url选择:

$ python behave_run.py --help | grep url
  -u URL, --url URL     Address of your url
Run Code Online (Sandbox Code Playgroud)

现在,您可以behave_run.pybehave文件一样运行此文件并传递您的url参数:

$ python behave_run.py --url http://google.com
Run Code Online (Sandbox Code Playgroud)

并且您可以访问此url选项的值context.config.url,例如在environment.py文件中,然后将其设置为在其他函数中使用:

def before_all(context):
    context.browser = webdriver.Firefox()
    context.url = context.config.url
Run Code Online (Sandbox Code Playgroud)

注意:

如果你想调用python run_behave.pyrun_behave.py任何地方,添加此行:

#!/usr/bin/env python

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

  • 我认为从`behave-1.2.5` @jenisys 答案应该是公认的 - 这是上述内容的干净实现。 (2认同)
  • ***这个答案已经过时***。继续滚动以查看@jenisys 发布的更好的执行此操作的方法。 (2认同)