如何在 DevOps 上针对多个服务运行集成测试?

Posted

技术标签:

【中文标题】如何在 DevOps 上针对多个服务运行集成测试?【英文标题】:How can I run my integration tests on DevOps for multiple services? 【发布时间】:2020-11-07 09:53:58 【问题描述】:

我希望我的服务在其中一项发布时触发相同的测试。这可能吗?谢谢!

【问题讨论】:

发布管道中是否有集成测试?服务是内置在构建管道中的吗?当在构建管道中构建服务并发布其构建工件时,应该运行集成测试吗? 是的,测试在发布管道中,服务在管道中构建相同,当其中一项服务发布时,测试在不同的环境中运行 你的服务也是通过azure管道发布的吗?我在想你是否可以添加一个脚本任务来调用 rest api 来触发释放你的服务的管道中的集成测试发布管道。 是的,所以所有服务也都通过 azure piepline,我不希望每个服务都创建新的工件,我想使用我在不同服务中的测试,当其中一项服务发布测试将在那里触发,当第二个发布时,测试将在第二个服务上触发。 另一个我不确定的问题。是不是当一项服务发布到一个环境时,测试应该在这个环境上运行。集成测试运行的环境如何在发布管道中配置。还是说集成测试流水线不需要做任何改动,只需要在一项服务发布时触发并运行测试? 【参考方案1】:

您可以在服务管道中调用create release rest api 触发发布运行集成测试。请参阅以下步骤:

1、在每个服务管道的末尾添加一个脚本任务来调用create release rest api。对于下面的示例,在powershell task 中运行以下脚本。

$rurl="https://vsrm.dev.azure.com/org/proj/_apis/release/releases?api-version=6.0-preview.8"

# the definitionId is the definitionId of release pipeline of the integration tests
$body='
 
 "definitionId": 3

'
 
$result1 = Invoke-RestMethod -Uri $rurl -Headers @authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" -Method post  -Body $body -ContentType "application/json"

您可以从地址栏中获取测试发布管道的定义 ID。 进入发布页面-->点击运行测试的发布管道-->地址栏上会看到defineId。

如果服务管道与测试发布管道位于不同的项目中。您需要进入测试发布管道安全设置页面以允许服务管道创建发布权限。(搜索Service ProjectName Build Service (OrganizationName)

这样,当服务管道完成释放服务时,最后的powershell任务将被执行。 powershell 任务中的脚本会调用create release rest api。然后将触发测试发布管道并运行集成测试。

【讨论】:

我使用上面的代码创建了我的 powershell 脚本,但我遇到了错误。 2020-07-21T09:45:16.5297523Z 变量引用无效。 ':' 后面没有有效的变量名字符。考虑使用 $ 到 2020-07-21T09:45:16.5297903Z 分隔名称。 2020-07-21T09:45:16.5298734Z 在 D:\a_temp\52f9338c-3c70-4c3e-9d32-662e8cc3fd79.ps1:12 字符:159 2020-07-21T09:45:16.5299237Z + ... CESSTOKEN" -方法后 -Body $body -ContentType "application/json" 2020-07-21T09:45:16.5299739Z + ~ 2020-07-21T09:45:16.5300134Z 字符串缺少终止符:". 2020-07-21T09:45:16.5300985Z 在 D:\a_temp\52f9338c-3c70-4c3e-9d32-662e8cc3fd79.ps1:12 char:77 2020-07-21T09:45:16.5301435Z + ... = "Bearer" $env:SYSTEM_ACCESSTOKEN" -Method post -Body $body -Cont ... 2020-07-21T09:45:16.5301854Z + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2020-07-21T09: 45:16.5302307Z 意外令牌 '$env:SYSTEM_ACCESSTOKEN" -方法发布 -Body $body -ContentType "application/json" 2020-07-21T09:45:16.5302737Z if (!(Test-Path -LiteralPath variable:\LASTEXITCODE )) 2020-07-21T09:45:16.5303615Z 其他 2020-07-21T09:45:16.5304267Z exit $LASTEXITCODE 2020-07-21T09:45:16.5304879Z ' 在表达式或语句中。 2020-07-21T09:45:16.5305621Z 在 D:\a_temp\52f9338c-3c70-4c3e-9d32-662e8cc3fd79.ps1:12 字符:76 2020-07-21T09:45:16.5306417Z + ... oke-RestMethod - Uri $rurl -Headers @authorization = "Bearer" $env:SY ... 2020-07-21T09:45:16.5307386Z + ~ 2020-07-21T09:45:16.5307675Z 哈希字面量不完整。 2020-07-21T09:45:16.5307967Z + CategoryInfo : ParserError: (:) [], ParseException 2020-07-21T09:45:16.5308341Z + FullyQualifiedErrorId : InvalidVariableReferenceWithDrive 2020-07-21T09: 45:16.5308621Z 2020-07-21T09:45:16.6943406Z ##[错误]PowerShell 以代码“1”退出。 2020-07-21T09:45:16.7391772Z ##[section]完成:集成测试

以上是关于如何在 DevOps 上针对多个服务运行集成测试?的主要内容,如果未能解决你的问题,请参考以下文章

持续集成与Devops关系

云原生DevOps:CICD持续集成|交付|部署

如何:针对测试环境(数据库)运行 Maven 集成测试

如何使用带有 gradle 的多个嵌入式服务器运行 spring-boot 集成测试

在 Docker 中运行的自定义 Azure DevOps 构建代理上具有卷装载的测试容器

在 Azure DevOps 上运行的 Detox(反应原生)问题