python - 基于关键字状态的侦听器在机器人框架中测试状态更新
问题描述
我设计了测试套件,我在其中调用侦听器以根据关键字失败日志和状态运行关键字。
机器人代码
*** Settings ***
Documentation Suite description
Library RunOnFailureLibrary.py
Test Template Run Keyword And Ignore Error
Suite Setup Set Keyword To Run On Failure Test Keyword key first
*** Test Cases ***
Test 1
log test
fail something went wrong
log test1
Test 2
pass execution test
Test 3
log test
fail something
log test1
*** Keywords ***
Test Keyword
[Arguments] ${arg1} ${arg2} ${arg3}
log ${arg1}
log ${arg2}
log ${arg3}
监听器代码:RunOnFailureLibrary.py
from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn
class RunOnFailureLibrary(object):
ROBOT_LISTENER_API_VERSION = 2
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
ROBOT_LIBRARY_VERSION = 0.1
def __init__(self):
self.ROBOT_LIBRARY_LISTENER = self
self.keyword_to_run_on_faiure = None
self.keyword_args = None
self.log_Error= None
def set_keyword_to_run_on_failure(self, keyword, *args):
# print("args",args)
if len(args) > 0:
self.keyword_args = args
self.keyword_to_run_on_faiure = keyword
def _log_message(self, message):
self.log_Error=message["message"]
def _end_keyword(self, name, attributes):
if attributes['status'] == 'FAIL' and self.log_Error=="something went wrong":
logger.info(f"Running keyword:'{self.keyword_to_run_on_faiure}' on failure!")
if attributes['args'] is None:
logger.info("This doesnt Looks like healing")
return False
else:
print(*self.keyword_args)
BuiltIn().run_keyword(self.keyword_to_run_on_faiure,self.keyword_args[0],attributes["args"][0],
self.keyword_args[1])
globals()[__name__] = RunOnFailureLibrary
正如您从机器人代码中看到的那样,如果它是并且日志错误是,我将Test Keyword
根据status
关键字调用。如果不满足此条件,我们将不会运行此关键字。fail
something went wrong
问题在于我在测试模板中使用Run Keyword And Ignore Error
以确保所有关键字都在测试用例中运行,因此无论状态如何,它都会被标记为可以理解的通过。
但是我想实现类似,如果 Test Keyword
调用了 listener 关键字,我想根据这个关键字的成功或失败来更新测试用例的状态。因此测试用例 1 结果状态必须基于Test Keyword
.
在测试用例 3 中,侦听器不会调用关键字,因为错误消息与条件不匹配,因此测试用例必须失败。但它会显示为通行证,因为Test Template
有什么办法,我们可以处理
解决方案
推荐阅读
- reactjs - 使用函数作为 React 道具的 TypeScript 错误?
- postgresql - 我应该使用 getter 还是使用操作和 SQL 语句在 vuex 中获取单个项目
- javascript - gulp 不会创建任何目录
- docker - 构建 Go 程序 Docker 镜像时从远程基础镜像指向本地依赖
- python-3.x - self._traceback = tf_stack.extract_stack()
- javascript - 如何在特定日期范围内获取每个星期一的日期时间范围
- kibana - 如何访问另一个脚本字段中的脚本字段值
- python - Geodjango:如何加载 .shp 文件并使用正确的 CRS 转换为 geojson?
- python - 如何在函数中定义空的 pandas DataFrame?
- powershell - Jenkins PowerShell:使用 Passthru 的 Start-Process 在 Jenkins 中执行但不在 PowerShell 中时返回不同的进程 ID