16

TFS API を使用してテスト結果を取得するサンプルをいくつか見つけましたが、プログラムによる結果の作成に関するドキュメントはありません。私の目的は、Microsoft Test Manager を使用して手動テストを実行するための軽量な代替手段を作成することです。誰もこれを経験していますか?私が見逃している例はありますか?

これが私がこれまでに持っているものです:

ITestCaseResult CreateNewTestCaseResult(ITestSuiteEntry testCaseEntry)
{
    var run = testCaseEntry.TestSuite.Plan.CreateTestRun(false /* not automated */);
    run.AddTest(testCaseEntry.TestCase.Id, suiteEntry.TestSuite.DefaultConfigurations[0].Id, suiteEntry.TestSuite.Plan.Owner);
    run.Save(); // so that results object is created
    return run.QueryResults()[0];
}

これが新しい実行を開始する正しい方法かどうかはわかりません。また、テストの各アクションの結果を記録する方法もわかりません。

4

2 に答える 2

15

2012 年 8 月 15 日更新:

以下のサンプルは、オープン ソースの TFS Test Steps Editor ツールに統合されました。最新バージョンでは、テスト結果を TFS に公開する機能が追加されました。GitHubのソースを参照してください。


テスト結果を公開するための作業コードができました。次のコードは ITestPoint (これは特定のスイート内のテスト ケースを表します) を受け入れ、各ステップの結果と添付パスを提供するだけのいくつかの内部クラス (含まれていません) を持っていることに注意してください。

var tfsRun = _testPoint.Plan.CreateTestRun(false);

tfsRun.DateStarted = DateTime.Now;
tfsRun.AddTestPoint(_testPoint, _currentIdentity);
tfsRun.DateCompleted = DateTime.Now;
tfsRun.Save(); // so results object is created

var result = tfsRun.QueryResults()[0];
result.Owner = _currentIdentity;
result.RunBy = _currentIdentity;
result.State = TestResultState.Completed;
result.DateStarted = DateTime.Now;
result.Duration = new TimeSpan(0L);
result.DateCompleted = DateTime.Now.AddMinutes(0.0);

var iteration = result.CreateIteration(1);
iteration.DateStarted = DateTime.Now;
iteration.DateCompleted = DateTime.Now;
iteration.Duration = new TimeSpan(0L);
iteration.Comment = "Run from TFS Test Steps Editor by " + _currentIdentity.DisplayName;

for (int actionIndex = 0; actionIndex < _testEditInfo.TestCase.Actions.Count; actionIndex++)
{
    var testAction = _testEditInfo.TestCase.Actions[actionIndex];
    if (testAction is ISharedStepReference)
        continue;

    var userStep = _testEditInfo.SimpleSteps[actionIndex];

    var stepResult = iteration.CreateStepResult(testAction.Id);
    stepResult.ErrorMessage = String.Empty;
    stepResult.Outcome = userStep.Outcome;

    foreach (var attachmentPath in userStep.AttachmentPaths)
    {
        var attachment = stepResult.CreateAttachment(attachmentPath);
        stepResult.Attachments.Add(attachment);
    }

    iteration.Actions.Add(stepResult);
}

var overallOutcome = _testEditInfo.SimpleSteps.Any(s => s.Outcome != TestOutcome.Passed)
    ? TestOutcome.Failed
    : TestOutcome.Passed;

iteration.Outcome = overallOutcome;

result.Iterations.Add(iteration);

result.Outcome = overallOutcome;
result.Save(false);
于 2011-11-18T19:11:25.357 に答える