You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Test Plans触发自动化测试:YAML配置及相关疑问

解答你的Azure Test Plans自动化测试触发问题

我来帮你拆解这三个问题,结合Azure DevOps的实际机制给你说清楚:

1. 为什么需要发布管道?

你可能会疑惑:我已经有构建管道能跑测试了,为啥还要多一个发布管道?其实核心原因是Azure Test Plans的自动化测试触发机制需要一个专门的"执行层"来衔接测试案例和测试执行:

  • 构建管道的核心职责是产出可执行的测试资产(比如.NET Core测试二进制文件、测试容器镜像),它的触发逻辑通常是代码提交、定时计划这类,没有和Test Plans里的具体测试案例做关联的入口。
  • 当你在Test Plans里点击"运行自动化测试"时,本质是要指定哪些关联了自动化测试的测试案例要执行,并且把测试结果回传到对应的测试案例上。这个功能需要一个能接收Test Plans触发信号、关联测试计划/套件配置的流水线——这就是官方文档说的"发布管道"的作用(现在Azure DevOps里也可以用YAML多阶段管道的测试阶段来替代传统经典发布管道)。
    简单说:构建是"造测试包",测试执行阶段(原发布管道的角色)是"按Test Plans的要求跑测试并同步结果",二者职责不同,Test Plans的触发需要这个中间层来完成关联。

2. 如何用YAML定义可被Test Plans触发的测试执行流程?

不用局限于经典手动发布管道,你可以直接在现有YAML构建管道里新增一个专门的测试执行阶段,把它配置成可被Test Plans触发。核心是要给这个阶段配置测试计划/套件的关联,并且允许手动触发。

下面是一个完整的YAML示例,包含构建、测试执行两个阶段:

stages:
- stage: Build
  displayName: '构建测试资产'
  jobs:
  - job: BuildTests
    steps:
    # 构建.NET Core测试项目
    - task: DotNetCoreCLI@2
      inputs:
        command: 'build'
        projects: '**/*Tests.csproj'
        arguments: '--configuration Release'
    # 上传测试二进制文件作为构建产物
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(System.DefaultWorkingDirectory)/bin/Release'
        artifact: 'test-binaries'
        publishLocation: 'Container'

- stage: TestExecution
  displayName: '执行自动化测试(可被Test Plans触发)'
  dependsOn: Build
  condition: succeeded()
  jobs:
  - job: RunAssociatedTests
    steps:
    # 下载构建阶段产出的测试二进制文件
    - task: DownloadPipelineArtifact@2
      inputs:
        buildType: 'current'
        artifactName: 'test-binaries'
        targetPath: '$(System.DefaultWorkingDirectory)/tests'
    # 运行测试并关联到Test Plans
    - task: VSTest@2
      inputs:
        testSelector: 'testAssemblies'
        testAssemblyVer2: |
          **/*Tests.dll
          !**/*TestAdapter.dll
          !**/obj/**
        searchFolder: '$(System.DefaultWorkingDirectory)/tests'
        # 关键配置:关联你的测试计划、套件、配置
        testRunTitle: 'Test Plans触发的自动化测试'
        testPlan: '你的测试计划ID'
        testSuite: '你的测试套件ID'
        testConfiguration: '你的测试配置ID'
        publishRunAttachments: true

配置完后,你需要在Azure DevOps的Test Plans里做最后一步关联:

  1. 打开你的测试套件,点击顶部的"运行自动化测试"
  2. 在弹出的窗口中,选择这个YAML管道的TestExecution阶段
  3. 保存配置后,以后就能直接在Test Plans里点击触发这个阶段了

3. 可以运行容器化测试吗?

完全可以!你只需要在构建阶段构建并推送测试容器镜像,然后在测试执行阶段拉取镜像、在容器内运行测试,最后把结果回传到Test Plans。

下面是容器化测试的YAML示例:

stages:
- stage: Build
  displayName: '构建测试容器镜像'
  jobs:
  - job: BuildTestImage
    steps:
    # 构建并推送测试容器镜像到ACR(或其他注册表)
    - task: Docker@2
      inputs:
        containerRegistry: '你的容器注册表服务连接'
        repository: 'test-project'
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
        tags: 'latest'

- stage: TestExecution
  displayName: '在容器中执行测试'
  dependsOn: Build
  jobs:
  - job: RunContainerizedTests
    steps:
    # 拉取构建好的测试镜像
    - task: Docker@2
      inputs:
        containerRegistry: '你的容器注册表服务连接'
        repository: 'test-project'
        command: 'pull'
        tags: 'latest'
    # 运行容器执行测试,导出测试结果文件
    - script: |
        # 运行容器,执行测试并生成trx格式的结果文件
        docker run --name test-container your-registry/test-project:latest dotnet test --logger trx --results-directory /test-results
        # 把容器内的测试结果复制到代理机器上
        docker cp test-container:/test-results $(System.DefaultWorkingDirectory)/test-results
        # 清理容器
        docker rm test-container
      displayName: '在容器中运行测试并导出结果'
    # 把测试结果发布到Test Plans
    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'VSTest'
        testResultsFiles: '**/*.trx'
        searchFolder: '$(System.DefaultWorkingDirectory)/test-results'
        testRunTitle: '容器化自动化测试'
        testPlan: '你的测试计划ID'
        testSuite: '你的测试套件ID'

这样配置后,你同样可以在Test Plans里触发这个测试执行阶段,测试会在容器内运行,结果自动同步到对应的测试案例中。

内容的提问来源于stack exchange,提问作者Tobias von Falkenhayn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:14:41