首页 > 解决方案 > 如何使用python在机器人框架中导入和使用用户定义的枚举类

问题描述

我目前正在机器人框架中实现一些测试用例。断言检查整数是否有效。我想将其更改为枚举值。这是我的基本要求。

这是我正在使用的机器人文件(TestCase.robot

*** Settings ***
Library           Wrapper.py

*** Test Cases ***
TC_01
    ${rv}    Set Variable    ${0}    #${}
    Should Be Equal As Integers    ${rv}    0

在该行中,我想将该整数转换为某个枚举值Should Be Equal As Integers ${rv} 0,而不是这个整数值断言。0

像这样的东西。

Should Be Equal As Integers    ${rv}    Status.OK

whereStatus是一个枚举类,它在Wrapper.py. 这Wrapper.py包含在此机器人文件中的TestCase.robotas a中。我可以在此处粘贴该枚举的内容Library

class Status(Enum):
    OK = 0
    NOT_OK = 1

这样我们就可以使它更具可读性,而不是整数。当我这样给予时,我收到错误

'(Status.OK)' cannot be converted to an integer: ValueError: invalid literal for int() with base 10: '(status.ok)'

各位大神能帮忙解决一下这个问题吗?

标签: pythonenumsrobotframework

解决方案


有几件事 - 首先,您想要比较值,即Enum.member_name.value属性,正如已经指出的那样。
其他的东西——python Enum 有点特殊,它没有被实例化——这会阻止你导入一个具有相同名称的模块(直接引用它)——Robot Framework 在这些导入中创建一个类的实例。因此无法直接访问该值。

不过,有一个解决方案 - 制作一个包装器(函数,在我的示例中,但可以是兄弟类的方法),它将返回目标值。示例蟒蛇:

def return_enum_value(member):
    return Status[member].value


class Status(Enum):
    OK = 0
    NOT_OK = 1

和射频用法:

${the value}=    Return Enum Value  OK
Should Be Equal As Integers         0    ${the value}

推荐阅读