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

如何配置Azure DevOps流水线仅运行拉取请求中的单元测试

如何在Azure DevOps流水线中仅运行拉取请求相关的Python测试

完全可以配置流水线实现这个需求,核心是先识别拉取请求(PR)中变更的文件,再关联到对应的测试模块,最后只运行这些测试。具体步骤如下:

1. 获取PR中变更的Python文件

在流水线中添加脚本任务,用Git命令获取PR分支与目标分支(比如main)之间的变更文件,筛选出Python相关文件并保存为流水线变量。

示例Bash脚本:

# 对比当前分支与main分支,获取所有变更的Python文件
CHANGED_FILES=$(git diff --name-only origin/main...HEAD | grep -E "\.py$")
# 将结果设置为流水线变量,供后续任务使用
echo "##vso[task.setvariable variable=ChangedFiles]$CHANGED_FILES"

2. 映射变更文件到对应测试模块

根据你的项目结构,写脚本把变更的源码文件关联到对应的测试文件。比如常见的结构是:

  • 源码路径:src/[模块名]/xxx.py
  • 测试路径:tests/test_[模块名]/test_xxx.py

示例Bash脚本:

TEST_FILES=""
for file in $CHANGED_FILES; do
  # 处理变更的源码文件,映射到测试文件
  if [[ $file == src/* ]]; then
    # 替换路径前缀,修改文件名格式
    test_file=$(echo $file | sed 's/src/tests\/test_/' | sed 's/\.py/_test.py/')
    # 检查测试文件是否存在,存在则加入列表
    if [[ -f $test_file ]]; then
      TEST_FILES="$TEST_FILES $test_file"
    fi
  # 如果变更的是测试文件,直接加入列表
  elif [[ $file == tests/* ]]; then
    TEST_FILES="$TEST_FILES $file"
  fi
done
# 设置测试文件列表为流水线变量
echo "##vso[task.setvariable variable=TestFiles]$TEST_FILES"

3. 运行指定的测试文件

修改原有的测试任务,根据TestFiles变量的值决定运行哪些测试:如果有指定测试文件则只跑这些,否则兜底运行全量测试。

示例Azure DevOps Python任务配置(YAML):

- task: PythonScript@0
  displayName: 'Run targeted tests'
  inputs:
    scriptSource: 'inline'
    script: |
      import os
      test_files = os.environ.get('TestFiles', '').strip()
      if test_files:
          os.system(f'pytest {test_files} -v')
      else:
          # 无变更文件时跑全量测试,避免漏测
          os.system('pytest -v')
    workingDirectory: '$(Build.SourcesDirectory)'

注意事项

  • 确保流水线有拉取目标分支(如main)代码的权限,否则Git对比会失败。
  • 上述脚本适配常见的项目结构,你需要根据自己的实际路径调整映射规则。
  • 保留兜底逻辑:当没有检测到变更的Python文件时,仍运行全量测试,避免因脚本逻辑疏漏导致漏测。

内容的提问来源于stack exchange,提问作者SerSergious

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:30:01