Формат XML в стиле JUNIT широко используется командой автоматизации тестов для создания отчетов. Существуют различные фреймворки/инструменты тестирования, такие как readyapi, testng, огурец и т. Д., Которые способны генерировать отчеты XML в стиле JUNIT. Кроме того, эти стандартные отчеты также можно использовать и интегрировать с Jenkins для визуализации красивых отчетов.
Лось это стек, состоящий из трех компонентов Elasticsearch, Logstash и Kibana. Давайте посмотрим на быстрое резюме каждого.
Elasticsearch : Поиск и аналитический двигатель с открытым исходным кодом, используемый для анализа журналов и метрик. Logstash : Инструмент с открытым исходным кодом для централизованного ведения журналов, проглатывания и преобразования журналов и событий. Кибана : Инструмент разведки для просмотра журналов и красивых визуализаций данных.
Это очень полезно для диагностики и решения дефектов и проблем с производством, но также очень полезно для понимания клиентов. Более того, он предоставляет дополнительные показатели о здоровье и использовании систем, которые предоставляют заинтересованным сторонам QE мощное преимущество и прозрачность в отношении автоматизации тестов и точно определить, где они терпят неудачу, вы можете изучить статус данных, адаптироваться и доставить именно то, что у вас. потребности системы.
Для установки и настройки Elasticsearch и Kibana см. https://www.elastic.co
Предварительные условия
Библиотеки Python
- Запросы
- Junitparser
Обязательные аргументы
- XMLPath
- URL
.py
#!/usr/bin/env python import sys import requests from junitparser import JUnitXml from datetime import datetime, timedelta # No.of total tests def Total_Tests(): Total_Tests = 0 try: for suites in xml: Total_Tests += suites.tests return (Total_Tests) except AttributeError: Total_Tests += xml.tests return (Total_Tests) #No. of tests failed def Total_Failures(): Total_Failures = 0 try: for suites in xml: Total_Failures += suites.failures return (Total_Failures) except AttributeError: Total_Failures += xml.failures return (Total_Failures) #Total duration def Total_time(): Total_time = 0 try: for suites in xml: Total_time += suites.time return (Total_time) except AttributeError: Total_time += xml.time return (Total_time) if __name__ == '__main__': URL = sys.argv[1] xmlPath = sys.argv[2] xml = JUnitXml.fromfile(xmlPath) totalTests = Total_Tests() totalFail = Total_Failures() totalPass = totalTests - totalFail start_time = datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f') end_time = datetime.now() + timedelta(seconds=Total_time()) end_time = end_time.strftime('%Y-%m-%dT%H:%M:%S.%f') data = { 'total_tests': totalTests, 'total_pass': totalPass, 'total_fail': totalFail, 'end_time': end_time, 'start_time': start_time } try: r = requests.post(url=URL, data=data, verify=False) print(r.text) except requests.exceptions.Timeout: print(TimeoutError) except requests.exceptions.TooManyRedirects: print("Too many redirect, please retry") except requests.exceptions.RequestException as e: raise SystemExit(e)
Кроме того, как имя параметров может отличаться в каждой организации, поэтому вы можете изменить параметры данных {} соответственно.
Как бежать?
Python junitresultstoelk.py "xmlpath" "url"
pipeline { agent{ label 'master' } stage('Push Results to Elastic') { steps { sh 'python jUnitResultstoELK.py "${WORKSPACE}/reports/report.xml" "http://localhost:8788"' } } }
Оригинал: “https://dev.to/akritic/push-junit-test-results-to-elasticsearch-via-pipeline-2m5j”