TFS API 和报告性能:通过测试计划获取测试用例结果?
TFS API and report performance: get test case results by test plan?
在报告中,我需要展示某个测试计划的所有测试结果。
目前我正在使用以下功能:
foreach (TestCase testCase in testCasesByWorkItem)
{
List<ITestCaseResult> testCaseResults = teamProject.TestResults.ByTestId(testCase.TestCaseId).Where(x => x.State == TestResultState.Completed).ToList();
....
}
我的理解是returns这个测试用例的所有结果,一个测试用例可能属于多个测试计划。
我的问题是性能。该操作最多需要 25 秒(在调试模式下),我有数千个测试用例。
我只需要那些属于某个测试计划的测试用例结果。
例如,TestCaseX 可能已针对测试计划 Release1.0、Release2.0、.... Release20.0 执行。我只对 Release15.0 的结果感兴趣。
目前我检索结果如上,稍后通过正确的测试计划进行过滤。
有没有一种方法可以通过某种方式只选择属于给定测试计划的测试结果来优化性能?
您可能会发现使用 TFS Rest API 对您尝试做的事情很有用。
https://www.visualstudio.com/en-us/docs/integrate/api/test/runs
您将能够使用页面上列出的第一个 API 获取给定 planId 的所有测试运行的列表,然后使用 runId 获取所有测试 returns 使用测试结果 API
https://www.visualstudio.com/en-us/docs/integrate/api/test/results_1_0
就我个人而言,我发现使用 API 比使用对象模型要容易得多。
您可以使用以下示例针对测试计划 ID 获取测试 运行s:
TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(new Uri("http://tfsservername:8080/tfs/DefaultCollection"));
ITestManagementService testmanagementService = tfctc.GetService<ITestManagementService>();
var teamproject = testmanagementService.GetTeamProject("teamprojectname");
var testruns = testmanagementService.QueryTestRuns("select * From TestRun");
List<ITestRun> testrunInPlan = new List<ITestRun>();
foreach (var testrun in testruns)
{
if (testrun.TestPlanId==31) // in this case TestPlanId is 31
{
testrunInPlan.Add(testrun);
}
}
下面的示例获取特定测试的测试用例结果运行:
ITestCaseResultCollection testcases = testrun.QueryResults();
foreach (ITestCaseResult testcase in testcases)
{
Console.WriteLine("TestCase ID: " + testcase.TestCaseId);
Console.WriteLine("TestCase Title: " + testcase.TestCaseTitle);
Console.WriteLine("Error Message: " + testcase.ErrorMessage);
}
有关测试管理的详细信息,请查看此博客 API:http://blogs.msdn.com/b/aseemb/archive/2012/08/07/code-snippets-on-test-management-apis.aspx
在报告中,我需要展示某个测试计划的所有测试结果。
目前我正在使用以下功能:
foreach (TestCase testCase in testCasesByWorkItem)
{
List<ITestCaseResult> testCaseResults = teamProject.TestResults.ByTestId(testCase.TestCaseId).Where(x => x.State == TestResultState.Completed).ToList();
....
}
我的理解是returns这个测试用例的所有结果,一个测试用例可能属于多个测试计划。
我的问题是性能。该操作最多需要 25 秒(在调试模式下),我有数千个测试用例。
我只需要那些属于某个测试计划的测试用例结果。
例如,TestCaseX 可能已针对测试计划 Release1.0、Release2.0、.... Release20.0 执行。我只对 Release15.0 的结果感兴趣。
目前我检索结果如上,稍后通过正确的测试计划进行过滤。
有没有一种方法可以通过某种方式只选择属于给定测试计划的测试结果来优化性能?
您可能会发现使用 TFS Rest API 对您尝试做的事情很有用。
https://www.visualstudio.com/en-us/docs/integrate/api/test/runs
您将能够使用页面上列出的第一个 API 获取给定 planId 的所有测试运行的列表,然后使用 runId 获取所有测试 returns 使用测试结果 API
https://www.visualstudio.com/en-us/docs/integrate/api/test/results_1_0
就我个人而言,我发现使用 API 比使用对象模型要容易得多。
您可以使用以下示例针对测试计划 ID 获取测试 运行s:
TfsTeamProjectCollection tfctc = new TfsTeamProjectCollection(new Uri("http://tfsservername:8080/tfs/DefaultCollection"));
ITestManagementService testmanagementService = tfctc.GetService<ITestManagementService>();
var teamproject = testmanagementService.GetTeamProject("teamprojectname");
var testruns = testmanagementService.QueryTestRuns("select * From TestRun");
List<ITestRun> testrunInPlan = new List<ITestRun>();
foreach (var testrun in testruns)
{
if (testrun.TestPlanId==31) // in this case TestPlanId is 31
{
testrunInPlan.Add(testrun);
}
}
下面的示例获取特定测试的测试用例结果运行:
ITestCaseResultCollection testcases = testrun.QueryResults();
foreach (ITestCaseResult testcase in testcases)
{
Console.WriteLine("TestCase ID: " + testcase.TestCaseId);
Console.WriteLine("TestCase Title: " + testcase.TestCaseTitle);
Console.WriteLine("Error Message: " + testcase.ErrorMessage);
}
有关测试管理的详细信息,请查看此博客 API:http://blogs.msdn.com/b/aseemb/archive/2012/08/07/code-snippets-on-test-management-apis.aspx