python - 如何使用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.robot
as 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)'
各位大神能帮忙解决一下这个问题吗?
解决方案
有几件事 - 首先,您想要比较值,即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}
推荐阅读
- javascript - 更改 HTMLMediaElement.srcObject 的 create.objectURL
- java - 如何使用java通过REST api中的post请求将多个json文档发送到marklogic数据库?
- tsql - 转换为 SARGable 查询
- angular - 为应用程序中的每个孩子使用相同的解析器
- mysql - 如何在knex.js中运行带有输出返回的mysql存储过程
- c# - 如果行中有特定的单词,我想隐藏特定的单元格
- java - 修改 arraylist 中的一个对象会更改其副本
- elasticsearch - elasticsearch查询字符串(全文搜索)无法搜索
- c - 在结构中设置 void* 的第 n 个成员(以及结构名称使用与 typedef)
- java - 如何根据谷歌日历的回调识别授权用户