在VS 2015中运行负载测试时,为什么我看不到任何控制台或跟踪输出?

时间:2015-11-18 01:40:33

标签: visual-studio-2015 load-testing test-project

我已经定义了DEBUG和TRACE。我已经尝试过Trace.WriteLine,Debug.WriteLine,Console.WriteLine和TestContext.WriteLine。在“测试结果”窗口中,我添加了输出(StdOut),错误(StdError),调试跟踪和堆栈跟踪的列。我已尝试在“输出”窗口中为不同的流提供所有“显示输出”选项。我已经查看了输出摘要窗口中的图形和内容。我无处可寻找单个字节的跟踪输出。

我在VS 2008中遇到了同样的问题,其中负载测试是一个新的粗糙功能......我认为升级会让事情变得更容易,但事实并非如此。

网络上的所有人都在谈论在这些测试中将跟踪消息记录到控制台,好像这是世界上最容易和最明显的事情。只有在运行负载测试时,我才能在正常调试期间使用这种跟踪输出。为什么我找不到办法呢?

[更新]我找到了一个部分答案:我可以看到测试运行中的跟踪输出失败。运行失败后,将打开图形和统计信息页面,并在各个位置显示错误链接。单击它并打开“加载测试错误”窗口,右键单击错误并选择“查看详细信息”,然后会出现一个页面,其中包含“附加信息”部分,该部分包含使用TestContext.WriteLine编写的任何消息。还有一个Debug Trace部分,其中包含使用Debug.WriteLine编写的消息。

但是我没有办法看到这个输出成功运行。 (并且能够将某些输出组合成单个流会很好,但我想我可以理解为什么必须手动实现它。)

2 个答案:

答案 0 :(得分:2)

也许是因为你想要的东西不可用。

我使用的方法是打开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();
        }
    }
}

这是从其他Web测试中的插件调用的,代码如下:

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运行测试时,代码也可以正常运行,但我没有找到任何查看或从这些测试运行中收集日志文件的方法。

答案 1 :(得分:2)

经过大量搜索,我终于找到了答案。请注意,如前所述,默认设置仅在发生错误时记录日志(错误详细信息屏幕中其他信息下的日志),该设置位于“运行设置”属性,部分日志记录,属性“保存“登录失败时登录”,其默认值为“ true”。

现在解决。在该属性旁边,有一个称为“为完成的测试保存日志频率”。默认值为0。此属性用于保存N个测试中之一的测试日志。如果您希望100%的时间创建日志,则将其设置为1。1之1是100%。

完成此操作后,在结果屏幕中找到日志(右键单击负载测试,然后选择“打开并管理结果..”),导航至“详细信息”选项卡,其中将显示一些内容。图。将鼠标指针悬停在“虚拟用户活动图表”中的各个测试上,您将在此处看到指向“测试日志”的链接。瞧!任务完成。