2015-09-29 9 views
6

Ich habe ein Automatisierungsframework, das eine Grunt-Task verwendet, um mehrere Spezifikationsdateien auszuführen. Einige werden mit einer vordefinierten Suite ausgeführt, andere verwenden Dateinamenskonventionen. Jede Spezifikationsdatei weist einen Durchschnitt von einem "Beschreib" -Block auf, wobei jeder üblicherweise mehrere "It" -Blöcke aufweist.Zusammenfassen der Winkelmesserergebnisse über mehrere Spezifikationsdateien

Ich bin derzeit Jasmin-spec-Reporter verwendet, die nützliche und detaillierte Ergebnisse nach jeder Spec-Datei gibt, die wie folgt aussieht:

------------------------------------ 
[chrome OS X 10.10 #1-78] PID: 1880 
[chrome OS X 10.10 #1-78] Specs: /**/**/jenkins/workspace/Main Suites/tests/User_Management/smoke_student_does_something.js 
[chrome OS X 10.10 #1-78] 
[chrome OS X 10.10 #1-78] Using SauceLabs selenium server at http://******* 
[chrome OS X 10.10 #1-78] Spec started 
[chrome OS X 10.10 #1-78] 
[chrome OS X 10.10 #1-78] 1 A student can link and unlink to another student account 
[chrome OS X 10.10 #1-78]  ✓ can link to another student account (33 secs) 
[chrome OS X 10.10 #1-78]  ✓ can unlink a student account (14 secs) 
[chrome OS X 10.10 #1-78] 
[chrome OS X 10.10 #1-78] Executed 2 of 2 specs SUCCESS in 46 secs. 
[chrome OS X 10.10 #1-78] SauceLabs results available at http://saucelabs.com/jobs/***************** 

[launcher] 5 instance(s) of WebDriver still running 

Protractor gibt mir eine ziemlich nutzlos Zusammenfassung Konsole ausgegeben, nachdem alle Jasmine berichtet, dass Referenzen von Task-IDs und Listen Bestanden + Fehler ergeben. Dies ist, was die Protractor Zusammenfassung wie folgt aussieht:

.... 
[launcher] chrome #1-69 passed 
[launcher] chrome #1-70 failed 1 test(s) 
[launcher] chrome #1-73 passed 
[launcher] chrome #1-71 passed 
[launcher] chrome #1-75 passed 
[launcher] chrome #1-72 passed 
[launcher] chrome #1-79 passed 
[launcher] chrome #1-74 passed 
[launcher] chrome #1-80 passed 
[launcher] chrome #1-81 passed 
[launcher] chrome #1-82 passed 
[launcher] chrome #1-84 passed 
[launcher] chrome #1-83 passed 
[launcher] chrome #1-85 passed 
[launcher] chrome #1-88 passed 
[launcher] chrome #1-87 passed 
[launcher] chrome #1-86 passed 
[launcher] chrome #1-76 passed 
[launcher] chrome #1-89 passed 
[launcher] chrome #1-90 passed 
[launcher] chrome #1-91 passed 
[launcher] chrome #1-92 passed 
[launcher] chrome #1-78 passed 
[launcher] chrome #1-93 passed 
[launcher] chrome #1-95 passed 
[launcher] chrome #1-77 passed 
[launcher] chrome #1-96 passed 
[launcher] chrome #1-94 failed 5 test(s) 
[launcher] overall: 12 failed spec(s) 
[launcher] Process exited with error code 1 
>> 
Warning: Tests failed, protractor exited with code: 1 Use --force to continue. 

Mein Problem ist, dass ich eine Zusammenfassung aller spec Dateien, nicht taskIds, nur für gescheiterte Spezifikationen sehen will, und erst, nachdem sie alles getan, was läuft . Der MVP wäre nur der Name der fehlgeschlagenen Spezifikationsdatei in einer Liste oder in eine Datei in einem leicht lesbaren Format geschrieben (XML, HTML, etc.). Nächste Iteration würde ich die "beschreiben" und "es" -Blockbeschreibungen, Fehlercodes und Saucenlabs Link neben jedem Fehler ähnlich dem Jasmin-Reporter haben.

Normalerweise habe ich Hunderte von Spezifikationsdateien in einem einzigen Job, und alle einzelnen Ergebnisse durchkämmen zu müssen, nur um herauszufinden, welche Spezifikationsdatei fehlgeschlagen ist ziemlich ärgerlich (da ich denke, dass eine automatisch generierte Zusammenfassung diese Information haben sollte). Ich muss buchstäblich eine Strg + F an der Konsolenausgabe für "Fehler" machen, nur um zu sehen, welche Spezifikationen fehlgeschlagen sind. Ich möchte es vermeiden, zu den Soßen für die Fehlerliste zu gehen, weil unsere Jobdurchläufe durch Jenkins organisiert sind. Die Konsolenausgabe sollte eine einfache erste Quelle/Referenz für eine Liste von Fehlern sein, sobald ein Job ausgeführt wurde.

Jeder Bereich eines Drittanbieters scheint nur auf die Spezifikationsebene zu gehen. Nachdem jede Spezifikationsdatei ausgeführt wurde, meldet sie sich und fährt mit der nächsten Datei fort, die den vorherigen Bericht überschreibt. Ich öffne den HTML- oder XML-Bericht, und es hat immer nur die Ergebnisse einer Spezifikationsdatei. Ich kann keine Informationen in eine Zusammenfassung für mehrere Spezifikationsdateien tragen. Ich habe die "konsolidieren (alle)" Einstellungen optimiert, und keiner scheint einen Bericht für alle Spezifikationsdateien zu erstellen. Sie scheinen jeweils nur eine Datei zu betrachten.

Ich habe mit den folgenden Reportern experimentiert:

Jasmin-Reporter

Jasmin-spec-Reporter

Winkelmesser-jasmine2-html-Reporter

Jasmin-json-Test-Reporter

Ich war in der Lage, den "reportSummary" Code des Gradmessers direkt zu manipulieren, um mir das meiste zu geben, was ich will (außer für die Sauce Links), aber das ist nicht ideal, da ich sie überzeugen müsste, es zu übernehmen. So sieht meine Zusammenfassung aus:

******************** 
* FAILED SPEC(S) * 
******************** 

/Playground/Test_Spec_2.js failed 2 test(s) 
    can log in once 
     FAILURE: Expected false to be true, 'Didn't see home page'. 
     FAILURE: Expected false to be true, 'Didn't see link'. 
    can log in twice 
     PASSED 
    can log in thrice 
     FAILURE: Expected false to be true, 'Didn't see home page'. 

/Playground/Test_Spec_3.js failed 1 test(s) 
    can login 
     FAILURE: Expected false to be true, 'Didn't see home page'. 

******************** 
*  SUMMARY  * 
******************** 
overall: 2/4 failed spec(s) 
******************** 

Fehle ich etwas mit der Verwendung dieser Jasmin-Reporter? Ist mein Framework nicht so konzipiert, dass es mit diesen Reportern so funktioniert, wie ich es möchte? Sollte ich die Winkelmesser nur davon überzeugen, ihren zusammenfassenden Reporter mit einigen Optionen zu verstärken?

+0

Ich denke, Ihre beste Wette könnte sein, eine Pull-Anfrage auf einen dieser Reporter für die Formatierungsoptionen, die Sie wollen. Ich bezweifle, dass du @Jmr überzeugen wirst, diese Art von Veränderung für dich zu machen. – MBielski

Antwort

0

Sie können allen Berichten beitreten, nachdem alle Ihre Tests ausgeführt wurden.So stellen Sie sicher, dass Sie alle Tests haben Sie im gleichen Ordner

return browser.getCapabilities().then(function (caps) { 
     var sessionId = caps.get('webdriver.remote.sessionid'); 
     var date = dateMethods.getCurrentDate(); 
     var folder = 'test-results/reports-' + date; 
     jasmine.getEnv().addReporter(new yourReporter({ 
      savePath: folder + '/report' + '-' + sessionId.substr(0, 5) 
     })); 
    }); 

Dann können Sie sich ihnen anzuschließen wollen und löschen Sie den Ordner (mit dem „fs“ Modul oder so ähnlich) oder benennen Sie sie so jedes Mal, wenn Sie laufen Sie erstellen einen neuen Ordner

0

ich diesen Reporter bin mit: https://www.npmjs.com/package/protractor-jasmine2-screenshot-reporter ich habe vollständigen Bericht für alle spec-Dateien täglich mit diesem Code in meiner spec-Datei

var HtmlScreenshotReporter = require(process.env['USERPROFILE'] + '/node_modules/protractor-jasmine2-screenshot-reporter'); 
var utils = require('../util/utils.js'); 
var reporter = new HtmlScreenshotReporter({ 
dest: 'target/screenshots_'+ utils.returnToday("_"), 
filename: 'AutoTestRun-report.html' 
}); 

beforeLaunch: function() { 
    return new Promise(function(resolve){ 
     reporter.beforeLaunch(resolve); 
    }); 
    }, 
onPrepare: function() { 
    jasmine.getEnv().addReporter(reporter); 
    browser.driver.manage().window().maximize(); 
    browser.driver.get('https://core.arkcase.dev.armedia.com/arkcase/login'); 
    browser.manage().timeouts().setScriptTimeout(60000); 
}, 

Die Methode, die ich für die Rückkehr heute bin mit in den Namen der Falte eintippen er ist:

this.returnToday = function(sign){ 
     var now = new Date(); 
     var day = ("0" + now.getDate()).slice(-2); 
     var month = ("0" + (now.getMonth() + 1)).slice(-2); 
     return today = (month) + sign + (day) + sign + now.getFullYear(); 
    } 
0

Sie können Ihren eigenen Reporter mit dem Design erstellen, das Sie möchten.

Dafür können Sie die folgenden Jasmin-Methoden überschreiben.

self.jasmineStarted = function(summary) { 

}; 

self.suiteStarted = function(suite) { 

}; 

self.specStarted = function(spec) { 

}; 

self.specDone = function(spec) { 

}; 

self.suiteDone = function(suite) { 

}; 

self.jasmineDone = function() { 

}; 

Sie können Ihre eigene Vorlage mit den gewünschten Informationen erstellen. Ich habe eine für mich wie folgt erstellt.

Sie können die Dokumentation here durchgehen.

Verwandte Themen