2015-11-18 1 views
0

J'ai défini DEBUG et TRACE. J'ai essayé Trace.WriteLine, Debug.WriteLine, Console.WriteLine et TestContext.WriteLine. Dans la fenêtre Résultats des tests, j'ai ajouté des colonnes pour la sortie (StdOut), les erreurs (StdError), la trace de débogage et la trace de pile. J'ai essayé toutes les options "Afficher la sortie de" disponibles pour différents flux dans la fenêtre Sortie. J'ai regardé partout dans la fenêtre de résumé de sortie avec les graphiques et d'autres choses. Et nulle part je ne peux trouver un seul octet de sortie de trace. J'ai eu le même problème avec VS 2008, dans lequel les tests de charge étaient une fonctionnalité nouvelle et brute ... Je pensais que la mise à niveau faciliterait les choses, mais ce n'est pas le cas. Les gens parlent de consigner les messages de trace sur une console dans ces tests comme si c'était la chose la plus facile et la plus évidente dans le monde. Je n'ai aucun problème avec ce type de sortie de trace lors du débogage normal, uniquement lors de l'exécution de tests de charge. Pourquoi ne puis-je pas trouver un moyen de le faire? [UPDATE] J'ai trouvé une réponse partielle: je peux voir la sortie de trace sur les tests qui échouent. Après une exécution avec des échecs, la page des graphiques et des statistiques s'ouvre, et à divers endroits, il y a un lien vers les erreurs. Cliquez sur cela et ouvrez la fenêtre Charger les erreurs de test, cliquez avec le bouton droit sur une erreur et sélectionnez Afficher les détails, et vous obtenez une page dans laquelle il existe une section "Informations supplémentaires" et cette section inclut tous les messages écrits avec TestContext.WriteLine. Il y a aussi une section Debug Trace qui a des messages écrits avec Debug.WriteLine.Pourquoi ne puis-je voir aucune sortie de console ou de trace lors de l'exécution de tests de chargement dans VS 2015?

Mais je ne vois pas un moyen de regarder cette sortie pour une exécution réussie. (Et ce serait bien de pouvoir combiner certaines sorties en un seul flux, mais je suppose que je peux voir pourquoi il faudrait l'implémenter manuellement.)

Répondre

2

Peut-être parce que ce que vous voulez n'est pas disponible.

La méthode que j'utilise est d'ouvrir un StreamWriter pour écrire dans un fichier texte. Pour certains cas, j'utiliser le code dans le style:

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

Pour les tests avec de nombreux utilisateurs virtuels je me suis inquiété de la performance du code ci-dessus. Donc, je produisais une version qui a un flux partagé protégé par une serrure:

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

Ceci est appelé de plug-ins dans d'autres tests web avec le code tels que:

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

Les fichiers journaux sont écrits sur le ordinateur où le test s'exécute. Comme il peut s'agir d'un ordinateur agent, les fichiers devront être copiés de l'agent et sur l'ordinateur où ils doivent être analysés. Le code fonctionne également sans erreur lorsque des tests sont exécutés avec Visual Studio Online, mais je n'ai trouvé aucun moyen d'afficher ou de collecter les fichiers journaux à partir de ces tests.

+0

Je pense que vous avez peut-être raison de dire que vous ne pouvez pas vous y rendre à partir d'ici, et que vous devez produire votre propre sortie ... mais je continue à voir des choses qui semblent simples. Peut-être qu'ils signifient dans des cas similaires - comme peut-être que vous pouvez le faire dans les tests, tant qu'ils ne sont pas des tests de charge. –

+0

@PaulKienitz Pouvez-vous fournir des liens vers les déclarations disant que c'est facile? – AdrianHHH