2016-07-27 7 views
2

ContextAnzeige getestet URL wenn Selenium Test läuft Tool vstest.console.exe

ich konfiguriert Jenkins Job, die # Tests Selen C ausführt. Wenn ein Job bauen, muss ich zwei Werte liefern:

  • Zweig meiner Lösung
  • URL aufzubauen, die

Ausführliche Beschreibung

Jenkins führt die folgenden Schritte getestet werden soll :

  • Kasse ausgewählte Zweigs
  • URL in AppSettings mit URL durch den Benutzer ("TestedURL")
  • build Lösung
  • bereitgestellt gespeichert ersetzen

    vstest.console.exe Werkzeug (die mit Visual Studio 2012, bestehen in folgendem Pfad kommt ausführen: " Microsoft Visual Studio 11.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow ") wie folgt:

    vstest.console.exe "c: \ myProject \ bin \ Debug \ myProject.Test.dll"

Frage

Ich möchte sicherstellen, dass die richtige URL getestet wird: Ich möchte URL in der Konsolenausgabe der Ausgabe Jenkins/vstest.console.exe anzeigen.

Ich habe meinen Code nach verschiedenen Antworten auf StackOverflow geändert.

Die URL ist in der Testausgabe direkt in Visual Studio sichtbar. Leider sehe ich immer noch keine Test-URL in der vstest.console.exe/Jenkins-Ausgabe.

Wie URL in der Ausgabe anzeigen (wie printMessage-Methode ändern)?

Mein Code ist wie folgt:

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using System; 
using System.Configuration; 
using System.Diagnostics; 

namespace My.Test 
{ 
    [TestClass] 
    public class MyTests 
    { 
     IWebDriver driver; 
     string baseURL; 

     [TestInitialize] 
     public void Initialize() 
     { 
      System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      // URL is replaced by the value provided in Jenkins 
      baseURL = config.AppSettings.Settings["TestedURL"].Value; 
      driver = new ChromeDriver(); 
      driver.Navigate().GoToUrl(baseURL); 
      printMessage(string.Format("Tested URL: '{0}'", baseURL)); 
     } 

     private TestContext testContextInstance; 
     /// <summary> 
     ///Gets or sets the test context which provides 
     ///information about and functionality for the current test run. 
     ///</summary> 
     public TestContext TestContext 
     { 
      get 
      { 
       return testContextInstance; 
      } 
      set 
      { 
       testContextInstance = value; 
      } 
     } 

     private void printMessage(string message) 
     { 
      // Method should display custom message in both Visual Studio output and Jenkins (vstest.console.exe) output 
      Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); 
      Trace.Listeners.Add(new ConsoleTraceListener()); 
      Trace.WriteLine(message); 
      Debug.WriteLine(message); 
      TestContext.WriteLine(message); 
      Console.WriteLine(message); 
     } 
    } 
} 

Antwort

0

Da ich keine direkte Lösung finden, kann ich eine Abhilfe gefunden habe.

vstest.console.exe hat /logger: trx Option, die Datei mit Erweiterung .trx generiert. Erwähnte Datei ist eine XML, die Testergebnisse zusammen mit Std-Ausgabe enthält. Mir ist aufgefallen, dass Nachrichten, wenn ich meine Printmessage innerhalb von Testmethoden verwende (in der Std-Ausgabe in der trx-Datei).

Lassen Sie mich ein Teil der erzeugten .trx-Datei zur Verfügung:

<Output> 
    <StdOut>Tested URL was 'http://someURL' 

Debug Trace: 
Tested URL: 'http://someURL' 
Trying to log into as 'Incorrect account' 

TestContext Messages: 
Tested URL: 'http://someURL' 
Trying to log into as 'Incorrect account'</StdOut> 
     </Output> 
    </UnitTestResult> 

einige Werkzeug Es gibt die Umwandlung von .trx ermöglicht .html. So kann Jenkins in Konsolenausgabe Link zu den Testergebnissen zeigen.


ABER

Ich habe Probleme, weil ich nicht Werkzeug, das richtig funktioniert finden und zeigt Std Ausgabe in generierten HTML-Datei. Seitdem schrieb ich folgenden Powershell-Code:

# set $inputTRXFile, $outputHTMLFile before running following lines 
$results = ([xml] (Get-Content $inputTRXFile)).TestRun.Results.UnitTestResult 
$results | select testname,outcome,duration, @{Name="Output";Expression={$_.Output.InnerText}} | ConvertTo-HTML -head $a -title "Test results" | Out-File $outputHTMLFile