UI dell'applicazione browser / test dell'utente finale

2

Sto costruendo un'applicazione web in php. Sto seguendo TDD (scrivi test prima del codice di produzione) per i miei test unitari e utilizzo BDD per guidare la scoperta delle funzionalità delle mie applicazioni e per fornire test di integrazione.

La mia architettura è basata su Robert Martins Clean Architecture dove per uso ho case case application / interattori che formano le classi principali della mia applicazione.

I miei passi BDD chiamano l'applicazione per usare le classi di casi direttamente per guidare l'applicazione. I test TDD vengono scritti prima di ogni nuova riga di codice e forniscono test unitari per tutte le classi. Con questi due metodi di sviluppo, ho una copertura completa del test della mia domanda di integrazione e test unitari.

Il problema a cui mi sono imbattuto è che mentre ho provato tutto nell'applicazione, e ho confermato che tutte le funzionalità richieste sono state implementate, quello che non ho è una bella interfaccia utente dell'applicazione Web che un utente può usare. Attualmente gli unici utenti che possono utilizzare l'applicazione sono gli sviluppatori che dovrebbero chiamare l'applicazione per utilizzare direttamente le classi di casi. Per gli sviluppatori, il codice base è coperto al 100% da unit test (TDD) e test di integrazione (BDD).

Quello che devo fare ora è creare un'applicazione browser che chiamerà gli URI. Questi URI saranno collegati ai casi d'uso dell'applicazione. Come qualsiasi applicazione browser moderna, l'applicazione browser chiamerà più URI in modo asincrono per fornire un'esperienza utente ricca.

La mia domanda è: come posso testare questa parte della mia base di codice? Questa non è una domanda su quale strumento usare (anche se le raccomandazioni sarebbero gradite), ma più a che livello dovrei testare? Immagino che questa domanda possa anche essere scritta come

"Sono uno sviluppatore front-end che crea un'app Web front-end utilizzando una libreria o un servizio Web creato da un altro sviluppatore. Come dovrei testare la mia app? '

I miei due pensieri sono:

  1. Verifica l'applicazione del browser e gli URI associati, ma prendi in giro i casi di utilizzo delle applicazioni chiamati dai controllori
  2. Lascia che i controller chiamino i casi d'uso reali dell'applicazione e forniscano in effetti un altro livello di test di integrazione / test end-to-end con l'aggiunta del livello di consegna Web (applicazione browser e URI)

Il problema che vedo con 1) (come in tutti i test in cui sono coinvolti i mock) è che se io simulo in modo errato le richieste e le risposte per i casi d'uso di quella applicazione, non ci saranno test da raccogliere e verranno visualizzati i bug una volta che tutto è integrato insieme.

Questo porta quindi alla ovvia risposta che dovremmo testare con maggiore integrazione usando 2). Il problema che ho con questo è che sento che ora sto duplicando molti test di integrazione e il test sarà molto lento.

Im anche non sono sicuro di quale livello di test dovrei scrivere. Devo scrivere un test di accettazione per utenti di grandi dimensioni che prende insieme un numero di casi d'uso diversi? per esempio. verificare che un prodotto possa essere aggiunto a un negozio, acquistato da un cliente e quindi spedito. O dovrei testare ciascuna vista dell'interfaccia utente da sola? per esempio. il cliente può visualizzare il prodotto per l'acquisto.

    
posta Gaz_Edge 18.03.2016 - 18:42
fonte

3 risposte

2

Tutti gli scenari di test che hai scartato hanno senso, ma ciò che è più adatto per il tuo caso dipende, beh, dai dettagli del tuo caso. Come regola generale, se si dispone di due componenti complessi A e B, è necessario disporre di numerosi test per testarli singolarmente e almeno alcuni test di integrazione. Se il componente A o B è "non troppo complesso", potresti omettere i test isolati e utilizzare i test di integrazione per coprire entrambi in uno, a patto che questo ti soddisfi.

