2012-06-21 16 views
7

Lo scenario è questo:aggiuntive registrazione JBehave

Stiamo usando JBehave e selenio per il sistema, integrazione e test end to end. Sto verificando i risultati di un calcolo su una pagina con oltre 20 valori da validare. Utilizzo di Junit Assert l'intero test fallirà nella prima istanza di uno dei valori non corretto. Quello che volevo fare era che, se si verifica un errore di asserzione, il test continua ad essere eseguito in modo tale che io possa poi raggruppare tutti i valori che sono errati in una sessione di test piuttosto che in più esecuzioni di test.

Per eseguire questa operazione, acquisisco le asserzioni e scrivo in un file di registro tutto ciò che non supera la convalida. Questo mi ha lasciato un paio di problemi:

1) Il file di log in cui scrivo i fallimenti delle asserzioni non contiene il nome della storia o dello scenario JBehave che è stato eseguito quando si è verificata l'eccezione.

2) La storia o lo scenario di JBehave è elencato come "superato" e desidero che sia elencato come "non riuscito".

Esiste un modo per registrare il nome di Story e Scenario nel file di registro aggiuntivo O ottenere la registrazione aggiuntiva scritta nel file di registro di JBehave?

Come posso riportare la storia/scenario come non riuscita?

Nella configurazione JBehave ho:

configuredEmbedder() 
    .embedderControls() 
    .doIgnoreFailureInStories(true) 
    .doIgnoreFailureInView(false) 
    .doVerboseFailures(true) 
    .useStoryTimeoutInSecs(appSet.getMaxRunningTime()); 

e

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
    .withDefaultFormats() 
    .withViewResources(viewResources) 
    .withFormats(Format.HTML, Format.CONSOLE) 
    .withFailureTrace(true) 
    .withFailureTraceCompression(true) 
    .withRelativeDirectory("jbehave/" + appSet.getApplication()) 

risposta

11

Sì, è possibile creare il proprio StoryReporter:

public class MyStoryReporter implements org.jbehave.core.reporters.StoryReporter{ 
    private Log log = ... 

    @Override 
    public void successful(String step) { 
     log.info(">>successStep:" + step); 
    } 

    @Override 
    public void failed(String step, Throwable cause) { 
     log.error(">>error:" + step + ", reason:" + cause); 
    } 

    ... 
} 

e registrarlo in questo modo:

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
     .withReporters(new MyStoryReporter()) 
.. 
+0

Grazie. E 'stato davvero utile. –

+0

Puoi aggiungere ulteriori informazioni su come creare i logger. Spiegare: log di registro privato = ... – farheen

+0

Dipende dal framework di registrazione che si sta utilizzando. Se stai usando slf4j: 'Log di registro = LoggerFactory.getLogger (MyStoryReporter.class);'. Il punto principale è che potrebbe essere qualsiasi cosa in quei metodi di callback - si potrebbe fare un sysout, scrivere in un database o qualsiasi altra cosa – plasma147

Problemi correlati