1

DEBUG と TRACE を定義しました。Trace.WriteLine、Debug.WriteLine、Console.WriteLine、および TestContext.WriteLine を試しました。[テスト結果] ウィンドウに、出力 (StdOut)、エラー (StdError)、デバッグ トレース、およびスタック トレースの列を追加しました。出力ウィンドウのさまざまなストリームで利用可能なすべての「出力元を表示」オプションを試しました。グラフなどで出力概要ウィンドウ全体を見てきました。そして、1 バイトのトレース出力がどこにも見つかりません。

私は VS 2008 でも同じ問題を抱えていました。負荷テストは新しく粗雑な機能でした... アップグレードすれば簡単になると思っていましたが、そうではありませんでした。

これらのテストでは、トレース メッセージをコンソールに記録することが世界で最も簡単で最も明白なことであるかのように、ウェブ全体で人々が話しています。負荷テストを実行している場合のみ、通常のデバッグ中にこの種のトレース出力に問題はありません。方法が見つからないのはなぜですか?

[更新] 部分的な回答が見つかりました: 失敗したテスト実行のトレース出力を確認できます。実行に失敗した後、グラフと統計のページが開き、さまざまな場所にエラーへのリンクがあります。それをクリックして [ロード テスト エラー] ウィンドウを開き、エラーを右クリックして [詳細の表示] を選択すると、[追加情報] セクションがあるページが表示され、そのセクションには TestContext.WriteLine で書き込まれたすべてのメッセージが含まれます。Debug.WriteLine で書き込まれたメッセージを含むデバッグ トレース セクションもあります。

しかし、成功した実行のためにこの出力を見る方法がわかりません。(そして、特定の出力を単一のストリームに結合できると便利ですが、それを手動で実装しなければならない理由がわかると思います。)

4

2 に答える 2

2

欲しいものが手に入らないからかもしれません。

私が使用する方法は、 を開いてStreamWriterテキスト ファイルに書き込むことです。場合によっては、次のスタイルのコードを使用します。

private void WriteLineToTestLog(string line)
{
    StreamWriter sw = File.AppendText("C:\\Windows\\Temp\\MyWebtestsLog.txt");
    sw.WriteLine(System.DateTime.Now + "  " + line);
    sw.Close();
}

多くの仮想ユーザーによるテストでは、上記のコードのパフォーマンスが心配でした。そこで、ロックで保護された共有ストリームを 1 つ持つバージョンを作成しました。

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 でテストを実行してもエラーなく動作しますが、そのようなテスト実行からログ ファイルを表示または収集する方法が見つかりませんでした。

于 2015-11-19T09:52:04.850 に答える