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 导入机器人文件
测试.robot
*** Settings ***
Library Engine.py ${env}
*** Test Cases ***
python class test
[Tags] class
Engine.api.api_keyword
我收到错误信息:
找不到名称为“Engine.api.api_keyword”的关键字。
最佳答案
Robot Framework 仅将类方法映射到关键字;您的类 Engine
没有公开来自 api
和 cloud
的任何方法 - 它可能在内部使用它们,但没有定义任何方法作为它自己的。
所以这是您的第一个解决方案 - 为您在案例中需要的所有内容创建包装器方法:
def an_api_method(self):
self.api.something()
现在您可以在案例中使用 An API Method
关键字。
解决方案二 - 让您的类继承其他两个:
class Engine(api, cloud):
,您的案例将可以访问所有它们的公共(public)方法。
这一个涉及更多 - 你必须调用它们的构造函数(使用 super()
),如果你在你的类中维护一个状态,你将不得不适应那个。 IE。需要进行更彻底的代码更改。
第三个解决方案不需要对 Enhine
代码进行任何更改 - 但是,免责声明:我不知道它是否有效:)(我不是在电脑上)。
它包含两个调用 - 首先使用 Get Library Instance
获取导入库的对象(从 Builtin 库),然后 - Call Method
:
${ref}= Get Library Instance Engine
Call Method $ref.api api_keyword
关于python - 我怎样才能从 robotframework 中的 python 类获取自身对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52743882/