为了支持替代记录格式,我开始开发自定义的RobotFramework侦听器。使用指南中的示例,我能够复制简单的pythonlistner示例。可以使用:
成功地运行此示例python.exe -m robot.run --listener C:temptiny.py -s Test02.Test C:tempTest02
由侦听器类生成的文件包含发生的不同事件,功能正常工作。
将以下行添加到类的__init__
方法时:
BuiltIn().get_variable_value('${SUITE SOURCE}')
收到以下响应:
failed: Creating instance failed: RobotNotRunningError: Cannot access execution context
Traceback (most recent call last):
File "C:temptiny.py", line 9, in __init__
print repr(BuiltIn().get_variables())
File "C:Python27libsite-packagesrobotlibrariesBuiltIn.py", line 940, in get_variables
return utils.NormalizedDict(self._variables.current, ignore='_')
File "C:Python27libsite-packagesrobotlibrariesBuiltIn.py", line 2669, in _variables
return self._namespace.variables
File "C:Python27libsite-packagesrobotlibrariesBuiltIn.py", line 2661, in _namespace
return self._context.namespace
File "C:Python27libsite-packagesrobotlibrariesBuiltIn.py", line 2656, in _context
raise RobotNotRunningError('Cannot access execution context')
==============================================================================
Test02
==============================================================================
Test02.Test
==============================================================================
Process Data File | PASS |
------------------------------------------------------------------------------
Test02.Test | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Test02 | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: C:tempoutput.xml
Log: C:templog.html
Report: C:tempreport.html
测试通过,但未生成文件。该结果已在Python 2.7和Robotframework 3.0和2.8.5上复制。这很奇怪,我需要一些帮助来进一步分析或(理想地)解决此问题。
由于Robotframework调用了Python类,因此我不确定如何继续调试此阶段,因此也可以随时在此提出建议。在任何情况下,我都会卡住,可以使用您的帮助。
您正在尝试在测试开始之前引用BuiltIn()
。这就是错误Cannot access execution context
的含义:测试尚未启动,因此没有执行上下文。简而言之,您无法在测试运行之前访问BuiltIn
库的方法。
您将不得不等待该语句,直到测试开始运行后。
例如:
class listener:
ROBOT_LISTENER_API_VERSION = 2
def start_suite(self, name, attrs):
self.suite_source = BuiltIn().get_variable_value('${SUITE SOURCE}')
但是,如果您需要的只是当前套件的来源,则该信息可在侦听器方法start_suite
中获得。
例如:
class MyListener:
ROBOT_LISTENER_API_VERSION = 2
def start_suite(self, name, attrs):
self.suite_source = attrs["source"]