python - 我怎样才能从 robotframework 中的 python 类获取自身对象

标签 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 导入机器人文件

测试.robot

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


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

我收到错误信息:

找不到名称为“Engine.api.api_keyword”的关键字。

最佳答案

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

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/

相关文章:

python - 在Python中,根据表达式和特定区间创建数组

ios - iOS 和 objective-c 中面向对象的代码重用

java - 通用接口(interface)的多种实现

jquery - 网络驱动程序异常 : Message: unknown error: jQuery is not defined error in robot framework

python - 了解 RobotFramework 变量

python - 无法在 jython 2.7.0 和 2.7.1b3 上安装 pip install robotsframework。错误为 "jython.exe: No module named pip."

Python Pandas 创建一长串数据框以进行连接

python - np.arange 然后 reshape

python - 如何在数据帧中的字符串中查找数字并使用千位分隔符重新格式化该数字?

c++ - 在 C++ 中从 C dll 生成对象