Рубрики
Без рубрики

Push junit test test в стек Elk

Формат XML в стиле JUNIT широко используется командой автоматизации тестов для создания отчетов. Есть разные … Tagged с помощью Python, DevOps, тестирования.

Формат 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”