Robot Framework:从Python库代码访问Robot的全局变量?

Les*_*ong 14 python robotframework

我有一些设置类型的全局变量,我希望能够从Python代码访问.例如:

pybot --variable RESULTS_PATH:/wherever/this/points test.txt
Run Code Online (Sandbox Code Playgroud)

现在,我的模块logger.py文件需要知道要正确设置的results_path.

我知道我可以用变量初始化记录器,比如

***Settings***
Library  logger  ${RESULTS_PATH}
Run Code Online (Sandbox Code Playgroud)

然后在logger中我将传递results_path:

 def __init__(self, results_path):
   # Whatever
Run Code Online (Sandbox Code Playgroud)

但是,对我来说这样做的问题是我想从Python代码和测试用例中访问和使用记录器.因此,如果我以这种方式设置它,如果我想使用Python代码中的记录器,我遇到了需要results_path来正确初始化记录器的相同问题.

机器人框架库中是否有任何函数可以让我从Python代码中获取$ {RESULTS_PATH}的值?做这样的事情的正确方法是什么?

现在,我对该问题的解决方法是将RESULTS_PATH设置为环境变量.所以我有类似的东西:

运行如下:

RESULTS_PATH=/wherever/this/points pybot test.txt
Run Code Online (Sandbox Code Playgroud)

档案test.txt:

***Settings***
Library  logger
...
Run Code Online (Sandbox Code Playgroud)

档案logger.py:

results_path = os.environ["RESULTS_PATH"]
# Other set up stuff
Run Code Online (Sandbox Code Playgroud)

the*_*oom 19

您将需要使用rf的BuiltIn库,以供参考阅读此处的文档.这提供了内置于Robot Framework中的关键字,因此应该可靠地保持可用:

from robot.libraries.BuiltIn import BuiltIn
results_path = BuiltIn().get_variable_value("${RESULTS_PATH}")
Run Code Online (Sandbox Code Playgroud)

  • 我不知道此代码片段是否可以在没有pybot的情况下独立运行。假设它位于名称为result.py的python文件中。然后使用“ python result.py”运行此python文件。解释器将告诉错误“ raise RobotNotRunningError('无法访问执行上下文')”。我想知道如何像这样的代码做单元测试? (2认同)