Questa settimana mi sono tuffato in test automatizzati con goniometro.Dal momento che la costruzione di un ramo fallisce molto ultimamente con timeout e otherissues, cercherò di saperne di più e risolvere questo problema.

Che cos’è il test automatico.

Il test automatico semplifica la vita una volta impostato correttamente e utile :)Il test automatico utilizza software / utensili per testare velocemente il codice. Si impostano i testcase e questi vengono eseguiti attraverso gli utensili. Nessuna interazione umana da testare è necessaria dopo aver scritto quei casi. Può confrontare, eseguire un inserimento di dati attraverso i test.

I test più comuni e le loro differenze.

I due metodi di test più comuni che ho incontrato finora sono test UNIT e test E2E.

Unit testing

Unit testing si concentra sul test di singole unità.Pensa a questo come una funzione o una piccola parte del codice.Si mock (falsi) servizi, rete e altre risorse e fare tutti i test isolati.
In Angular Karma e Jasmine framework sono per lo più utilizzaticrite unit test.

E2E testing

Con e2e testing puoi passare attraverso la GUI come fa un utente.Facendo clic su pulsanti, pagine, menu, CRUD. (non in produzione)
L’uso più comune per il test E2E con Angular è il driver web selenio con goniometro.
Quindi per testare il tuo codice è utile usare i test unitari.Se vuoi testare l’uso funzionale del tuo sito, dovresti provare E2E.

Perché testare?

Lo scopo è quello di incontrare problemi velocemente.Per il test E2E: inoltre non si desidera testare facendo clic su schermate per vedere il pulsante if funziona ancora o una pagina viene caricata da soli.Sarebbe un sacco di lavoro e non è coerente se fosse fatto da diversi sviluppatori.

Impostazione goniometro.

Come installare goniometro.

Per installare goniometro si esegue quanto segue dalla riga di comando:
Si installa goniometro eseguendo:

npm install -g protractor

Quindi si installa webdriver manager per selenium.

webdriver-manager update

webdriver-manager start

Crea un test.

Per prima cosa sono necessari due file per creare un test, un file spec e un file di configurazione.
Nel file di configurazione si configura la posizione dei file spec. Esso contiene anche il browser che si desidera utilizzare per testare, di default è Chrome.Il selenium serveraddress è incluso per comunicare.E anche il quadro è impostato, questo è Jasmine.Quindi assomiglia a questo:

 // conf.jsexports.config = { framework: 'jasmine', seleniumAddress: 'http://localhost:4444/wd/hub', specs: }

Per costruire un test devi determinare un caso. Costruisci il caso nel file delle specifiche. In primo luogo si determina ciò che il test deve do.In in questo caso si controlla se la pagina di destinazione visualizza il messaggio di benvenuto.

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message', () => { expect(page.containsElement('#welcome')).toBeTruthy() expect(page.getElementText('#welcome')).toEqual('Welcome') })})

Per prima cosa descrivi la pagina o l’elemento che vuoi testare, in questo esempio è la pagina di destinazione. Describe è il nome della sintassi testsuite e Jasmine.Contiene il flusso da un capo all’altro. All’interno di questo ci sono testcase “it”.
Poi si determina che cosa ‘si’ deve fare. ‘E’ una funzione globale di Jasmine. Puoi avere più testcase ” it ” nel flusso.(descrivi)
In questo caso si verifica se la pagina di destinazione ha visualizzato il messaggio di benvenuto e quindi è disponibile come previsto. ( true, toBeThruthy) Controlli anche se il testo è lo stesso del testo sulla pagina di destinazione (toEqual (‘yourText’)

Async Await.

JavaScript è asincrono, non sai quale script verrà eseguito per primo. I flussi del goniometro sono sincroni, i tuoi passi sono in un ordine specifico di esecuzione. Fai clic su questo, poi su quel pulsante.
Flussi goniometro sono scritti con una promessa. Goniometro in grado di gestire la promessa con un’attesa fino a quando non è completa.

La sintassi di async await è molto simile alla sintassi dattiloscritta.
La funzione asincrona può essere avvolta con ‘async’ e ‘await’.
Await viene utilizzato prima della linea che vogliamo aspettare.

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message',async () => { expect(await page.containsElement('#welcome')).toBeTruthy() expect(await page.getElementText('#welcome')).toEqual('Welcome') })})

Qual è stato il problema principale con le mie build?

I miei test hanno fallito molto con i timeout. Ho usato async await e ho ancora avuto alcuni problemi. Come puoi vedere, la sintassi è quasi la stessa con TypeScript async/await.

Ho trovato questo sul protractortest.org sito.

Non dimenticare di disattivare control_flow, non puoi usare un mix di async/await e il flusso di controllo: async/await fa sì che il flusso di controllo diventi inaffidabile (vedi problema github). Quindi, se si async / await in qualsiasi punto di una specifica, è necessario utilizzare SELENIUM_PROMISE_MANAGER: false

Ho aggiunto questo alla configurazione e ho eseguito il debug degli errori rimanenti.
Costruisco un po ‘ di tempo di attesa/sonno tra alcuni test e funziona bene.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.