工作项链接 Queries/Scripts 用于 Visual Studio 团队服务 (VSTS) 中的报告

Work Item Linked Queries/Scripts for Reporting in Visual Studio Team Services (VSTS)

我想创建一份关于我的 VSTS 团队项目的报告,其中包含团队项目中工作项链接关系的详细信息。例如:Epics→功能→用户故事。由于 Epics 和功能之间以及功能和用户故事之间存在 parent/child 关系,我想创建一个报告(.csv 或 .xls),其中包含这些工作项及其关系的所有详细信息。

有人可以告诉我实现此目标的最佳和最简单的方法是什么吗?

我建议您可以使用 TFS add-in(包含在 VS 或团队资源管理器中)通过项目检查它。

  1. 创建查询(工作项树)
  2. 打开项目
  3. 点击团队=>选择团队项目
  4. 单击获取工作项=>Select 该查询=>查找=>Select 全部=>确定

之后您可以在项目中查看结果,您也可以通过单击相应的标题折叠 parent 项目。

您可以通过使用 TFS API 和 Excel add-in.

以编程方式实现它
  1. 创建 document level excel add-in project
  2. 安装Microsoft Team Foundation Server Extended Client package
  3. 运行使用Query.RunLinkQuery方法查询。
  4. 在需求测试套件中获取测试用例
  5. 查看这些测试用例的测试结果
  6. 获取测试结果的关联工作项
  7. 根据您的详细要求将数据保存到 excel。

简单代码:

var credentials = new NetworkCredential("[user name]", "[password]");
            TfsTeamProjectCollection tfsCollection = new TfsTeamProjectCollection(new Uri("https://XX.visualstudio.com"));
            ITestManagementService tms = tfsCollection.GetService<ITestManagementService>();
            ITestManagementTeamProject teamProject = tms.GetTeamProject("[team project name]");
            WorkItemStore workitemstore = tfsCollection.GetService<WorkItemStore>();
            QueryHierarchy queryRoot = workitemstore.Projects["[team project name]"].QueryHierarchy;
            QueryFolder queryFolder = queryRoot["Shared Queries"] as QueryFolder;
            QueryDefinition qd = queryFolder["[query name]"] as QueryDefinition;
            Dictionary<string, string> variables = new Dictionary<string, string>();
            variables.Add("project", "[team project name]");
            Query query = new Query(workitemstore, qd.QueryText, variables);

            var results = query.RunLinkQuery();
            foreach(var lr in results)
            {
                //check relationship according to sourceId, TargetId and LinkTypeId (2: child)
                int parentId = lr.SourceId;
                int currentId = lr.TargetId;
            }

            foreach (ITestPlan p in teamProject.TestPlans.Query("Select * From TestPlan"))
            {
                Console.WriteLine("Plan - {0} : {1}", p.Id, p.Name);

                foreach (var suite in p.RootSuite.SubSuites)
                {
                    IRequirementTestSuite requirementSuite = suite as IRequirementTestSuite;
                    if (requirementSuite != null)
                    {
                        var requirementId = requirementSuite.RequirementId;
                        //check requirementId with user story Id
                        foreach(var tc in requirementSuite.TestCases)
                        {
                            var lastResult = teamProject.TestResults.ByTestId(tc.Id).OrderByDescending(tr => tr.DateStarted).FirstOrDefault();
                            if(lastResult.Outcome== Microsoft.TeamFoundation.TestManagement.Client.TestOutcome.Failed)
                            {
                               int[] ids= lastResult.QueryAssociatedWorkItems();
                                foreach(int id in ids)
                                {
                                    var wit = workitemstore.GetWorkItem(id);
                                }

                            }

                        }


                    }
                }
            }