【问题标题】:Getting the StackTrace for a TestCaseResult that Failed in TFS via API通过 API 获取 TFS 中失败的 TestCaseResult 的 StackTrace
【发布时间】:2014-06-10 23:24:17
【问题描述】:

ITestCaseResult 有一个属性“ErrorMessage

ErrorMessage 属性的最大大小为 527 字节,这不足以存储重量级的 Exception 结构,不幸的是似乎没有合适的 Exception 属性来存储一个。

我的问题是,当测试失败时,如何获得 StackTrace?我知道它可用,因为 GUI 可以在 Visual Studio 中拉出它

正如您所见,与 ITestCaseResult 关联的 ErrorMessage 被缩短了。 (如果您使用浏览器进行缩放,图像会恢复其清晰度。

我在 RunInfo 对象中发现了可能的线索: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.common.runinfo.aspx.

它具有适当的异常结构,并且似乎与运行相关联,但我无法连接 ITestCaseResultRunInfo 对象之间的点。我可能找错树了。

【问题讨论】:

    标签: c# tfs stack-trace testcase


    【解决方案1】:

    我认为 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;
                    }
                }
    

    然后为了获取命名测试的堆栈跟踪,我执行了以下操作:

                    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);
                    }
    

    我使用这个参考来获取获取附件的代码:http://social.msdn.microsoft.com/Forums/vstudio/en-US/7fecbac7-7c42-485f-9dd2-5bcb4e71fc39/retrieving-trx-file-stored-in-tfs-for-a-test

    【讨论】:

    • thisTestRun 是一个 ITestRun
    • 是的,我在示例中添加了一些设置代码以进行澄清。
    猜你喜欢
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多