我如何从RobotFramework中的python类获取自我对象

时间:2018-10-10 15:35:03

标签: python oop robotframework

Engine.py将导入几个类作为自对象

Engine.py

from api import api
from cloud import cloud
class Engine(object):
    def __init__(self, env):
        session = dict()
        self.api = api.API(session)
        self.cloud= cloud.CLOUD(session)

api.py

class API(object):
    def __init__(self, session):
        self.session = session

    def api_keyword(self):
        return SOMETHING

我的问题是:

如何使用api.py和cloud.py下的关键字,并且仅将Engine.py导入机器人文件中

test.robot

*** Settings ***
Library         Engine.py  ${env}


*** Test Cases ***
python class test
    [Tags]    class
    Engine.api.api_keyword

我收到错误消息:

未找到名称为'Engine.api.api_keyword'的关键字。

1 个答案:

答案 0 :(得分:1)

Robot Framework仅将类方法映射到关键字;您的类Engine不会公开apicloud中的任何方法-它可能在内部使用它们,但没有将其定义为自己的方法。
因此,这是您的第一个解决方案-为您所需的所有情况创建包装方法:

def an_api_method(self):
    self.api.something()

现在,在这种情况下,您将拥有An API Method关键字。


解决方案二-使您的类继承其他两个:

class Engine(api, cloud):

,您的案件将有权使用所有的公开方法。
这涉及更多-您必须调用其构造函数(使用super()),并且如果您在您的类中保持状态,则必须适应该状态。即需要更多的代码更改。


第三个解决方案不需要对Enhine代码进行任何更改-但是,免责声明::我不知道它是否可以工作:)(我不在电脑前)。
它由两个调用组成-首先使用Get Library Instance(从内置库中)获取导入的库的对象,然后-Call Method

${ref}=     Get Library Instance    Engine
Call Method     $ref.api    api_keyword