代码之家  ›  专栏  ›  技术社区  ›  Bob

如何从robotframework中的python类中获取self对象

  •  3
  • Bob  · 技术社区  · 6 年前

    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
    

    我的问题是:

    test.robot

    *** Settings ***
    Library         Engine.py  ${env}
    
    
    *** Test Cases ***
    python class test
        [Tags]    class
        Engine.api.api_keyword
    

    我收到错误信息:

    找不到名为“Engine.api.api\u keyword”的关键字。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Todor Minakov    6 年前

    Robot框架只将类方法映射到关键字;你的班级 Engine api cloud -它可能在内部使用它们,但没有将任何一个定义为自己的。
    因此,这里是您的第一个解决方案—为案例中需要的所有内容创建包装器方法:

    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
    
    推荐文章