Как увидеть отчет Gatling html в Azure DevOps и сравнить результаты - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть простой конвейер, в котором выполняется скрипт загрузки gatling: Мой конвейер

После того, как скрипт завершен, мы видим время выполнения скрипта: Время выполнения

Мой первый вопрос: как мне извлечь значение времени выполнения и сравнить его с предыдущим выполнением (мой сценарий выполняется каждую ночь), и если время выполнения в прошлый раз больше, чем в предыдущий раз, я хочу чтобы получить уведомление.

Кроме того, после выполнения создает отчет: Отчет

И мой следующий вопрос: как я могу открыть сгенерированный отчет непосредственно в Azure (или хотя бы отправить его по почте как приложение к стандартному уведомлению от Azure)?

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете использовать API построения временной шкалы , чтобы получить время выполнения указанной c задачи.

Я добавляю еще несколько строк сценариев к моему предыдущему ответу. Пожалуйста, проверьте ниже скрипты.

Я добавил скрипт $result.records | where {$_.name -eq "MyTaskName"}, чтобы отфильтровать записи задачи по его имени. Примечание. Вам необходимо определить уникальное отображаемое имя для задачи PowerShell.

enter image description here

$url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.TriggeredBy.BuildId)/timeline?api-version=5.1"
echo $url

$result = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get

# filter the task's records by name
$taskResult = $result.records | where {$_.name -eq "MyTaskName"}  

# calculate the totaltime of the newest build
$time = [datetime]$taskResult.finishTime - [datetime]$taskResult.startTime

$thisTaskTime= $time.TotalMinutes

# get the last build's Id
$lasturl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?definitions=$(Build.TriggeredBy.DefinitionId)&resultFilter=succeeded&`$top=2&api-version=5.1"

$buildResult =Invoke-RestMethod -Uri $lasturl -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get

#extract last buildId
$lastBuildId = $buildResult.value[1].id

#get the timeline of the last build
$timeUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$($lastBuildId)/timeline?api-version=5.1"

$lastResult =Invoke-RestMethod -Uri $timeUrl -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get

#Caculate the totaltime of the last build task
# filter the task's records by name
$lastTaskResult = $lastResult.records | where {$_.name -eq "TaskName"}  

$LastTime = [datetime]$lastTaskResult.finishTime - [datetime]$lastTaskResult.startTime

$lastTaskTime= $LastTime.TotalMinutes

#Store the result to varialbe  isLonger    
if($thisTaskTime -ge $lastTaskTime){ echo "##vso[task.setvariable variable=isLonger]True" }

Если вы хотите использовать azure уведомление по умолчанию, когда время выполнения задачи больше, чем в предыдущий раз. Вы можете добавить еще одну задачу сценария в конец конвейера, чтобы преднамеренно завершить работу конвейера, если время больше. А затем настроить уведомление о сбое сборки для вашего проекта.

if($(isLonger) -eq "True")
{
    exit 1
}
  • Боюсь, что по второму вопросу вы не можете просмотреть отчет напрямую в azure devops.

Вы можете использовать задачу копирования файлов , чтобы скопировать сгенерированный отчет, и использовать publi sh задачу сборки артефактов , чтобы загрузить отчет в azure сервер devops, с которого вы можете скачать напрямую из своей истории сборки.

Задание копирования файлов

enter image description here

Publi sh Задача артефакта сборки

enter image description here

Затем вы можете загрузить файл отчета из пользовательского интерфейса сборки.

Go до Сборки в Конвейеры -> Выберите ваш конвейер -> Выберите последнюю сборку из История

enter image description here

Существуют и другие способы загрузки файла отчета в сборку, кроме задачи артефакта сборки Publi sh, с помощью оператора ##vso[task.addattachment]value, ##vso[task.uploadfile]local file path. Например, запустите приведенный ниже оператор в задаче сценария, чтобы добавить файл отчета в сборку.

##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]$(System.DefaultWorkingDirectory)\reportTempFolder\index.html

Пожалуйста, проверьте здесь для получения дополнительной информации.

...