python - Robotframework 测试库中的上下文管理器
问题描述
我想将一个测试库嵌入到机器人框架中,该框架本身正在使用上下文管理器库来提供测试数据。
我想知道没有“准备就绪”的功能或 API (对吗?)。我喜欢避免使用 asetup
和 ateardown
关键字3,因为例如在错误情况下可以跳过 teardown 关键字 -更糟糕的是,它是锅炉代码。
在我看来更好的是测试(套件)结束时的自动解构。想象一下,很多测试套件都在使用这个库。在机器人文件中导入库或通过 cli 作为 ListenerInterface 导入库是有意义的,请参见下面的想法。
我正在考虑基于将上下文管理器和方法嵌入到/ api 调用的侦听器接口。(第一次在测试套件 setup/teardown 上,但将这种技术扩展为测试或关键字规模也可能是有意义的。)__enter__
__exit__
start_suite
end_suite
- 我是对的,有关于嵌入上下文管理器库的 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, data: TestSuiteModel, result: TestSuiteResult) -> None:
'''
Robot Library Listener interface v3.
'''
assert self.some_resource
self.some_resource.__exit__(None, None, None)
解决方案
推荐阅读
- angular - Angular HTTP 请求错误:“发布有效请求”
- wpf - 拦截 Xamarin 表单 WPF 中的后退按钮
- sql - Oracle - 禁用大规模更新
- lapack - 使用 Lapack 子程序执行 Fortran 文件(程序退出代码:127)
- windows - 从批处理文件显示气球通知
- sql-server - 如何汇总交易数据以进行报告?(SQL 服务器)
- javascript - 打开多个模式重用相同的代码
- azure - 如何使用 ARM 模板部署现有文件很少的 Azure VM?
- mysql - #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册
- .net - ClickOnce 发布以前的应用程序