Dai ditemi che fate di meglio…
Io uso https://playwright.dev/ ho una test suite che faccio andare solo su chromium viewport desktop, ma volendo si aggiunge safari e la viewport mobile per un totale di 4 combinazioni e hai coperto 90% del mercato
Playwright è il client che implementa lo stesso protocollo di selenium. quindi tu virtualizzi multiple macchine con altrettanti browsers ma sulla stessa istanza server? ho capito bene? Quanti test? tempistiche? Sono curioso!
Quando pusho del codice, in determinate situazioni, parte un GitLab worker (un container) che si basa sulla base image che fornisce ufficialmente Microsoft che ha dentro tutto quel che serve per node + playwright + diversi browser che vuoi usare.
https://playwright.dev/docs/ci#gitlab-ci
A quel punto puoi decidere se fare andare test in parallelo/seriale e quanti workers allocare, dove ogni worker e' un processo separato e di default usa meta' dei CPU core a meno che tu non specifichi un valore
https://playwright.dev/docs/api/class-testconfig#test-config-workers
I miei test nello specifico purtroppo devono andare in modo seriale xke ho una situazione dove devo verificare una serie di operazioni consecutive dove un utente invita altri utenti a collaborare e hanno permessi diversi.
Le uniche ottimizzazioni che faccio sono attorno al signup/login, dove mi posso salvare lo "stato" del browser per una determinata sessione dell'utente (cookies, localstorage, sessionstorage) cosi che poi posso riprendere da li senza ogni volta dover fare login partendo da capo.
Ma quanto dura l’intera suite? È uno step obbligatorio ad ogni merge request?
[QUOTE=bollo;20601098]Noi abbiamo deciso di prioritizzare la velocità sugli altri aspetti, quindi testiamo ogni cosa solo una volta con la UI, tutte le altre volte instrumentiamo attraverso chiamate alle nostre api, e dato che mocchiamo anche lintero provider degli utenti, possiamo testare le permutazioni più importanti di ruoli/configurazioni alla velocità della luce, senza nessuna hot cache.
Ma quanto dura l’intera suite? È uno step obbligatorio ad ogni merge request?[/QUOTE]
Dura circa 5 minuti la suite e un altro paio di minuti scarsi che il container si prepara, pulla l’immagine, la cache etc.
Abbiamo due env principali: qa e prod associati rispettivamente a due branch canary e main, l’unico momento dove eseguiamo i test e2e e’ quando vuoi fare un merge da canary a main, ovvero da qa a prod.
Il resto delle merge request per qualsiasi altro branch che va a finire in canary (qa) non ci sono e2e test ma solo linting/type checks.
I mock sono uno strumento molto potente ma attenzione che quando introduci un mock non e’ piu’ un test e2e a mio avviso :D
Principalmente perché ho bisogno istantaneo di feedback e deve essere riproducibile al 100%. Non abbiamo QA e tempo da perdere a capire dove stanno gli errori per via di terze parti che sono lente e buggate, ma anche no grazie. Ti assicuro che è un altro mondo.
Casomai ci fossero dubbi, sono in un progetto dove stiamo al termine di una serie di cose infinite: camion che ci mandano dati, R&D che manda metriche sulla produzione di pezzi nuovi, as400 che fa as400, IA che fa previsioni. E comunque gliene diamo di mock come se non ci fosse un domani.
E andiamo direttamente in produzione. Niente canary ne release management. Uptime a 99.9 (faremo presto meglio spero).
[QUOTE=bollo;20601189]Hehe oramai ho un bel po di esperienza in merito, non lavorerò mai più per un’azienda che non fa mock delle terze parti, è come lavorare all’età della pietra.
Principalmente perché ho bisogno istantaneo di feedback e deve essere riproducibile al 100%. Non abbiamo QA e tempo da perdere a capire dove stanno gli errori per via di terze parti che sono lente e buggate, ma anche no grazie. Ti assicuro che è un altro mondo.
Casomai ci fossero dubbi, sono in un progetto dove stiamo al termine di una serie di cose infinite: camion che ci mandano dati, R&D che manda metriche sulla produzione di pezzi nuovi, as400 che fa as400, IA che fa previsioni. E comunque gliene diamo di mock come se non ci fosse un domani.
E andiamo direttamente in produzione. Niente canary ne release management. Uptime a 99.9 (faremo presto meglio spero).[/QUOTE]
Si forse mi sono espresso male sul mocking, ci sono una marea di situazione e contesti diversi.
Quando dico che mocking e’ anti-pattern intendevo fare mocking di inter-dipendenze tra servizi nostri.
Servizi esterni ne usiamo molto pochi, nel prodotto che gestisco io solo Stripe per i pagamenti e tutto sommato mi e’ piu semplice far girare un test e2e che fare mocking dato che si tratta di aggiungere una carta fittizia e fare un pagamento nel loro ambiente sandbox, permettendomi di testare al meglio (ovvero come un utente userebbe il prodotto) e verificare che tutto il flow funziona non tanto lato Stripe ma lato nostro.
Detto questo, ci sono stati casi anche molto gravi dove non venivano testate le dipendenze esterne third party e sono successi disastri.
Se uno ha la possibilita’ magari non a tutte le merge request ma saltuariamente o con un cron di far un test sulle dipendenze esterne sicuramente male non fa e ti permette di acchiappare il prima possibile se ci sono problemi su cose che non dipendono da te piuttosto che aspettare che si rompa necessariamente qualcosa in produzione.
Fidarsi e’ bene, non fidarsi e’ meglio.
Poi again, non so cosa fai di preciso e le casistiche sono infinite
Una cosa carina che abbiamo fatto lato testing invece e’ sulla parte mobile.
tl;dr:il nostro prodotto e’ un API che ti permette di verificare numeri di telefono senza dover mandare l’SMS col codice da inserire come fanno tutti al momento ma in modo diretto e piu’ sicuro.
Abbiamo una mobile app di demo molto semplice fatta con React Native e vogliamo poter testare che tutti gli operatori che supportiamo continuino a funzionare, ed e’ una cosa che ad oggi tranne pagare sistemi estremamente costosi e macchinosi, non si puo’ fare xke richiede dei simulatori che hanno una SIM card di un determinato operatore, nessun servizio tipo AWS device farm e simili ti offre questa possibilita’.
Quindi sfruttiamo le silent push notification per fare un trigger di questa verifica (sono solo un paio di chiamate HTTP, consumo pari a zero) a tutti gli utenti che hanno scaricato la nostra app di demo e fanno opt-in in cambio di crediti, cosi durante il giorno random triggheriamo dei test su diversi operatori in diversi paesi del mondo su device di persone che hanno dato l’opt-in.
Comunque dagli un’altra chances al mock e2e, niente ti vieta di registrare alcune delle chiamate ai mock e a campione verificare che il sistema terze parti funzioni, in uno step separato non facente parte della ci cd.
Simpatico questo sistema di health check terze parti, immagino sia la conseguenza di mille compromessi e necessità di tenere su servizi e dare una buona comunicazione quando qualcosa non va…