Test automatizzati su contenuti dinamici

5

Sto lavorando a SQA per diversi siti basati su Kendo che hanno molti tavoli (alcuni sono fatti a mano dai nostri sviluppatori). Queste tabelle hanno un sacco di righe, colonne, pagine e dati in esse contenuti, quindi sto fondamentalmente facendo SQA su contenuti molto dinamici.

Sto provando a creare script automatici per assicurarmi che funzioni come aggiungi una riga o modifica una riga , ma il processo sembra terribilmente noioso e soggetto a errori (non perché il codice effettivo della tabella è negativo, ma poiché il contenuto è dinamico e quindi gli script Selenium recuperano la riga, la colonna e così via sbagliata)

Ad esempio, se voglio creare uno script di selenio per aggiungere una riga in una tabella, devo:

  • trova il xPath in quella tabella specifica
  • memorizza Xpath
  • memorizza XpathCount
  • aggiungi una riga
  • inserisci i dettagli
  • ottieni il nuovo XpathCount
  • assicurati che il nuovo conteggio delle righe sia 1 in più rispetto al numero originale di righe
  • se tutto è buono finora, prendi il percorso specifico nella nuova riga e spera che sia dove pensi che sia
  • asserire che tutti i dati di questa nuova riga sono quelli inseriti nella creazione della riga

Diciamo che la tua tabella memorizza le cose in ordine alfabetico e non puoi controllare tutti gli altri test in cui gli sviluppatori sono in esecuzione, quindi è popolato da 54 elementi; alcuni realizzati da te, alcuni realizzati da altri. Esegui lo script Selenium per fare clic su "Crea riga" e quindi nella pagina "Crea riga", inserisce automaticamente i dettagli di una riga con il nome dell'attributo principale di "Bob". Il selenio quindi fa clic su "Invia".

La tabella / pagina web inserisce la riga "Bob" tra "BAMF" e "Karl" ma il test del selenio alla fine fallisce perché il contenuto è dinamico e quindi non ha idea di quale riga cercare che abbia "Bob" in esso . Se devo guardare il tavolo ogni volta che eseguo un test per vedere dove andrà "Bob", posso aggiornare lo script per sapere dove sarà la riga, potrei anche non automatizzarlo.

I test come questi non dovrebbero essere automatizzati? Gli script di test come questi dovrebbero essere eseguiti solo su tabelle vuote che si popolano da soli?

    
posta 8protons 02.09.2016 - 01:15
fonte

1 risposta

7

Sembra che tu stia sulla strada giusta per test automatici e dal vivo, ma hai alcuni fattori che complicano significativamente:

  1. Il contenuto dinamico aumenta la difficoltà di specificare un test. Devi spesso dichiararlo in termini almeno leggermente più generici.

  2. Ma molto peggio: altri test, eventualmente concorrenti, che si verificano in parallelo. Questo davvero aumenta la posta. Se altri test potrebbero aggiungere "Alice" o anche "Bob" mentre aggiungi "Bob", non puoi supporre che gli elementi si trovino in posizioni fisse nel set di dati, o che ci sarà un numero fisso di essi. Le tue condizioni di navigazione e di test devono essere definite in modo molto più flessibile e generico. E dovrai essere flessibile sui fallimenti. In un ambiente parallelo, alcuni test invariabilmente falliscono, anche se correttamente specificati. È inevitabile. Se qualcun altro esegue il test "elimina una riga casuale" o "elimina tutti i record che iniziano con le lettere A-F" mentre stai testando "aggiungi una riga Bob", la tua riga è a rischio. Nel corso del tempo, con test sufficienti, a volte il test in competizione vincerà occasionalmente. Lo farà anche essere un fallimento transitorio. Riesegui il test ed è improbabile che il i test si scontreranno ancora nello stesso modo. (I problemi transitori possono fare le cose vanno meglio, perché sono più rare, ma anche peggiori. Sono molto, molto più difficile da rintracciare, capire e correggere, perché dipendono dal tempo.)

Alcuni consigli:

  1. Non rinunciare all'automazione. Quanto più complessi e dinamici sono i dati e il comportamento dell'applicazione, più importante è che i test siano automatizzati. Nei sistemi complessi. non avrai l'energia e la concentrazione per testare ripetutamente ogni comportamento. Nemmeno se hai una grande squadra che fa il lavoro. L'automazione è l'unica soluzione affidabile. Sii paziente mentre impari a specificare quei test in modi più flessibili e inclusivi.
  2. Aumenta l'isolamento dei test. In questi giorni le istanze cloud, le macchine virtuali e gli ambienti virtuali sono incredibilmente economici. Forse puoi generare l'istanza della tua app da testare. Ciò eliminerebbe completamente il parallelismo bugaboos, semplificando il tuo lavoro. Ti consentirebbe inoltre di iniziare con set di dati pristine e predefiniti che carichi per ogni prova di test, o ogni volta che è opportuno per le tue esigenze di test. Tuttavia, so che potrebbe essere difficile. Sono stato in situazioni in cui la direzione ha insistito sul fatto che non potevamo permetterci istanze di test separate. Ho persino lavorato su prodotti commerciali dal vivo in cui era necessario testare alcune cose sui sistemi di produzione, con dati di produzione ( brivido ).

  3. Aumenta l'isolamento dei dati. Anche se non puoi ritagliare il tuo test istanza (s), è ancora possibile aumentare l'isolamento dei test. Spesso uso dati ovviamente unici per fare ciò. Ad esempio, non aggiungere "Alice" e "Bob"; aggiungi "Alice_21387" e "Bob_21387", dove il suffisso è un indice generato casualmente per prova. Non è possibile aggiungere numeri a questi campi? Aggiungi lettere casuali. Ci sono poche possibilità che "Alicezcfh" e "Bobzcfh" vengano utilizzati da qualsiasi test in competizione.

  4. Consenti ai test di fallire. La maggior parte dei framework di testing ha la capacità di aspettare e riprova i test. Usalo. Lascia che i tuoi test falliscano fino a N volte, con una seconda D ritardo tra le corse. Per molte webapp, N = 3, D = 15 farà il trucco. Se è no un'opzione integrata per il tuo runner di test, è abbastanza facile scrivere questo tipo di logica del test di ripetizione.

  5. Rendi gli script di test più solidi in ciò che si aspettano come risultati. Ad esempio, se dopo un inserimento il record di "Bob" deve essere da qualche parte in una tabella, non scrivere un test che si aspetta che appaia esattamente sul numero di riga 42. Scrivere il test invece di aspettarsi "Bob" da qualche parte nel tavolo. (Suggerimento per @Doc Brown )

In sintesi, non rinunciare all'approccio automatico. Ci sono modi per farlo funzionare. È imperfetto, specialmente se stai testando un sistema che viene modificato durante il test. A volte dovrai rejigger, harden e migliorare i test man mano che procedi. Ma può essere pratico ed efficace. È anche la tua unica vera speranza. L'alternativa logica, test manuale ripetuto, non funzionerà mai con qualcosa di simile a facilità, velocità e affidabilità.

    
risposta data 02.09.2016 - 04:56
fonte