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