C# 通过API获取TFS中失败的TestCaseResult的StackTrace

C# 通过API获取TFS中失败的TestCaseResult的StackTrace,c#,tfs,stack-trace,testcase,C#,Tfs,Stack Trace,Testcase,ITestCaseResult有一个属性“ErrorMessage” ErrorMessage属性的最大大小为527字节,不足以存储重要的异常结构,不幸的是,它似乎没有适当的异常属性来存储一个异常结构 我的问题是,当测试失败时,如何获得堆栈跟踪?我知道它是可用的,因为GUI可以在VisualStudio中启动它 如您所见,与ITestCaseResult关联的错误消息被截断。(如果使用浏览器进行缩放,图像将恢复清晰度。) 我在RunInfo对象中找到了一个可能的线索: 它有一个适当的异常结

ITestCaseResult有一个属性“ErrorMessage

ErrorMessage属性的最大大小为527字节,不足以存储重要的异常结构,不幸的是,它似乎没有适当的异常属性来存储一个异常结构

我的问题是,当测试失败时,如何获得堆栈跟踪?我知道它是可用的,因为GUI可以在VisualStudio中启动它

如您所见,与ITestCaseResult关联的错误消息被截断。(如果使用浏览器进行缩放,图像将恢复清晰度。)

我在RunInfo对象中找到了一个可能的线索:


它有一个适当的异常结构,似乎与运行相关,但我无法将itestcasesultRunInfo对象之间的点连接起来。我可能找错了方向。

我认为Visual Studio从TRX文件中获取此信息,该文件作为测试运行的附件存储

我得到的附件如下:

            TfsTeamProjectCollection tfsCollection = new TfsTeamProjectCollection(new Uri("http://tfsserver:8080/tfs/CTS"));
            ITestManagementService tfsStore = tfsCollection.GetService<ITestManagementService>();
            ITestManagementTeamProject tcmProject = tfsStore.GetTeamProject("MyProject");

            // Get Test Run Data by Build
            ITestRun thisTestRun = tcmProject.TestRuns.ByBuild(new Uri("vstfs:///Build/Build/" + buildnum)).First();
            foreach (ITestAttachment attachment in thisTestRun.Attachments)
            {
                if (attachment.AttachmentType == AttachmentTypes.TrxTmiTestRunSummary)
                {
                    WebRequest request = HttpWebRequest.Create(attachment.Uri);
                    request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                    WebResponse response = request.GetResponse();
                    using (System.IO.Stream responseStream = response.GetResponseStream())
                    {
                        System.IO.StreamReader reader = new System.IO.StreamReader(responseStream);
                        trxFile.Load(reader);
                    }

                    break;
                }
            }

我使用此引用获取获取附件的代码:

thisTestRun是一个ITestRunYes,我在示例中添加了一些设置代码以澄清。
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(trxFile.NameTable);
                nsmgr.AddNamespace("vstt", "http://microsoft.com/schemas/VisualStudio/TeamTest/2010");

                // get result node for this testcase from trx file
                XmlNode node =
                    trxFile.SelectSingleNode(
                        "//vstt:UnitTestResult[@testName=\"SourceWorkflowAsSvcWhenErrorConvertingFile\"]/vstt:Output/vstt:ErrorInfo",
                        nsmgr);
                if (node != null)
                {
                    Console.WriteLine("Stack Trace: " + node.InnerText);
                }