Robot Framework: Как объединить старые / новые статусы с помощью rebot --merge и сохранить только один? - PullRequest
0 голосов
/ 01 ноября 2019

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

robot --output original.xml /path/to/dir/.
robot --rerunfailed original.xml --output rerun.xml /path/to/dir/.
rebot -o machine1.xml -l machine1.html --merge original.xml rerun.xml

То же действие предоставляется на нескольких тестовых машинах. Набор тестов идентичен и выполняется для каждой виртуальной машины. Все виртуальные машины считаются идентичными, однако они нестабильны, и я получаю разные результаты на каждой машине. Я хочу объединить все результаты со всех компьютеров и извлечь максимальное количество пройденных тестов, чтобы понять, действительно ли тест ДЕЙСТВИТЕЛЬНО не выполняется или это просто нестабильная среда и тест в порядке сам по себе.

Другими словами, если тест пройденпо крайней мере, на 1 машине, но на других 3 машинах произошел сбой, его следует считать прошедшим в окончательном отчете

Однако я получаю False для такого случая.

Можно ли как-то изменить поведение?

Пример из окончательного отчета:

Status: FAIL (critical)
Message:    Re-executed test has been merged.
New status: FAIL
New message: Re-executed test has been merged.
New status: FAIL
New message: IndexError: Given index 0 is out of the range 0--1.
Old status: FAIL
Old message: IndexError: Given index 0 is out of the range 0--1.
Old status: PASS
Old message: Re-executed test has been merged.
New status: PASS
New message: 
Old status: PASS
Old message: Re-executed test has been merged.
New status: PASS
New message: 
Old status: PASS
Old message: 

1 Ответ

0 голосов
/ 08 ноября 2019

Решено с помощью простого скрипта для prerebotmodifier, написанного мной. Может быть, это будет полезно для кого-то еще.

Итак, я создал TestStatusChecker.py , который помогает объединять отчеты со следующей логикой: статус теста будет НЕ УДАЛЕН, ТОЛЬКО если он былошибка во ВСЕХ отчетах .

from robot.api import SuiteVisitor


class TestStatusChecker(SuiteVisitor):

    def __init__(self, *args):
        pass

    def visit_test(self, test):
        if 'PASS' in test.message and 'Re-executed test has been merged' in test.message:
            test.status = 'PASS'
            test.message = 'Test passed because it passed at least once.'

Команда CLI для объединения результатов:

rebot -l final_log.html --prerebotmodifier TestStatusChecker.py --merge 1.xml 2.xml 3.xml 4.xml отчет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...