Библиотека Robot Framework Динамический импорт не остается глобальным - PullRequest
0 голосов
/ 04 октября 2018

Немного предыстории

Я использую Robot Framework с Python, чтобы создать небольшую платформу для автоматизации тестирования.У меня есть несколько разных библиотек;пара привязана к конкретному приложению, а у одного есть ключевые слова, которые я хотел бы всегда иметь в наличии.Эта всегда доступная библиотека является моей общей библиотекой, и мне нужно, чтобы она была доступна из функций других моих библиотек.

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

try:
    self.common_library = BuiltIn().get_library_instance("my_common_lib")
except RuntimeError:
    BuiltIn().import_library("my_common_lib", True)
    self.common_library = BuiltIn().get_library_instance("my_common_lib")

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

Проблемазаключается в том, что при последовательном запуске нескольких тестов робота общая библиотека исчезает.У меня есть несколько скриптов Robot в каталоге и запускаю «robot * .robot».В каждом тесте я запускаю ключевое слово из общей библиотеки.Я никогда не импортирую общую библиотеку в таблицу настроек, так как она должна автоматически импортироваться другими библиотеками, как описано выше.В первом тесте общая библиотека существует, и ключевые слова в ней работают нормально.Во всех следующих тестах я получаю ключевое слово not found error.Когда я печатаю результаты BuiltIn().get_library_instance(all=True), я вижу, что, хотя моя библиотека для конкретного приложения все еще загружена, общая библиотека больше не существует.

Проблема

Все мои библиотеки имеют ROBOT_LIBRARY_SCOPE = 'GLOBAL' в них, включая общую библиотеку.Моя общая библиотека динамически импортируется через BuiltIn и имеет глобальную область видимости, но она кажется выпадающей из области при выполнении последующих тестов в одной команде.Есть ли причина, по которой динамически импортируемые библиотеки выходят из области видимости, даже если они имеют глобальную область видимости библиотеки?

По сути, я хочу, чтобы эта общая библиотека всегда была доступна в моих скриптах роботов и чтобы каждая из моих пользовательских библиотек поддерживаласьссылка на общую библиотеку.Если есть лучший способ добиться этого или какой-либо другой способ сделать то, чем я сейчас занимаюсь, пожалуйста, дайте мне знать!Благодаря.

1 Ответ

0 голосов
/ 05 октября 2018

Решением может быть безоговорочный импорт общей библиотеки во все ваши пользовательские библиотеки.Например, в их конструкторах (__init__()) вызовите это:

BuiltIn().import_library("my_common_lib", True)

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

Edit : если подумать, это также может не сработать, __init__() будет вызван только один раз, поскольку библиотеки имеют глобальную область видимости;и, таким образом, общие ключевые слова снова не будут импортированы в пространство имен набора.

Введите Интерфейс прослушивателя RF :): в ваших пользовательских библиотеках определите метод класса suite_start() и переместитеблок try-кроме него.В начале каждого комплекта, использующего такую ​​библиотеку, метод будет выполняться, и общие ключевые слова - доступны.
Те же меры предосторожности, что и в двух абзацах выше, - убедитесь, что повторное импортирование общей библиотеки не имеет побочных эффектов.


Другое решение может состоять в том, чтобы изменить область пользовательских библиотек на 'TEST SUITE', как вы уже сами вычли (и неохотно делаете, основываясь на комментариях :).

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

...