Я бы подошел к вашей проблеме под другим углом. Прежде всего, я не предлагаю использовать Groovy XMLSlurper или любой другой синтаксический анализатор XML для извлечения необходимой информации из output.xml Robot Framework.
Вам следует использовать собственный API Robot Framework, который уже реализует нужные вам парсеры. Вы можете легко получить доступ к любой информации, описанной в модуль robot.result.model. Здесь вы можете найти все, наборы, тесты и ключевые слова со всеми их атрибутами, такими как тестовые сообщения, сообщения об ошибках, время выполнения, результаты тестов и т. Д. В целом это будет наиболее перспективным решением синтаксического анализа в будущем, поскольку этот синтаксический анализатор всегда будет соответствовать версия фреймворка. Убедитесь, что вы используете документацию API, соответствующую вашей текущей версии фреймворка.
Теперь вернемся к своей задаче: вы должны использовать вышеупомянутый API через интерфейс слушателя Robot Framework.. Реализуя метод output_file
прослушивателя , вы можете получить доступ к output.xml (вы даже можете сделать его копию здесь) до того, как плагин Robot Publisher переместит файл. output_file
будет автоматически вызываться после того, как output.xml будет готов. Метод получит в качестве входных данных путь к XML-файлу. Вы можете передать этот путь прямо в ExecutionResult
класс из API, после чего вы сможете просмотреть результаты своим ResultVisitor
и получить необходимую информацию.
Последним шагом будет запись данных в файл, который будет использоваться в качестве входных данных для этапа электронной почты. Обратите внимание, что этот файл не будет затронут издателем Robot Publisher по умолчанию, поскольку это не стандартный вывод, а пользовательский, который вы только что создали с помощью API Robot Framework.
Как бы много это ни звучало, вот пример, демонстрирующий идею. Слушатель и посетитель результата в EmailInputProvider.py:
from robot.api import ExecutionResult, ResultVisitor
class MyTestResultVisitor(ResultVisitor):
def __init__(self):
self.test_results = dict()
def visit_test(self, test):
self.test_results[test.longname] = test.status
class EmailInputProvider:
ROBOT_LISTENER_API_VERSION = 3
def output_file(self, path):
output = 'EmailInput.txt'
visitor = MyTestResultVisitor() # Instantiate result visitor
result = ExecutionResult(path) # Parse up execution result using robot API
result.visit(visitor) # Visit and top level suite to retrive needed metadata
with open(output, 'w') as f: # Write retrived data into a file
for testname, result in visitor.test_results.items():
print(f'{testname} - {result}', file=f)
# You can make a copy of the output.xml here as well
print(f'Email: Input saved into {output}') # Log about custom output to console
globals()[__name__] = EmailInputProvider
Это даст следующие результаты для этого фиктивного набора (SO2.robot):
*** Test Cases ***
Test A
No Operation
Test B
No Operation
Test C
No Operation
Test D
No Operation
Test E
No Operation
Test F
Fail
Вывод в консоль:
$ robot --listener EmailInputProvider SO2.robot
==============================================================================
SO2
==============================================================================
Test A | PASS |
------------------------------------------------------------------------------
Test B | PASS |
------------------------------------------------------------------------------
Test C | PASS |
------------------------------------------------------------------------------
Test D | PASS |
------------------------------------------------------------------------------
Test E | PASS |
------------------------------------------------------------------------------
Test F | FAIL |
AssertionError
------------------------------------------------------------------------------
SO2 | FAIL |
6 critical tests, 5 passed, 1 failed
6 tests total, 5 passed, 1 failed
==============================================================================
Email: Input saved into EmailInput.txt
Output: ..\output.xml
Log: ..\log.html
Report: ..\report.html
Пользовательский выходной файл:
SO2.Test A - PASS
SO2.Test B - PASS
SO2.Test C - PASS
SO2.Test D - PASS
SO2.Test E - PASS
SO2.Test F - FAIL
person
Bence Kaulics
schedule
19.09.2020