始终检索 TFS 测试步骤 returns 计数为 0

Retrieve TFS Test Steps always returns count of 0

我正在尝试使用 API(Microsoft.TeamFoundationServer.ExtendedClient v15.112.1)检索已添加到 TFS (2017.2) 测试用例中的测试步骤(又名 "actions") .我当前的实现总是 returns 0 个测试步骤,尽管实际的测试用例有步骤。我也在一个干净的新团队项目中尝试了这个,没有任何工作项自定义,甚至 returns 0 个步骤。我的实现使用较旧的 API(基于 SOAP 网络服务),因为看起来较新的基于 http 的 API 尚未实现测试步骤。这是我使用的代码:

private void GetTestStepsForTestCase(int testCaseId, int testSuiteId, 
string teamProjectName, Uri tfsUrl)
{
   TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(tfsUrl);
   ITestManagementService itms = tpc.GetService<ITestManagementService>();
   ITestManagementTeamProject ittp = itms.GetTeamProject(teamProjectName);
   ITestSuiteBase suite = ittp.TestSuites.Find(testSuiteId);
   ITestCaseCollection testCaseCollection = suite.AllTestCases;
   ITestCase itestCase = testCaseCollection.FirstOrDefault(t => t.Id == testCaseId);

   foreach (Microsoft.TeamFoundation.TestManagement.Client.ITestAction itestAction in itestCase.Actions)
   {
      // Do something
   }
}

有人吗?

您可以使用下面的示例从特定测试套件中检索测试用例步骤,它在我这边有效:

安装 nuget 包:Microsoft.TeamFoundationServer.ExtendedClient - 15.112.1

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.TestManagement.Client;
using Microsoft.VisualStudio.Services.Client;
using System;

namespace RetrieveTestSteps
{
    class Program
    {
        static void Main(string[] args)
        {
            var u = new Uri("http://server:8080/tfs/DefaultCollection");
            var c = new VssClientCredentials();
            TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(u, c);
            tpc.EnsureAuthenticated();   
            ITestManagementService itms = tpc.GetService<ITestManagementService>();
            ITestManagementTeamProject ittp = itms.GetTeamProject("LCScrum");
            ITestSuiteBase suite = ittp.TestSuites.Find(352);
            ITestCaseCollection testCaseCollection = suite.AllTestCases;

            foreach (var tc in testCaseCollection)
            {
                ITestCase testcase = ittp.TestCases.Find(tc.Id);

                foreach (ITestAction action in testcase.Actions)
                {
                    Console.WriteLine(String.Format("{0} - {1}", testcase.Id, action));
                }
            }
            Console.Read();
        }
    }
}

好的,我终于自己弄明白了。 Andy 的回答和评论帮助我验证了我的代码是正确的。我刚刚发现我的代码在不调试时运行良好!调试时,在某个时候我注意到了这一点:

所以可能由于某处的延迟加载,无法验证附件调试时间的计数(请参阅此处 post:Lazy<T>: "The function evaluation requires all threads to run")。