Как я могу получить объект self из класса Python в роботизированной конструкции - PullRequest
0 голосов
/ 10 октября 2018

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 голосов
/ 06 февраля 2019

Robot Framework отображает только ключевые методы класса на ключевые слова;ваш класс Engine не предоставляет никаких методов из api и cloud - он, вероятно, использует их внутренне, но не определяет их как свои собственные.
Итак, вот ваше первое решение - создайте методы-оболочки для всех васнужно в случаях:

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

И теперь в вашем распоряжении будет ключевое слово An API Method.


Решение второе - заставить ваш класс наследовать другойдва:

class Engine(api, cloud):

, и ваши дела будут иметь доступ к всем их открытым методам.
Этот более сложный - вам придется вызывать их конструкторы (с помощью super()), и если вы поддерживаете состояние в вашем классе, вы должны будете приспособиться к этому.Т.е. необходимы более радикальные изменения кода.


Третье решение не требует каких-либо изменений в коде Enhine - но отказ от ответственности: Я не знаю, будет ли этоработать :) (я не за компьютером).
Он состоит из двух вызовов - сначала использовать Get Library Instance, чтобы получить объект вашей импортированной библиотеки (из библиотеки Builtin), а затем - Call Method:

${ref}=     Get Library Instance    Engine
Call Method     $ref.api    api_keyword
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...