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

时间:2014-12-22 13:00:33

标签: python testing robotframework

假设我在python中有一个类:

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

    def print_args(self):
        print arg1, arg2

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

Library   TestClass

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

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

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

2 个答案:

答案 0 :(得分:15)

要使用参数导入库,只需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中解释了这一点。

答案 1 :(得分:2)

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

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

File: resource_MakeMyClass.robot

*** Settings ***
Library             myClass

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

-----------------------------------------------------

File: myClass.py

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

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