微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Robotframework 测试库中的上下文管理器

如何解决Robotframework 测试库中的上下文管理器

我想将 test library 嵌入到机器人框架中,该框架本身使用 a context manager library 来提供测试数据。

我想知道没有“随时可用”的功能或 API(,我说得对吗?)。我喜欢避免使用 setupteardown 关键字 3,因为例如在错误情况下,可以跳过拆卸关键字 - 更糟糕的是,它是锅炉代码

在我看来更好的是测试(套件)结束时的自动解构。想象一下,很多测试套件都在使用这个库。在机器人文件中导入库或通过 cli 作为 ListenerInterface 导入库是有意义的,请参阅下面的想法。

我曾考虑基于将上下文管理器 __enter____exit__ 方法嵌入到 start_suite/end_suite api 调用Listener Interface。 (这是第一次测试套件设置/拆卸,但也可以将此技术扩展到测试或关键字规模。)

  1. 我说得对吗,有关于嵌入 a context manager library 库的 API 想法(粘在机器人 setup/teardown 模型中)? (我只有机会明确定义关键字。)
  2. 是否有一些(其他)想法或技术可以将上下文管理器库嵌入到测试库中?(可能与问题 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?