Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

RobotFramework Как удалить импортированный ресурс из test suite scope?

python
Теги: #<Tag:0x00007f7b624b1c90>

(Fdfdf Wfwf) #1

В цикле теста импортируется ресурс с кейвордами через ключевое слово Import Resource (BuiltIn).
На последнем шаге данной итерации требуется удалять импортированный ресурс, так как в следующей итерации цикла импортируется новый ресурс и так далее.
Суть проблемы в том, что импортированные ресурсы все остаются в test suite scope, а, поскольку, кейворды идентичные, то берутся они из первого импортированного ресурса, что для условий теста недопустимо.

Может быть кто-нибудь подскажет, как можно было бы решить такую проблему?
Что-от похожее на Delete Resource отсутствует в библиотеке.


(Евгений) #2

интересно у Вас построены тесты… А не приведёте ли пример задачи, которая решается так? Возможно, стоит сделать редизайн тестов вместо поиска таких финтов


(Fdfdf Wfwf) #3

У меня 100+ игр. На данный момент для каждой игры существует свой сьют тестов, куда импортируется все, что необходимо, в том числе ресурсный файл с кейвордами для данной игры.
Есть реализация общих кейвордов с возможностью их имплементации в конкретной игре.
например:
Check Game State Impl
Call Default Or Own Check Game State Check Game State Default

Поступила задача написать один тест, который будет в цикле запускать все игры и прогонять тест кейс (на проверку, допустим, какой-нибудь фичи) для каждой игры.

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

Есть еще кейворд Set Library Search Order. В него вроде можно передавать имена ресурсов.


(Евгений) #4

Возможно, подойдет такой вариант

Например, есть 2 ресурса, в которых находится киворд “Cool Keyword”:

  • 1_resource.robot
  • 2_resource.robot

Соответственно, тест кейс с циклом может выглядеть так:

*** Test Cases ***
Cool Test Case
    :FOR    ${i}    IN    1    2
    \    Import Resource    ${CURDIR}/${i}_resouce.robot
    \    Run Keyword    ${i}_resource.Cool Keyword
    \    Run Keyword    ${i}_resource.Another Cool Keyword

Т.е. каждый вызов киворда в цикле будет начинаться с Run Keyword ${resource_name}.your_keyword, где переменная ${resource_name} должна принимать новое значение в каждой итерации цикла.

Рабочим вариантом тогда будет создать переменную @{resources} в секции ***Variables ***, и цикл соответственно будет выглядеть так:

 :FOR    ${resource}    IN    @{resources}
 \    Import Resource    ${resource}
 \    Run Keyword    ${resource}.Cool Keyword

(Fdfdf Wfwf) #5

Такой вариант, посмотрю, обдумаю.
Но пока что Вы меня натолкнули на другую мысль, как можно такой механизм вкрутить.
Спасибо!


(Lev Yarushin) #6

Что-то не понятно, зачем запускать тесты в цикле )
Разбейте их по папкам, а потом натравите RF на эти папки.
Можно использовать файл init.robot в котором все общие ресурсы пропишете.