TFS API:如何从共享步骤中获取附件?

TFS API: How to get attachments from shared steps?

这是我在测试管理器的测试结果中看到的:一些附件 (1) 在测试步骤上(在本例中 - 在共享步骤上)。有些 (2) 在结果级别。在我正在处理的报告中,我可以提取有关附件 (2) 的信息,但无法获取有关 (1) 的信息。有什么建议吗?

在调试器中我可以看到,步骤是重复的,我可以看到,即 "Verify the stuff" 字符串等,但是该步骤有 0 个附件。

作为参考,这是我用来提取测试用例结果的大部分代码:

foreach (ITestCaseResult testCaseResult in resutlsToDisplay)
{
    project.TestCases.Find(test.Id);

    var testRun = testCaseResult.GetTestRun();
    var testPlanEntry = project.TestPlans.Find(testRun.TestPlanId);
    var artifacts = testCaseResult.QueryAssociatedWorkItemArtifacts();
    if (testPlanEntry.Name != testPlan)
        continue;

    var testResult = new TestResult // CUSTOM CLASS
    {
        TestConfiguration = testCaseResult.TestConfigurationName,
        TestRun = testRun.Id,
        DateCreated = testRun.DateCreated,
        DateStarted = testRun.DateStarted,
        DateCompleted = testRun.DateCompleted,
        Result = testCaseResult.Outcome.ToString(),
        TestResultComment = testRun.Comment,
        RunBy = testCaseResult.RunBy == null ? "" : testCaseResult.RunBy.DisplayName,
        Build = testRun.BuildNumber ?? ""
    };

    foreach (var iteration in testCaseResult.Iterations)
    {
        var iterationResult = testResult.Clone();
        iterationResult.ResultAttachmentHtml = getAttachments(iteration.Attachments, testCase.TestCaseId.ToString(), string.Empty, iteration.IterationId.ToString()); // HERE I GET THE ATTACHMENTS OF TYPE 2
        iterationResult.Iteration = iteration.IterationId;
        iterationResult.IterationComment = iteration.Comment;

        foreach (var step in steps)
        {
            var stepCopy = step.Clone();
            iterationResult.Steps.Add(stepCopy);
            var actionResult = iteration.FindActionResult(stepCopy.TestStep);
            if (actionResult == null)
                continue;

            stepCopy.Result.Comment = actionResult.ErrorMessage;
            stepCopy.Result.Result = actionResult.Outcome.ToString();
            stepCopy.Result.AttachmentHtml = getAttachments(actionResult.Attachments, testCase.TestCaseId.ToString(), step.Number, iteration.IterationId.ToString()); // HERE I DO NOT GET ATTACHMENTS OF TYPE 1 - WHY?
        }
        config.TestCaseResult.TestResults.Add(iterationResult);
    }
} //end foreach testCaseResult in resutlsToDisplay

我想我终于明白了。

ITestCaseResult 包含 ITestIterationResultCollection 迭代。

ITestIterationResult 包含 ITestActionResult 的 TestActionResultCollection。

ITestActionResult 可以是 ITestStepResult 或 ISharedStepResult。

如果它是 ITestStepResult,那么它就有附件集合。

但是,如果它是 ISharedStepResult,则它有自己的 TestActionResultCollection。所以这是我必须迭代以查找每个成员是否都有附件的那个。

迭代步骤(包括共享步骤)的代码如下所示:

foreach (ITestIterationResult iteration in testCaseResult.Iterations)
{
    var iterationResult = testResult.Clone();
    iterationResult.ResultAttachmentHtml = getAttachments(iteration.Attachments,
        testCase.TestCaseId.ToString(),
        string.Empty, iteration.IterationId.ToString());
    iterationResult.Iteration = iteration.IterationId;
    iterationResult.IterationComment = iteration.Comment;

    foreach (ITestActionResult action in iteration.Actions)
    {
        if (action is ITestStepResult)
        {
            GetStepResults(steps, action, iterationResult, iteration, getAttachments, testCase, false);
        }
        else if (action is ISharedStepResult)
        {
            ISharedStepResult result = action as ISharedStepResult;
            foreach (var sharedAction in result.Actions)
            {
                if (sharedAction is ITestStepResult)
                {
                    GetStepResults(steps, sharedAction, iterationResult, iteration, getAttachments, testCase, true);
                }
            }
        }
    }