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

使用TFS 2017.2 API获取测试步骤始终返回0条结果求助

解决TFS 2017.2测试用例步骤获取返回0的问题

我之前在对接TFS 2017.2的测试用例API时,也踩过这个“获取不到测试步骤”的坑,用的也是旧版SOAP风格的ExtendedClient包,后来折腾了一阵才找到问题所在,给你几个可行的排查和解决方向:

1. 核心问题:测试步骤存储在特定隐藏字段中

旧版API里,测试用例的步骤(操作/预期结果)并不是作为工作项的子集合存在的,而是序列化后存储在Microsoft.VSTS.TCM.Steps这个隐藏字段里。很多人会错误地尝试通过WorkItem的Links、Relations等属性去获取,自然返回空。

正确的做法是先读取这个字段的XML值,再反序列化为测试步骤对象:

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using System.Xml.Serialization;
using System.IO;

// 定义对应XML结构的实体类
[XmlRoot("steps")]
public class TestCaseStepCollection
{
    [XmlElement("step")]
    public List<TestCaseStep> Steps { get; set; } = new List<TestCaseStep>();
}

public class TestCaseStep
{
    [XmlElement("action")]
    public string Action { get; set; }
    [XmlElement("expectedresult")]
    public string ExpectedResult { get; set; }
    [XmlAttribute("id")]
    public int Id { get; set; }
}

// 实际获取步骤的方法
public List<TestCaseStep> GetTestCaseSteps(TfsTeamProjectCollection tfsConn, int testCaseId)
{
    var workItemStore = tfsConn.GetService<WorkItemStore>();
    var testCase = workItemStore.GetWorkItem(testCaseId);

    // 定位到存储步骤的字段
    var stepsField = testCase.Fields["Microsoft.VSTS.TCM.Steps"];
    if (stepsField == null || stepsField.Value == null)
        return new List<TestCaseStep>();

    // 反序列化XML为实体
    var serializer = new XmlSerializer(typeof(TestCaseStepCollection));
    using (var stringReader = new StringReader(stepsField.Value.ToString()))
    {
        var stepCollection = (TestCaseStepCollection)serializer.Deserialize(stringReader);
        return stepCollection.Steps;
    }
}

2. 排查权限与字段可见性

即使是全新项目,也要确认:

  • 你的访问账号拥有读取测试用例的权限(可以在TFS Web界面手动查看该测试用例验证)
  • Microsoft.VSTS.TCM.Steps字段没有被意外隐藏:在TFS Web界面打开测试用例,进入“查看原始字段”模式,确认该字段存在且有内容。

3. 验证API版本兼容性

你使用的Microsoft.TeamFoundationServer.ExtendedClient v15.112.1和TFS 2017.2之间可能存在版本不匹配的问题。TFS 2017 Update 2对应的推荐客户端版本是v15.117.0左右,可以尝试降级/升级到更匹配的版本,避免字段映射错误。

4. 备选方案:尝试REST API

如果旧版SOAP API实在折腾不通,TFS 2017.2已经支持REST API了,你可以调用以下接口获取包含步骤的工作项:

GET http://your-tfs-server:8080/tfs/YourCollection/_apis/wit/workitems/{testCaseId}?$expand=All&api-version=3.0

返回的JSON中,fields["Microsoft.VSTS.TCM.Steps"]就是存储步骤的XML字符串,解析方式和SOAP API一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:31