我目前正在机器人框架中实现一些测试用例。断言检查整数是否有效。我想将其更改为枚举值。这是我的基本要求。
这是我正在使用的机器人文件(
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
其中
Status
是在 Wrapper.py
中定义的枚举类。此 Wrapper.py
包含在 TestCase.robot
中,作为此 robot文件中的
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)'
你们能帮忙解决这个问题吗?
有几件事 - 首先也是最重要的,您想要比较值,即
Enum.member_name.value
属性,正如已经指出的那样。不过,有一个解决方案 - 创建一个包装器(函数,在我的示例中,但可以是同级类的方法),它将返回目标值。示例Python:
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}
我不认为有一个完全符合你想要的解决方案——那就是能够写
${Status.OK}
。至少我在花了一段时间搞砸之后没有让它发挥作用。如果确实有解决办法,请在评论区告诉我。
另外,如果我只写:
from enum import Enum
class StatusEnum(Enum):
OK = 0
NOT_OK = 1
print(StatusEnum.OK)
它将打印出
StatusEnum.OK
,而不是您可能期望的 0
。您需要写 Status.OK.value
才能得到 0
。有关更多信息,请参见 docs。
所以,我能做到的最接近的是:
状态.py
from enum import Enum
from robot.api.deco import library, keyword
class StatusEnum(Enum):
OK = 0
NOT_OK = 1
@library
class Status:
@keyword
def status_ok(self):
return StatusEnum.OK.value
@keyword
def status_not_ok(self):
return StatusEnum.NOT_OK.value
在射频中:
*** Settings ***
Library Status.py
*** Test Cases ***
Check OK And NOT OK
${OK}= Status Ok
${NOT_OK}= Status Not Ok
Should Be Equal As Integers ${OK} 0
Should Be Equal As Integers ${NOT_OK} 1
但是老实说,当我可以这样做时,感觉太麻烦了:
*** Variables ***
${OK}= 0
${NOT_OK}= 1
*** Test Cases ***
Check OK And NOT OK
Should Be Equal As Integers ${OK} 0
Should Be Equal As Integers ${NOT_OK} 1
不知道这是否与某人相关,但我能够以这种方式使用枚举:
my_enum.py:
from enum import Enum
class MyEnum(Enum):
FOO = 1
BAR = 2
enum_suit.robot:
*** Settings ***
Variables my_enum.py
*** Test Cases ***
My Test
Check Enum
*** Keywords ***
Check Enum
Log To Console ${MyEnum.FOO.value} => 1