Poiché al momento non hai un'interfaccia utente Web, potresti prendere in considerazione la possibilità di creare i tuoi test "mentre procedi" e provare ciò che funziona meglio per te. Ad esempio, quando il tuo sistema consente facilmente di creare o ricreare un ambiente di test con il backend reale, e l'esecuzione di test automatici che utilizzano quel back-end è abbastanza veloce, quindi usa tale approccio. Se, tuttavia, noti che i test stanno diventando troppo complicati in questo modo, hai problemi a gestire i dati del test con l'applicazione reale, oppure il avviso (non solo sospetto) dei test diventa molto lento, oppure alcuni altri tipi di problemi, quindi probabilmente starai meglio con un back-play deriso.

Un altro fattore è quanti cambiamenti ci si aspetta in quale area. Se il backend e la sua API sono molto stabili, sarà probabilmente più efficiente concentrarsi sui test dell'interfaccia utente isolati. Se il back-end cambia spesso, i test di integrazione UI / back-end diventano più importanti. Se l'interfaccia utente è stabile, è possibile automatizzare molti test (con uno strumento come Selenium). Se l'interfaccia utente è pesantemente in fase di sviluppo, l'automazione probabilmente porterà meno benefici poiché "l'esperienza dell'utente" e il test degli aspetti ergonomici saranno più importanti, e questo non è nulla che tu possa automatizzare.

Quindi mi aspetterei che probabilmente avrai bisogno di tutti i tipi di test, ma se sarà il 10% di test di tipo A e il 90% di test di tipo B, o viceversa, è qualcosa che puoi solo scoprire da solo.

    
risposta data 22.03.2016 - 13:00
fonte
0

Supporrò che l'API back-end sia testata e pronta e tutto ciò di cui hai bisogno ora è una bella interfaccia utente.

Se stai scrivendo questa come interfaccia utente web, il selenio è il tuo strumento preferito. Ciò che fa è consentire di riprodurre le azioni eseguite da un utente. Quindi scrivi l'interfaccia utente, quindi usala in vari casi di test facendo clic sui pulsanti e su cosa no, e quindi puoi rispondere allo stesso identico insieme di passaggi utilizzando il selenio. Ora hai un corridore di prova.

Che tu collaudi il tuo front-end sostituendo il back-end con i mock o semplicemente collegandolo tutti insieme e test di integrazione tutto dipende da te - penso che il costo della creazione dei test unitari qui sia proibitivo, meglio andare dritto per test di integrazione e unit test i componenti back-end.

Dovrai comunque creare i test di integrazione, e l'unità di test del front-end può essere comunque lenta (tutta la configurazione del server web e degli strumenti di test) e il costo di una simulazione può essere molto alto - potrebbe facile simulare un metodo semplice, ma con le interfacce utente spesso stai attivando un compito più complesso (ad esempio, il pulsante "paga ora" chiama l'API "DoPay" - che è troppo banale per il test dell'unità, o troppo complesso per il test unitario se vuoi che alcuni risultati chiamino DoPay o no), o recuperare i dati per la visualizzazione.

Hai un'unità testata le API back-end in isolamento, quindi mettere l'interfaccia utente è tutto sul funzionamento di queste API insieme.

    
risposta data 22.03.2016 - 14:18
fonte
-2

È molto difficile testare la porzione dell'interfaccia utente tranne tramite browser, ed è difficile automatizzare il lato browser delle cose. I test a questo livello spesso ricadono sui tester umani a causa di ciò.

Per necessità duplicherà gran parte dei test di integrazione (idealmente dovrebbe duplicare tutto, il test di integrazione dovrebbe testare tutti i casi d'uso che l'utente finale seguirà man mano che usano il sito). Inizia scrivendo i test di accettazione per coprire i flussi di lavoro di alto livello che seguiranno gli utenti che combineranno diversi test di integrazione, ad es. aggiungi prodotti al carrello, rimuovi alcuni, aggiungi altro, controlla e spedisci. Combina questo con i test di visualizzazione delle funzionalità di base, ad es. un test che implica l'estrazione di un prodotto e l'analisi di tutte le cose che un utente può fare nella pagina del prodotto (ad esempio, per richiedere le specifiche).

Se tutto va bene, i test di integrazione dovrebbero aver catturato tutti i bug del codice server e il test di accettazione si concentrerà sui problemi dell'interfaccia utente (layout di pagina, styling, codice JavaScript). Se i problemi sul lato server sono scoperti, duplica il problema con un test di integrazione in modo da poterlo aggiungere alla suite di test.

    
risposta data 18.03.2016 - 22:59
fonte