Автоматическое отключение / неисполнение взаимозависимых испытаний в рамках робота
-
26-12-2019 - |
Вопрос
Если скажем, у меня есть 100 тестовых случаев для запуска, в котором тестовый случай № 24, 38 и 99 не взаимозависимо.Только возможно, что в то время как 99-й тестовый случай выполняется, вы обнаружите, что статус ранее выполняемого тестового случая (скажем, 24 или 38-й тестовый случай)? В моем случае 99-й тестовый случай зависит от состояния 38-го и 24-го тестового случая и, следовательно, если либо 24 или 38-й неудачника, я бы хотел, чтобы 99-й тестовый случай не должен быть выполнен вообще и, таким образом, сэкономитьвремени. Пожалуйста, объясните с некоторым примером, если это возможно.Заранее спасибо!
Решение
Как только робот начинает работать, нет способа пропустить тест на основе некоторого состояния. Я думаю, что это одна из слабых сторон робота, но дизайнеры Действительно, кажется, не нравится понятие пропущенных тестов . Кроме того, нет встроенного для одного теста, чтобы зависеть от другого. A Запрос на функцию для этой особенности был отклонен .
Тем не менее, робот очень расширяемый, и функция, которая была введена в версии 2.8.5, позволяет легко написать ключевое слово, которое не удастся, если другой тест потерпел неудачу. Эта функция - это способность для Библиотека, чтобы действовать в качестве слушателя . При этом библиотека может отслеживать состояние прохода / сбоя каждого теста. С этими знаниями вы можете создать ключевое слово, которое сразу не удается, если какой-то другой тест терпит неудачу.
Основная идея - это, кэшируйте статус Pass / Fail в качестве каждой тестовой отделки (через специальный метод _end_test
). Затем используйте это значение, чтобы определить, следует ли немедленно завершить неудачу или нет.
Вот пример того, как использовать такое ключевое слово:
*** Settings ***
| Library | /path/to/DependencyLibrary.py
*** Test Cases ***
| Example of a failing test
| | fail | this test has failed
| Example of a dependent test
| | [Setup] | Require test case | Example of a failing test
| | log | hello, world
.
Вот определение библиотеки:
from robot.libraries.BuiltIn import BuiltIn
class DependencyLibrary(object):
ROBOT_LISTENER_API_VERSION = 2
ROBOT_LIBRARY_SCOPE = "GLOBAL"
def __init__(self):
self.ROBOT_LIBRARY_LISTENER = self
self.test_status = {}
def require_test_case(self, name):
key = name.lower()
if (key not in self.test_status):
BuiltIn().fail("required test case can't be found: '%s'" % name)
if (self.test_status[key] != "PASS"):
BuiltIn().fail("required test case failed: '%s'" % name)
return True
def _end_test(self, name, attrs):
self.test_status[name.lower()] = attrs["status"]
. Другие советы
Чтобы решить эту проблему, я использую что-то подобное:
Run Keyword if '${PREV TEST STATUS}'=='PASSED' myKeyword
.
Так, может быть, это будет использоваться также для вас.