RobotFramework监控线程触发拆解

时间:2015-10-28 17:19:27

标签: multithreading robotframework

我正在尝试在机器人框架中设置一个监控线程来持续监控信号,并在读取某个信号时强行拆除。我有以下代码。

import signal
from datetime import datetime
from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn
import logging
import thread
import os
import sys
import time


def do_error_log_monitoring_new():
    def _monitor_log():
        time.sleep(5)
        # Monitor_Some_Signal
        builtin_lib.fatal_error(msg='Force Teardown')

    thread_logger = logging.getLogger('root')
    thread_logger.info("Started Fault Listener")
    builtin_lib = BuiltIn().get_library_instance('BuiltIn', all=True)
    thread.start_new_thread(_monitor_log, ())

我有builtin_lib = BuiltIn().get_library_instance('BuiltIn', all=True) all=True参数,用于返回所有库名称到实例的字典映射。但是我看到以下错误:

属性错误:' dict'对象没有属性' fatal_error'

此外,删除all=True参数允许函数通过并触发fatal_error,但是我注意到它不会触发主线程中的拆解,这是我打算做的。关于如何从辅助线程中的fatal_error()函数触发主线程中的拆解的任何建议?

1 个答案:

答案 0 :(得分:0)

您正在将builtin_lib设置为字典(BuiltIn().get_library_instances(..., all=True)的结果。正如错误消息所述,此字典没有fatal_error方法。

改变这个:

builtin_lib.fatal_error(msg='Force Teardown')

......对此:

BuiltIn().fatal_error(msg='Force Teardown')

如果您只需要对BuiltIn库的引用(而不是所有库的字典),则根本不需要调用get_library_instance,因为BuiltIn()已经返回了库的实例。