Robot Framework中Python对象传递到关键字变为字符串报错求助
问题:Robot Framework中自定义Python对象传递后变为字符串导致属性访问失败
有.NET编程经验,习惯用实体/对象处理数据库操作和API响应,刚接触Python和Robot Framework。在测试中尝试将自定义Person对象从测试用例传递到关键字时,报错:
[FAIL INSIDE] Resolving variable '${person.Id}' failed: AttributeError: 'str' object has no attribute 'Id'
调试发现测试用例中对象仍是Person类型,但传到资源文件后变成了字符串。
相关代码
person.py 文件
from robot.libraries.BuiltIn import BuiltIn class person(object): #ROBOT_LIBRARY_SCOPE = 'GLOBAL' def __init__(self): self.Id='myId' self.Name='Jack' def set_id(self, Id): self.Id=Id def set_name(self, Name): self.Name=Name return self def get_a_person(self): return self
资源文件(.resource)
*** Settings *** Resource Library person.py *** Keywords *** Get Person Entity ${person} Get A Person RETURN ${person} Insert person in database [Arguments] ${person} Execute Sql String INSERT INTO [Database].[dbo].[Person] (Id,Name) VALUES ('${person.Id}', '${person.Name}');
测试用例文件(.robot)
*** Settings *** Resource Library person.py *** Test Cases *** 1. My Example Test ${testPerson} Get Person Entity ${testPerson} Set Name Adam Run Keywords Insert person in database person=${testPerson}
解决方案
- 问题核心:使用
Run Keywords传递命名参数时,Robot Framework会默认将对象序列化为字符串,导致类型丢失。 - 方案1:直接调用关键字
去掉Run Keywords,直接调用目标关键字,对象类型会被正确保留:1. My Example Test ${testPerson} Get Person Entity ${testPerson} Set Name Adam Insert person in database ${testPerson} - 方案2:修正Run Keywords的参数写法
如果必须使用Run Keywords,避免命名参数写法,直接传递变量:
若需要传递命名参数,确保使用Robot Framework 3.2+版本,该版本优化了对象类型参数的传递逻辑。Run Keywords Insert person in database ${testPerson} - 额外优化建议
- 遵循Python命名规范,将类名改为
Person(大驼峰格式) - 取消注释
ROBOT_LIBRARY_SCOPE = 'GLOBAL',确保库实例全局唯一,避免重复初始化引发的意外问题
- 遵循Python命名规范,将类名改为
内容的提问来源于stack exchange,提问作者Kuelbiroe
相关产品推荐
相关产品推荐

