Slide 1

Slide 1 text

Automazione e monitoraggio metriche di test in ambito IoT con pytest-play STF2019 by ITA-STQB - Milano

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Architettura IoT (semplificata)

Slide 6

Slide 6 text

Criticità IoT

Slide 7

Slide 7 text

Possibile strategia test

Slide 8

Slide 8 text

Errori comuni: abuso test E2E, big bang integration!

Slide 9

Slide 9 text

Testing in layers and incremental integration – some examples

Slide 10

Slide 10 text

Testing in layers without metrics

Slide 11

Slide 11 text

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!

Slide 12

Slide 12 text

Un po’di pratica... ● Esempio backend/API testing

Slide 13

Slide 13 text

Step 1 – run metrics server (just one time) Execute this command just one time. Runnning on http://localhost

Slide 14

Slide 14 text

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)

Slide 15

Slide 15 text

Step 3 – run pytest-play Run this command inside the project folder containing our pytest-play files

Slide 16

Slide 16 text

Risultati...

Slide 17

Slide 17 text

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!

Slide 18

Slide 18 text

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!

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Un po’di pratica... ● Esempio browser/Selenium

Slide 21

Slide 21 text

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!

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Un po’di pratica... ● Esempio device/MQTT

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Thanks!

Slide 28

Slide 28 text

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