如何将 python 对象从机器人框架测试用例传递到关键字?

How to pass a python object from a robot framework test case to a keyword?

提问人:Kuelbiroe 提问时间:9/15/2023 更新时间:9/15/2023 访问量:89

问:

我是 Python 和机器人框架的新手。所以我可能会错过一些明显的东西。我有 .NET 编程经验,曾经使用实体/对象,我们将其用于数据库填充和 API 响应。我正在尝试对机器人框架中的测试做同样的事情,但遇到了以下问题。

我正在尝试将一个对象从机器人框架测试用例传递到一个关键字,尽管它说“[FAIL INSIDE] 正在解析变量 '${person.Id}' 失败:AttributeError: 'str' 对象没有属性 'Id'”

我在 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}

因此,在尝试将人员插入数据库时,它不起作用。当我将数据库中的插入人员更改为日志记录并尝试记录测试人员的姓名时,它正在工作。在调试过程中,我看到测试用例中的对象仍然是一个 person 对象。尽管当它被传递到资源文件时,该对象突然变成了一个字符串。

Python 对象 变量 参数 RobotFramework

评论

0赞 Sam Maksymyshyn 9/15/2023
您能否尝试从测试用例的最后一行中删除并检查增益?例如,行应该是 .`Run keywordsRun Keywords Insert person in database person=${testPerson}Insert person in database person=${testPerson}
0赞 Kuelbiroe 9/15/2023
只是做了,但不幸的是它没有帮助。弹出相同的错误消息。
0赞 Sam Maksymyshyn 9/15/2023
你看,你传递对象的方式是正确的。我什至在我这边执行了你的例子,它工作正常。我刚刚删除了“运行关键字”并修复了资源设置。所以,我的第一个猜测是某处留下了语法错误,但由于 StackO 代码格式化,它被隐藏了。我能请你在这里检查一下你自己的例子吗,它是否与你的真实代码相同?
1赞 Sam Maksymyshyn 9/15/2023
例如,这里多余的空格字符会导致将对象转换为字符串!注意等号后面的空格字符。person= ${testPerson}
0赞 Kuelbiroe 9/15/2023
感谢您的帮助!我能够让它工作,知道这段代码是正确的。没有额外的间距,但也许是一些隐藏的角色或其他东西?我找不到原因,但是当我在数据库中插入人的新关键字时,它确实起作用了。

答: 暂无答案