如何使用python在机器人框架中导入和使用用户定义的类

Posted

技术标签:

【中文标题】如何使用python在机器人框架中导入和使用用户定义的类【英文标题】:How to import and use user defined classes in robot framework with python 【发布时间】:2015-02-20 14:02:22 【问题描述】:

假设我在 python 中有一个类:

class TestClass(object):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    def print_args(self):
        print arg1, arg2

我想使用robotframework 来实现我的测试场景。我想从上面的类中创建一个实例并调用它的方法。怎么做?我知道如何导入库;应该是这样的:

Library   TestClass

我不知道如何从这个类初始化一个对象并通过这个对象调用类方法。如果我想用python实现它,我会写一些这样的代码:

import TestClass
test = TestClass('ARG1', 'ARG2')
test.print_args()

现在,我想知道如何在robotframework 中写这个。有什么帮助吗?

【问题讨论】:

【参考方案1】:

要导入带参数的库,只需add them after the library name:

Library  TestClass  ARG1  ARG2

所以“导入”和实例化是一次性完成的。现在,可能比较棘手的是了解您的实例的范围。这在用户指南部分“Test Library Scope”中有很好的解释:

为每个测试用例创建一个新实例。 [...] 这是默认设置。

请注意,如果您想使用不同的参数多次导入同一个库,从而有不同的类实例,则必须在导入时为它们命名:

Library  TestClass  ARG1  ARG2  WITH NAME  First_lib
Library  TestClass  ARG3  ARG4  WITH NAME  Second_lib

然后在您的测试中,您必须为关键字添加前缀:

*** Test Cases ***
MyTest
    First_lib.mykeyword  foo  bar
    Second_lib.mykeyword  john  doe

this section of the User Guide 对此进行了解释。

【讨论】:

感谢您的回复。我真的了解如何使用我的课程。但是当我阅读文档时,我发现每个类只能有一个实例;因为框架没有为实例保存任何 ID 或名称,我只是调用类的方法而不引用任何内容,我做对了吗? 实际上可以有多个实例。我编辑了我的答案来解决这一点。 感谢您的全面回答。【参考方案2】:

我已经能够按需实例化 python 类(即不仅仅是通过库技术硬编码的参数)。

我使用辅助方法来创建类。我无法让 Robot 脚本直接调用类构造函数,但是它可以在 Python 中调用函数,因此我们可以通过提供基于函数的接口来创建类或命名元组:

文件:resource_MakeMyClass.robot

*** Settings ***
Library             myClass

*** Keywords ***
_MakeMyClass
    [Arguments]    $arg1    $arg2
    $result =    makeMyClass    $arg1    $arg2
    [Return]       $result

文件:myClass.py

class MyClass(object):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

def makeMyClass(arg1, arg2):
    return MyClass(arg1, arg2)

【讨论】:

如何在测试用例中使用它?我尝试了$c = _MakeMyClass z m,它给了我Maximum limit of started keywords exceeded. 错误。似乎陷入了无限循环。

以上是关于如何使用python在机器人框架中导入和使用用户定义的类的主要内容,如果未能解决你的问题,请参考以下文章

在模板内的 vuejs 组件中导入和使用类

如何在 django 项目中导入和显示 csv 文件

如何在 Vue 单文件组件中导入和使用图片?

如何在 material-ui 主题中导入和使用自定义字体?

如何在 Aurelia 中导入和使用 RobinHerbots 的 Inputmask

在 python lib 中导入和裁剪 jpeg 的快速方法