如何用python在robot框架中导入和使用自定义类

2024-06-13 18:40:49 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个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中编写这个。有什么帮助吗?


Tags: 对象方法testselfobjectinitdef场景
2条回答

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

Library  TestClass  ARG1  ARG2

所以“导入”和实例化是一次性完成的。现在,需要技巧的是理解实例的范围。这在用户指南“Test Library Scope”一节中有很好的解释:

A new instance is created for every test case. [...] This is the default.

注意,如果要用不同的参数多次导入同一个库,并因此拥有不同的类实例,则在导入时必须命名它们:

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中解释。

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

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

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)

相关问题 更多 >