如何在 Azure DevOps 中查看 Gatling html 报告并比较结果
How to see Gatling html report in Azure DevOps and compare results
我有一个简单的管道,其中执行 gatling 加载脚本:
My pipeline
脚本完成后,我们看到脚本执行时间:
Execution time
我的第一个问题是:如何提取执行时间的值并将其与上一次执行(我的脚本每晚执行)进行比较,如果上次执行时间比上次多,我想得到通知。
此外,执行后生成报告:Report
我的下一个问题是:如何直接在 Azure 中打开生成的报告(或者至少通过邮件将其作为 Azure 标准通知的附件发送)?
您可以使用Build timeline API获取特定任务的执行时间。
我在之前的回答中添加了几行脚本。请检查以下脚本。
我添加了脚本 $result.records | where {$_.name -eq "MyTaskName"}
以按名称过滤任务记录。注意:您需要为您的 powershell 任务定义一个唯一的显示名称。
$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 默认通知。如果时间更长,您可以将另一个脚本任务添加到管道的末尾,以故意使管道失败。然后 set up a build fails notification 用于您的项目。
if($(isLonger) -eq "True")
{
exit 1
}
- 关于你的第二个问题,恐怕你不能直接在azure devops中查看报告。
您可以使用 copy files task to copy out the generated report and use publish build artifacts task 将报告上传到 azure devops 服务器,您可以在其中直接从构建历史记录中下载。
复制文件任务
发布构建工件任务
然后您可以从构建 UI 下载报告文件。
转到 Pipelines 下的 Builds--> Select 你的管道--> 从 历史
除了使用语句 ##vso[task.addattachment]value
、##vso[task.uploadfile]local file path
发布构建工件任务之外,还有其他方法可以将报告文件上传到构建。例如 运行 下面在脚本任务中声明将报告文件添加到构建中。
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]$(System.DefaultWorkingDirectory)\reportTempFolder\index.html
请查看here了解更多信息。
我有一个简单的管道,其中执行 gatling 加载脚本: My pipeline
脚本完成后,我们看到脚本执行时间: Execution time
我的第一个问题是:如何提取执行时间的值并将其与上一次执行(我的脚本每晚执行)进行比较,如果上次执行时间比上次多,我想得到通知。
此外,执行后生成报告:Report
我的下一个问题是:如何直接在 Azure 中打开生成的报告(或者至少通过邮件将其作为 Azure 标准通知的附件发送)?
您可以使用Build timeline API获取特定任务的执行时间。
我在之前的回答中添加了几行脚本。请检查以下脚本。
我添加了脚本 $result.records | where {$_.name -eq "MyTaskName"}
以按名称过滤任务记录。注意:您需要为您的 powershell 任务定义一个唯一的显示名称。
$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 默认通知。如果时间更长,您可以将另一个脚本任务添加到管道的末尾,以故意使管道失败。然后 set up a build fails notification 用于您的项目。
if($(isLonger) -eq "True")
{
exit 1
}
- 关于你的第二个问题,恐怕你不能直接在azure devops中查看报告。
您可以使用 copy files task to copy out the generated report and use publish build artifacts task 将报告上传到 azure devops 服务器,您可以在其中直接从构建历史记录中下载。
复制文件任务
发布构建工件任务
然后您可以从构建 UI 下载报告文件。
转到 Pipelines 下的 Builds--> Select 你的管道--> 从 历史
除了使用语句 ##vso[task.addattachment]value
、##vso[task.uploadfile]local file path
发布构建工件任务之外,还有其他方法可以将报告文件上传到构建。例如 运行 下面在脚本任务中声明将报告文件添加到构建中。
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]$(System.DefaultWorkingDirectory)\reportTempFolder\index.html
请查看here了解更多信息。