Azure Pipelines如何在测试结果变动时向开发人员发送邮件通知
Azure Pipelines 测试结果变动邮件通知实现方案
完全可以在Azure Pipelines中实现该需求,核心逻辑为留存上一次测试结果基准、对比两次结果差异、有变动时触发邮件通知,具体实现流程如下:
具体实现步骤
- 第一步:持久化存储上一次测试结果基准
可以使用Azure Pipeline的变量组或者流水线制品(Pipeline Artifact)存储上一次全量测试用例的执行状态(包含用例唯一标识、执行结果),每次流水线运行结束后更新该基准文件。 - 第二步:编写测试结果对比逻辑
可以用PowerShell或者Python脚本实现对比逻辑:- 先拉取上一次留存的基准测试结果文件
- 解析本次测试生成的结果文件(支持JUnit、NUnit、TRX等通用测试结果格式)
- 对比两份结果,提取出新增失败用例(上次执行通过、本次执行失败)和新增通过用例(上次执行失败、本次执行通过)
- 如果存在任意一类变动,设置一个流水线变量例如
TestResultChanged = true,同时把变动内容整理成邮件正文格式存储为另一个流水线变量
- 第三步:配置邮件发送任务
使用内置的SendEmail任务或者PowerShell的Send-MailMessage命令,将任务触发条件设置为eq(variables['TestResultChanged'], 'true'),收件人配置为开发人员邮件列表,正文直接使用之前整理好的变动内容。
YAML配置示例参考
# 1. 下载上一次的测试结果基准 - task: DownloadPipelineArtifact@2 inputs: buildType: 'specific' project: '你的项目名称' definition: '当前流水线的定义ID' buildVersionToDownload: 'latest' artifactName: 'TestResultBaseline' targetPath: '$(Pipeline.Workspace)/baseline' continueOnError: true # 首次运行无基准文件时不报错 # 2. 执行测试生成本次结果 - task: DotNetCoreCLI@2 inputs: command: 'test' arguments: '--logger trx --results-directory $(Pipeline.Workspace)/testresults' # 3. 执行结果对比逻辑 - task: PowerShell@2 name: CompareTestResult inputs: targetType: 'inline' script: | $changed = $false $mailContent = "本次测试较上一次执行的变动如下:`n" # 此处补充基准文件、本次结果文件的解析和对比逻辑,给$changed和$mailContent赋值 Write-Host "##vso[task.setvariable variable=TestResultChanged;isOutput=true]$changed" Write-Host "##vso[task.setvariable variable=MailContent;isOutput=true]$mailContent" # 4. 结果变动时发送邮件 - task: SendEmail@1 condition: eq(dependencies.CompareTestResult.outputs['TestResultChanged'], 'true') inputs: To: 'dev-team@yourcompany.com' Subject: '测试结果变动通知' Body: '$(MailContent)' # 5. 上传本次结果作为下一次运行的基准 - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Pipeline.Workspace)/testresults' artifactName: 'TestResultBaseline'
注意事项
- 如果使用内置
SendEmail任务,需要提前在项目设置中配置SMTP服务信息,确保邮件可以正常投递。 - 首次运行流水线时没有上一次的基准结果,不会触发对比通知,首次运行完成后会自动生成基准文件供后续对比使用。
内容的提问来源于stack exchange,提问作者Sruthi CP
相关产品推荐
相关产品推荐

