【问题标题】:How to import and use user defined classes in robot framework with python如何使用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 中写这个。有什么帮助吗?

【问题讨论】:

    标签: python testing 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. 错误。似乎陷入了无限循环。
    猜你喜欢
    • 2017-07-25
    • 2018-04-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多