2016-06-21 5 views
0

У меня есть родительский класс, как показано ниже.Наследование класса Robot Framework

class ABC (object): 

    def __init__: 
     //Do something 

    def __del__(): 
    //Cleanup what you did 

Test Suites являются подклассами ABC.

Class A(ABC): 
    def __init__(): 

Class B(ABC): 
    def __init__(): 

Однако, когда я выполняю pybot -i A.robot B.robot. ABC создается и уничтожается, а затем снова создается и уничтожается. Как я могу заставить конструктор ABC вызываться один раз перед любым тестовым случаем и деструктором ABC, который вызывается в конце?

Я не хочу использовать init .robot , потому что я не хочу, чтобы связался с каркасом. Одним из требований является возможность подключить код из RBF и все еще использовать его.

Могу ли я сделать ABC одноэлементным?

+0

Ваш вопрос не имеет смысла. Обычно вы не пишете тестовые наборы в python, а параметр -i относится к тегам, а не к тестовым случаям или файлам роботов, и даже если вы пишете тестовые примеры на python, вы не назовете файлы с суффиксом .robot. Вы спрашиваете о _suites_, или вы действительно спрашиваете о ключевом слове robot _libraries_? –

ответ

0

Я не уверен, что я понимаю, что вы хотите сделать, похоже, вы хотите переопределить вещи больше, чем использовать синглтон.

Если вы инициируете 2 объекта, вы инициируете 2 родителя.

a = A() # ABC 1 
b = B() # ABC 2 

Но, может быть, что вы хотите что-то вроде этого:

abc = ABC() 
a = A() 
a.ABC = abc 
b = B() 
b.ABC = abc 

или изменение __init__() к __init__(abc)

abc = ABC() 
a = A(abc) 
b = B(abc) 
0

Как написано у вас вопрос не имеет особого смысла, так как вы не может писать тестовые наборы в python. Я собираюсь догадаться, что вы спрашиваете о библиотеках ключевых слов.

Если вы хотите создать экземпляр библиотеки ключевых слов, когда пакет будет запущен и уничтожен после выполнения всех тестов, вам необходимо установить область библиотеки. С направляющей секции пользователя на library scope:

Тестовые библиотеки могут контролировать, когда новые библиотеки создаются с помощью атрибута ROBOT_LIBRARY_SCOPE класса . Этот атрибут должен быть строкой и может иметь следующие три значения:

Тестовый случай новый экземпляр создается для каждого тестового случая. Возможная установка набора и удаление пакета еще один экземпляр. Это значение по умолчанию.

TEST SUITE Для каждого набора тестов создается новый экземпляр. В тестовых наборах самого низкого уровня, созданных из файлов тестовых случаев и содержащих тестовые примеры , есть экземпляры собственных и высших уровней, все получают свои собственные экземпляры для их возможных настроек и разрывов.

GLOBAL Только один экземпляр создается во время всего выполнения теста и используется всеми тестовыми примерами и наборами тестов. Библиотеки, созданные из модулей, всегда являются глобальными.

Вот пример с ключевыми словами библиотеки классов на основе:

class ExampleLibrary: 

    ROBOT_LIBRARY_SCOPE = 'TEST SUITE' 

    def __init__(self): 
     // do something 

    def __del__(self): 
     // do something 

Важно: питон не гарантирует, что метод __del__ работает. Если библиотека примеров уничтожается непосредственно перед выходом интерпретатора, объект может быть уничтожен без вызова __del__ (что, я думаю, может быть правдой о библиотеках роботов).

+0

Да, я создал ABC как GLOBAL и другие тестовые примеры как TES_SUITE. Я ожидаю, что порядок exec будет следующим: ABC__init __() -> A__init() __ -> A__del __() -> B__init __() -> B__del() -> __ ABC__del() __. Но бывает ABC__init __() -> ABC__del __() -> ABC__init() -> __ A__init __() -> A() __ del __--> ABC__del __(). Не знаю, почему ABC__del __() вызывается сразу после __init __(). – kgunjikar

+0

@kgunjikar: они не похожи на случаи проверки робота. Вы уверены, что говорите о платформе приемочного тестирования с сайта robotframework.org? Это помогло бы, если бы вы перестали говорить в абстрактных терминах и оформили действительный исполняемый код. –

Смежные вопросы