2015-09-29 12 views
6

Possiedo un framework di automazione che utilizza un'attività grunt per eseguire più file spec. Alcuni vengono eseguiti utilizzando una suite predefinita, altri utilizzano convenzioni di denominazione dei file. Ogni file spec ha una media di un blocco "descriva", ognuno con più blocchi "it".Riepiloga i risultati del rapportatore su più file spec.

Attualmente sto usando il gelsomino-spec-giornalista che dà risultati utili e dettagliati dopo ogni file spec, che assomiglia a:

------------------------------------ 
[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 

goniometro mi dà abbastanza inutile output della console sintesi, dopo tutto il rapporti di gelsomino che fa riferimento a taskID e liste passa + errori. Questo è ciò che il riassunto goniometro assomiglia:

.... 
[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. 

mio problema è che voglio vedere un riassunto di tutte le spec file, non taskIds, solo per specifiche falliti, e solo dopo aver fatto tutto in esecuzione . L'MVP sarebbe solo i nomi dei file spec falliti in un elenco o scritti in un file in un formato di facile lettura (xml, html, ecc.). Prossima iterazione avrei le descrizioni di blocco "descrivi" e "it", i codici di errore e il link saucelabs accanto a ogni errore simile al reporter di gelsomino.

Normalmente ho centinaia di file spec in un singolo lavoro, e dover sfogliare tutti i singoli risultati solo per rintracciare quale file spec è fallito è abbastanza fastidioso (poiché sento che un sommario generato automaticamente dovrebbe avere quell'informazione). Sto letteralmente dovendo fare un ctrl + f sull'output della console per "errori", solo per vedere quali specifiche hanno fallito. Voglio evitare di andare ai saucelab per la lista dei fallimenti, a causa di come le nostre attività lavorative sono organizzate attraverso Jenkins. L'output della console dovrebbe essere una prima fonte/riferimento facile per un elenco di guasti una volta che un lavoro è stato eseguito in esecuzione.

L'ambito di ogni reporter di terze parti sembra andare solo fino al livello del file spec. Dopo che ogni file spec è stato eseguito, viene segnalato, quindi passa a quello successivo che sovrascrive il report precedente. Apro il report HTML o XML e ha sempre solo i risultati di un file spec. Non riesco a portare alcuna informazione in un riassunto per più file spec. Ho modificato le impostazioni di "consolida (Tutto)" e nessuno sembra aver creato un rapporto per tutti i file spec. Sembrano considerare solo un singolo file alla volta.

Ho sperimentato con i seguenti giornalisti:

gelsomino-reporter

gelsomino-spec-giornalista

goniometro-jasmine2-html-giornalista

gelsomino-JSON-test-giornalista

Sono stato in grado di manipolare direttamente il codice "rapporto Sommario" del goniometro per darmi la maggior parte di ciò che voglio (tranne che per il link saucelabs), ma questo non è l'ideale dato che dovrei convincerli ad adottarlo. Ecco come appare il mio sommario:

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

Mi manchi qualcosa usando quei giornalisti di gelsomino? Il mio framework non è progettato per funzionare con quei giornalisti nel modo che voglio? Devo solo convincere i ragazzi del goniometro a rinforzare il loro giornalista sommario con alcune opzioni?

+0

Penso che la soluzione migliore potrebbe essere quella di fare una richiesta di pull su uno di quei reporter per le opzioni di formattazione che si desidera. Dubito che convincerai @Jmr a fare questo tipo di cambiamento per te. – MBielski

risposta

0

È possibile partecipare a tutti i report dopo che tutti i test sono stati eseguiti.Basta fare in modo di avere tutti i test che si desidera all'interno della stessa cartella

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

Poi si può unirsi a loro e cancellare la cartella (utilizzando il modulo "FS" o qualcosa del genere) o rinominarlo in modo che ogni volta che si esegue si crea una nuova cartella

0

sto usando questo reporter: https://www.npmjs.com/package/protractor-jasmine2-screenshot-reporter ho rapporto completo per tutti i file spec quotidiane con questo codice nel mio file spec

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

Il metodo che sto utilizzando per la restituzione di oggi data nel nome della piega è:

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

È possibile creare il proprio reporter con il design desiderato.

Per questo è possibile ignorare i seguenti metodi di gelsomino.

self.jasmineStarted = function(summary) { 

}; 

self.suiteStarted = function(suite) { 

}; 

self.specStarted = function(spec) { 

}; 

self.specDone = function(spec) { 

}; 

self.suiteDone = function(suite) { 

}; 

self.jasmineDone = function() { 

}; 

È possibile creare il proprio modello con le informazioni che si desidera. Ne ho creato uno per me come di seguito. enter image description here

È possibile consultare la documentazione here.

Problemi correlati