【问题标题】:With robotframework, is it possible to do something after the test was over?使用robotframework,是否可以在测试结束后做点什么?
【发布时间】:2017-03-18 20:13:27
【问题描述】:

我想通过电子邮件将Robot Framework的测试报告发送给例如领导者。 最近做了一个send email library,用在robotframework的Suite Teardown中,但是很快,我发现执行了Suite Teardown后生成了测试报告,所以无法获取报告。 我想知道套件结束后有没有办法在机器人框架中做类似的事情?

【问题讨论】:

    标签: python robotframework


    【解决方案1】:

    虽然@Jan 是正确的,使用监听器的close event 可以让你这样做,但真正的问题是你是否应该这样做。在我看来,这不再与测试自动化有关,更多的是与编排有关。像这样的功能通常会随着时间的推移而扩展,然后这肯定是放置它的错误位置。

    这就是为什么我建议查看具有这种开箱即用的电子邮件功能的 Jenkins(或任何其他 CI,如 TravisCI、Bamboo 等)。随着时间的推移,这将是一个更好的可维护解决方案,并且对于未来的功能更加灵活。

    对于 Robot Framework,存在一个特定的 plugin

    【讨论】:

    • 我只能说我非常同意。谢谢@AKootstra
    • 谢谢!我公司还没有CI系统,但我会记住你的建议。
    • 关键是您将这两个功能分开。例如,通过让两个 python 或命令行脚本与单个编排脚本分开启动。这将使您今天拥有一个简单的解决方案,但当您想要转向像 Jenkins 这样的(开源)CI 系统时就不会那么头疼了。
    【解决方案2】:

    我会让您提到的库成为机器人框架库侦听器,如下所述:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#test-libraries-as-listeners

    在调用close listeners 方法时,带有自动变量${REPORT_FILE} 的上下文已经消失,您需要将其组合起来,例如使用这样的库构造函数:

    class YourLibrary(object):
        ROBOT_LISTENER_API_VERSION = 2
    
        def __init__(self):
            self.ROBOT_LIBRARY_LISTENER = self
            self._path_to_report = BuiltIn().get_variable_value('${REPORT_FILE}')
    
        def _close(self):
            self.call_your_method_to_send_the_report(self._path_to_report)
    

    注意:使用监听器版本 2 或 3 无关紧要。

    【讨论】:

    • 感谢您的回答,我会试试的!
    • 亲爱的 Jan,我试过了,但报告是在执行 _CLOSE() 方法后生成的。
    • 这对我来说听起来很奇怪。我试图将文件复制到另一个路径(来自 OperatingSystem lib 的copy file)并且它有效。
    • 我解决了!在_CLOSE()方法中创建一个线程,在线程中调用发送邮件方法,为了正常工作,在线程中添加一个sleep。感谢您的帮助!
    猜你喜欢
    • 2016-08-28
    • 2014-06-22
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多