我已经定义了DEBUG和TRACE。我尝试过Trace.WriteLine、Debug.WriteLine,Console.WriteLine和TestContext.WriteLine。在"测试结果"窗口中,我添加了Output(StdOut)、Errors(StdError)、Debug Trace和Stack Trace列。我已经在"输出"窗口中尝试了所有可用于不同流的"显示输出自"选项。我已经查看了输出摘要窗口中的所有图形和内容。我在任何地方都找不到单个字节的跟踪输出。
我在VS2008中也遇到了同样的问题,其中负载测试是一个新的、粗糙的功能。。。我原以为升级会让事情变得更容易,但事实并非如此。
在网络上,人们都在谈论在这些测试中将跟踪消息记录到控制台,就好像这是世界上最简单、最明显的事情一样。在正常调试期间,只有在运行负载测试时,我对这种跟踪输出没有任何问题。为什么我找不到办法呢?
[UPDATE]我找到了部分答案:我可以在失败的测试运行中看到跟踪输出。在一次失败的运行之后,图形和统计数据页面打开,在不同的地方,都有一个错误链接。单击该按钮并打开"负载测试错误"窗口,右键单击错误并选择"查看详细信息",您会看到一个页面,其中有一个"附加信息"部分,该部分包括使用TestContext.WriteLine编写的任何消息。还有一个调试跟踪部分,其中包含使用Debug.WriteLine.编写的消息
但我看不出有什么方法可以成功地看待这个输出。(能够将某些输出组合到一个流中会很好,但我想我能理解为什么必须手动实现。)
经过大量搜索,我终于找到了这个问题的答案。请注意,正如您所指出的,根据默认设置,它只在出现错误时进行日志记录(错误详细信息屏幕中附加信息下的日志)。该设置位于"运行设置"属性、部分日志记录、默认值为"true"的属性"测试失败时保存日志"下。
现在来看解决方案。除此属性外,还有一个名为"保存已完成测试的日志频率"的属性。默认值为0。此属性用于保存N个测试中的一个测试的测试日志。如果您希望100%创建日志,则将其设置为1。1中的1为100%。
完成此操作后,要查找日志,请在结果屏幕中(右键单击负载测试并选择"打开并管理结果…"),导航到"详细信息"选项卡,其中会显示一些图表。将鼠标指针悬停在"虚拟用户活动图表"中的各个测试上,您将看到"测试日志"的链接。哇!任务完成。
也许是因为您想要的东西不可用。
我使用的方法是打开一个StreamWriter
来写入一个文本文件。在某些情况下,我使用以下样式的代码:
private void WriteLineToTestLog(string line)
{
StreamWriter sw = File.AppendText("C:\Windows\Temp\MyWebtestsLog.txt");
sw.WriteLine(System.DateTime.Now + " " + line);
sw.Close();
}
对于许多虚拟用户的测试,我担心上面代码的性能。所以我制作了一个版本,它有一个由锁保护的共享流:
public class SingletonWriter
{
private static object myLock = new object();
private static SingletonWriter mySingleton = null;
private StreamWriter outStream;
public static string AgentId { get; set; } // Set when running with multiple agent computers.
private SingletonWriter()
{
if ( AgentId == null ) { AgentId = "00"; }
string streamName = @"TestStatus." + System.DateTime.Now.ToString("yyyy-MM-dd.HHmm.") + AgentId + ".log";
System.Console.WriteLine("Writing to " + streamName);
outStream = new StreamWriter(streamName, true); // true means append to an existing file.
outStream.WriteLine("Start of output");
outStream.Flush();
}
public static void WriteLine(string line)
{
lock (myLock)
{
if (mySingleton == null)
{
mySingleton = new SingletonWriter();
}
mySingleton.outStream.WriteLine(line);
mySingleton.outStream.Flush();
}
}
}
这是从其他网络测试中的插件调用的,代码如下:
StringBuilder message sb = new StringBuilder();
sb.Append(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff "));
sb.Append(e.WebTest.Name);
sb.Append(...); // More useful data
string message = sb.ToString();
e.WebTest.AddCommentToResult(message);
SingletonWriter.WriteLine(message);
日志文件被写入执行测试的计算机中。由于这可能是一台代理计算机,因此需要将文件从代理复制到要对其进行分析的计算机上。当使用Visual Studio Online运行测试时,代码也可以正常工作,但我没有找到任何方法来查看或收集此类测试运行的日志文件。