工作项链接 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 或团队资源管理器中)通过项目检查它。
之后您可以在项目中查看结果,您也可以通过单击相应的标题折叠 parent 项目。
您可以通过使用 TFS API 和 Excel add-in.
以编程方式实现它
- 创建 document level excel add-in project
- 安装Microsoft Team Foundation Server Extended Client package
- 运行使用Query.RunLinkQuery方法查询。
- 在需求测试套件中获取测试用例
- 查看这些测试用例的测试结果
- 获取测试结果的关联工作项
- 根据您的详细要求将数据保存到 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);
}
}
}
}
}
}
我想创建一份关于我的 VSTS 团队项目的报告,其中包含团队项目中工作项链接关系的详细信息。例如:Epics→功能→用户故事。由于 Epics 和功能之间以及功能和用户故事之间存在 parent/child 关系,我想创建一个报告(.csv 或 .xls),其中包含这些工作项及其关系的所有详细信息。
有人可以告诉我实现此目标的最佳和最简单的方法是什么吗?
我建议您可以使用 TFS add-in(包含在 VS 或团队资源管理器中)通过项目检查它。
之后您可以在项目中查看结果,您也可以通过单击相应的标题折叠 parent 项目。
您可以通过使用 TFS API 和 Excel add-in.
以编程方式实现它- 创建 document level excel add-in project
- 安装Microsoft Team Foundation Server Extended Client package
- 运行使用Query.RunLinkQuery方法查询。
- 在需求测试套件中获取测试用例
- 查看这些测试用例的测试结果
- 获取测试结果的关联工作项
- 根据您的详细要求将数据保存到 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);
}
}
}
}
}
}