Save 37% off PRO during our Black Friday Sale! »

Automazione e monitoraggio metriche di test in ambito IoT con pytest-play

Automazione e monitoraggio metriche di test in ambito IoT con pytest-play

Architetture e testabilità in ambito telematica / IoT, possibili strategie di test ed errori comuni e come massimizzare il valore aggiunto derivante da attività di test attraverso l’uso di metriche.

STF2019 by ITA-STQB - Milano

D93eeac7e2b80a01bd1e1a595bac88a8?s=128

Davide Moro

June 05, 2019
Tweet

Transcript

  1. Automazione e monitoraggio metriche di test in ambito IoT con

    pytest-play STF2019 by ITA-STQB - Milano
  2. About me https://twitter.com/davidemoro https://www.linkedin.com/in/davidemoro82 http://davidemoro.blogspot.com https://github.com/davidemoro Timeline: • 2001: start

    coding • 2006: developer • 2016: QA Automation Engineer • Telematics / IoT solutions • ISTQB Open source Test automation
  3. Parleremo di... Telematica / IoT: • Architetture e testabilità •

    Possibili strategie di test ed errori comuni • Massimizzare il valore aggiunto derivante da attività di test attraverso l’uso di metriche
  4. Prerequisiti Prerequisiti per gli esempi: • pytest-play (non richiede installazione

    usando Docker) Opzionale: • server metriche compatibile statsd (locale o in hosting) • Selenium grid o setup browser locale Competenze richieste: • YAML, editing file di testo in formato YAML • CLI, saper lanciare dei comandi da terminale • Conoscenza di base tool e protocolli (HTTP, MQTT/mosquitto) • HTML base
  5. Architettura IoT (semplificata)

  6. Criticità IoT

  7. Possibile strategia test

  8. Errori comuni: abuso test E2E, big bang integration!

  9. Testing in layers and incremental integration – some examples

  10. Testing in layers without metrics

  11. Testing in layers… without metrics • Non sappiamo se e

    quanto siamo vicini a un timeout error • Non possiamo confrontare le tempistiche correnti con quelle misurate in precedenti misurazioni o situazioni con diverso carico (numero di entità su database e/o utenti contemporanei, numero di entità visualizzate su browser, ecc) • Non possiamo essere rigorosi/obiettivinel rilevare un peggioramento medio («oggi mi sembra lento») • Non riusciamo a rilevare piccoli e continui deterioramenti delle performance oppure un rallentamento consistente di un sistema già abitualmente lento (assuefazionedel tester manuale) Approccio alternativo: measure everything!
  12. Un po’di pratica... • Esempio backend/API testing

  13. Step 1 – run metrics server (just one time) Execute

    this command just one time. Runnning on http://localhost
  14. Step 2 – create a pytest-play scenario (test API) test_categories.yml

    contents Registra il tempo di esecuzione del comando precedente sotto al nome categories_time grazie al comando (record_elapsed)
  15. Step 3 – run pytest-play Run this command inside the

    project folder containing our pytest-play files
  16. Risultati...

  17. Metriche statsd/Graphite • viola: tempo di risposta medio • verde:numero

    di esecuzioni campionate • stats.timers: prefisso per metriche tipo time • chucknorris.demo: prefisso (tipicamente nome progetto, ambiente dev/alpha) • categories_time: nome della metrica (può essere gerarchico browser.nome) • count/mean: aggregazione (es: mean_90, max, max_90, ecc) test visivo!
  18. Reports: results.xml example • Storicizzazione risultati per confronti futuri •

    Possibile risalire a scenari particolari che sistematicamente producono dei picchi • Possibilità di esecuzioni ripetute su stesso report (opzione –count NUM) • Ispezione step by step dei comandi eseguiti • Ispezione degli errori (sequenza comandi eseguiti e full stack trace) storicizzazione!
  19. Altre opzioni utili CLI • Possibilità di esecuzioni ripetute (opzione

    –count NUM) • Possibilità di esecuzioni in parallelo (opzione –n CONCURRENCY) • Stop alla primo fallimento (opzione -x) • Live debug in caso di errori (--pdb) • Possibilità di eseguire un test in particolare (espressioni) o tutti • Last failed test (--last-failed) • Statistica test più lenti (--durations=NUM) • Passare variabili e configurazioni per ambienti (--variables FILE.yml) • Lanciare test da interfaccia grafica con Jenkins • Integrazione con test management tool • ... Maggiori informazioni su: • https://bit.ly/2YIE6nR Test automation framework thoughts and examples with Python, pytestand Jenkins
  20. Un po’di pratica... • Esempio browser/Selenium

  21. Step 1 – create a Selenium scenario test_vehicles.yml contents Registra

    il tempo che intercorre tra due comandi record_elapsed_start/stop raggruppando una serie di azioni o attendendo l’avverarsi di una determinata condizione (es: visibilità di un elemento sul browser) Automatic waiters Attende fino al momento in cui l’elemento è disponibile, visibile e realmente pronto per un’interazion e!
  22. Step 2 – run pytest-play (credentials and environments) Run this

    command inside the project folder containing our pytest-play files. See –splinter-webdriverand –splinter-remote-urloptions
  23. Trends (e.g., browser load) Start +4000 entities. 2 months before

    +8000 entities. 4 months before Measure real users experience evolution with video recordings too! Stakeholder • Time before alert • Time before critical
  24. Un po’di pratica... • Esempio device/MQTT

  25. Device – MQTT (part 1) Maggiori informazioni su: • https://bit.ly/2LYwmwr

    Testing metrics thoughts and examples: how to turn lights on and off through MQTT with pytest-play
  26. Device – MQTT (part 2) Maggiori informazioni su: • https://bit.ly/2LYwmwr

    Testing metrics thoughts and examples: how to turn lights on and off through MQTT with pytest-play
  27. Thanks!

  28. Contacts https://twitter.com/davidemoro https://www.linkedin.com/in/davidemoro82 http://davidemoro.blogspot.com https://github.com/davidemoro Documentazione, esempi e maggiori informazioni

    su pytest-play: • https://bit.ly/2HvWnip Plugin disponibili: • play_selenium • play_requests • play_sql • play_cassandra • play_dynamodb • play_websocket • play_mqtt