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

使用Azure DevOps扩展API删除测试用例时遇权限及请求错误

问题

我开发了一款可批量删除Test runs和测试用例的Azure DevOps扩展,目前遇到以下异常情况:

  • 在独立Hub页面中,Test runs的删除功能正常工作
  • 但通过配置目标为ms.vss-work-web.query-result-work-item-menu的ms.vss-web.action执行测试用例删除时,出现三类错误:
    1. 调用https://devops.url/azure/defaultcollection/projectid/_api/test/testcases/123456返回net::Err_Failed 401
    2. 网络异常提示:TF400893: 无法连接服务器,请检查网络
    3. fetch请求抛出未处理的Type error: fail to fetch

已确认的前置条件:

  • 扩展已配置[vs.test, vso.test_write]权限
  • TestRun的读写删除操作测试均正常
  • 自身拥有DevOps服务器的相关权限

测试用例删除的代码实现如下:

async function DeleteTestCaseById(projectId: string, testCaseId: number): Promise<boolean> {
try {
    const result = await getClient(TestRestClient).deleteTestCase(projectId, testCaseId);
    console.log(`Deleted successfully, Testcase : ${testCaseId}`);        
    return true;
} catch (e) {
    console.log(`Error in deleting, Testcase: ${testCaseId} : ${e.message}`);
    console.log(e);
    return false;
} }

查阅REST API文档发现安全部分要求PAT作为访问令牌,疑惑是否需要通过extension.json传入PAT?

解决方案
  1. 无需手动传入PAT:Azure DevOps扩展运行时会自动获取当前用户的上下文令牌,不需要在extension.json中配置PAT。问题核心是不同场景下上下文令牌的权限范围存在差异。

  2. 场景权限差异分析:

    • 独立Hub页面属于扩展自身上下文,令牌能完整获取vso.test_write权限对应的访问范围
    • 而在query-result-work-item-menu(工作项查询结果菜单)上下文里,扩展令牌的默认权限范围可能被限制,无法访问测试用例删除API
  3. 具体修复步骤:

    • 检查extension.json的权限声明,确保vso.test_write权限的作用域设置正确,需为对应的action配置添加scopes: ["vso.work", "vso.test"],明确覆盖工作项上下文的权限范围
    • 调用API时,确保TestRestClient基于当前菜单上下文初始化,使用getClient(TestRestClient, context)的方式传入当前场景的上下文对象,保证令牌与场景正确关联
    • TF400893通常是权限不足导致的伪装错误,优先解决401权限问题后,网络异常会自动消失
  4. 额外验证点:

    • 确认当前用户在DevOps项目中拥有测试用例的删除权限(区别于扩展配置的权限)
    • 在菜单action的代码中,可打印当前上下文的权限标识(注意不要泄露敏感信息),验证是否包含test_write权限

内容的提问来源于stack exchange,提问作者A.P.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:12:13