如何解决Robotframework 测试库中的上下文管理器
我想将 test library 嵌入到机器人框架中,该框架本身使用 a context manager library 来提供测试数据。
我想知道没有“随时可用”的功能或 API(,我说得对吗?)。我喜欢避免使用 setup
和 teardown
关键字 3,因为例如在错误情况下,可以跳过拆卸关键字 - 更糟糕的是,它是锅炉代码。
在我看来更好的是测试(套件)结束时的自动解构。想象一下,很多测试套件都在使用这个库。在机器人文件中导入库或通过 cli 作为 ListenerInterface 导入库是有意义的,请参阅下面的想法。
我曾考虑基于将上下文管理器 __enter__
和 __exit__
方法嵌入到 start_suite
/end_suite
api 调用的 Listener Interface。 (这是第一次测试套件设置/拆卸,但也可以将此技术扩展到测试或关键字规模。)
- 我说得对吗,有关于嵌入 a context manager library 库的 API 想法(粘在机器人
setup
/teardown
模型中)? (我只有机会明确定义关键字。) - 是否有一些(其他)想法或技术可以将上下文管理器库嵌入到测试库中?(可能与问题 1 相关,也可能与 github 问题有关。)
这个想法会奏效(对于可能面临同样问题的人):
from typing import ContextManager
from robot.running.model import TestSuite as TestSuiteModel
from robot.result.model import TestSuite as TestSuiteResult
@library(scope='Test Suite',doc_format='reST')
class MyResourceLib:
'''
User Test Library making use of context manager: `MyDBContextmanger`
'''
ROBOT_LISTENER_API_VERSION = 3
class __init__(self,some_resource: Optional[MyDBContextmanger] = None):
self.ROBOT_LIBRARY_LISTENER = self
if not some_resource:
self.some_resource = MyDBContextmanger()
else:
self.some_resource = some_resource
def start_suite(self,data: TestSuiteModel,result: TestSuiteResult) -> None:
'''
Robot Library Listener interface v3.
'''
assert self.some_resource
self.some_resource.__enter__()
def end_suite(self,result: TestSuiteResult) -> None:
'''
Robot Library Listener interface v3.
'''
assert self.some_resource
self.some_resource.__exit__(None,None,None)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。