2012-02-14 5 views
5

Sto creando uno screenshot quando il mio test end-to-end NUnit fallisce e sto provando a pubblicarlo con TeamCity (build agent e server entrambi in esecuzione su Windows) utilizzando il seguente messaggio di servizio (come descritto here) che sto scrivendo con Console.WriteLine da un test di NUnit:Perché i miei artefatti pubblicati durante la compilazione utilizzando il messaggio di servizio publishArtifacts vengono visualizzati in TeamCity?

##teamcity[publishArtifacts 'C:\BuildAgent\work\xxxxxxxxxxxxxxxx\Path\To\My\Stuff\fail.png'] 

vedo la linea nel log di compilazione:

------- Stdout: ------- 
##teamcity[publishArtifacts 'C:\BuildAgent\work\xxxxxxxxxxxxxxxx\Path\To\My\Stuff\fail.png'] 

Ma TeamCity non raccoglie il file, o almeno non viene visualizzato nella build artefatti. Come faccio a fare questo lavoro?

+1

E 'possibile che il messaggio contiene alcuni caratteri che devono essere sfuggiti: http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ServiceMessages? –

+0

No, fintanto che ':' e '\\' sono OK (e sembrano essere), allora non è questo il problema. – GraemeF

risposta

0

Provare a utilizzare percorsi relativi. Teamcity dovrebbe risolverli contro la compilazione della directory di lavoro.

0

È possibile provare Console.Write anziché Console.WriteLine (vedere di seguito).

In ogni caso, credo che TeamCity non intrappoli questi messaggi perché sono 'rapporti di test' e aggiunti nel buildlog come output di testo.

La mia sensazione è che non vengono analizzati e quindi non interpretati dal comportamento di Interazione script di compilazione a causa del modo in cui vengono scaricati nel log di compilazione.

Dal Build Script Interaction (TC 7):

I messaggi di servizio vengono utilizzati per inviare comandi/costruire informazioni al server di TeamCity dallo script di build. Per essere processati da TeamCity, devono essere stampati nel flusso di output standard della build (altrimenti, se l'output non è nella sintassi del messaggio di servizio, dovrebbe apparire nel log di compilazione). Un messaggio di servizio singolo deve contenere senza un carattere di fine riga, non deve attraversare più righe.

Si dovrebbe mettere i reperti di prova in una cartella specifica e ritardare l'pubblicare dopo le prove.

Nota che se non hai bisogno di risolvere manufatto in modo dinamico, è necessario utilizzare il modo più semplice: il Artifact paths nelle impostazioni generali di configurazione build.

+0

'Console.WriteLine' aggiunge una nuova riga * dopo * il messaggio di servizio, quindi non è questo il problema. Come dice la citazione, i messaggi di servizio devono solo essere scritti sul flusso di output standard della compilazione - il modo in cui vengono scaricati è irrilevante. Purtroppo non ho più accesso al progetto per provare qualcos'altro :( – GraemeF

+0

Sì, riguardo a WriteLine è stato solo per provare. Non funziona nemmeno sul mio TC.Per quanto riguarda lo svuotamento dell'output NUnit, non è del tutto irrilevante perché ** gli output dei test non sono uno standard output **, ogni framework di test aggiunge il proprio listener di console. Se esegui 'nunit-console.exe' vedrai che il' WriteLine' del tuo test appare in qualche modo alla rinfusa. Inoltre, TeamCity utilizza il proprio corridore NUnit. Nota che ciò che stai cercando non funziona anche con MSTest. Puoi vedere qualcosa come '[Test Output]' dopo il nome del tuo test e anche prima del suo output, potrebbe fallire a causa di questo testo. Probabilmente un bug? – JoeBilly

Problemi correlati