polito.it
Politecnico di Torino (logo)

Generazione automatica di test per servizi REST = Automatic test generation for REST services

Leandro Battaglia

Generazione automatica di test per servizi REST = Automatic test generation for REST services.

Rel. Antonio Lioy. Politecnico di Torino, Corso di laurea magistrale in Ingegneria Informatica (Computer Engineering), 2018

[img]
Preview
PDF (Tesi_di_laurea) - Tesi
Licenza: Creative Commons Attribution Non-commercial No Derivatives.

Download (632kB) | Preview
[img] Archive (ZIP) (Documenti_allegati) - Altro
Licenza: Creative Commons Attribution Non-commercial No Derivatives.

Download (1MB)
Abstract:

Lo scopo principale dell'elaborato è mostrare il funzionamento di una applicazione pensata per effettuare test automatici di servizi web.Il primo passo che è stato fatto è stato quello di esplorare il mondo dei servizi REST. In questa fase si è cercato un IDL che fosse in grado di fornire abbastanza informazioni circa l'interfaccia esposta da un servizio. L'idea principale è stata infatti quella di partire da una descrizione del servizio che fungesse da contratto e che costituisse il punto di partenza per l'applicazione che testa il servizio.Nel corso di questa indagine, diversi linguaggi sono stati presi in considerazione, tra cui WSDL e WADL. Tuttavia, le ricerche hanno decretato ottimo candidato un linguaggio di descrizione per servizi web RESTful creato nel 2011 e noto con il nome di Swagger/OpenAPI. Si tratta di una specifica che consente di creare descrizioni in JSON e YAML, e che viene usata per progettare, generare codice e documentare API.Lo step successivo è consistito nell'andare alla ricerca di tool preesistenti e open source che potessero essere estesi o combinati in modo da ottenere una applicazione in grado di soddisfare il requisito iniziale. Nel corso di tale ricerca in cui sono stati presi in considerazione diversi tool, due framework si sono rivelati particolarmente interessanti. Il primo, che costituisce il cuore dell'applicazione finale, è swagger-test-templates, un tool creato da Apigee nel 2016.Si tratta di un modulo scritto in JavaScript in grado, a partire da una descrizione Swagger di un servizio web, di generare del codice JavaScript contenente delle unit test. Per farlo si serve della libreria Mustache.JS, l'implementazione JavaScript del sistema di templating noto con il nome di Mustache. Di default però swagger-test-templates genera le chiamate HTTP nelle unit test prive dei valori da assegnare ai parametri, lasciando che sia l'utente a completare manualmente ogni unit test. L'interfaccia del modulo consente anche di creare delle unit test complete dei parametri delle richieste a patto di ricevere in ingresso un oggetto contenente tutti i dati necessari.L'idea quindi è stata quella di sviluppare un'applicazione più complessa in cui affiancare a swagger-test-template un modulo che agisse da generatore, e integrare uno strato intermedio per consentire ai due moduli di interagire correttamente.Come generatore si è scelto json-schema-test-data-generator, un modulo JavaScript disponibile su Github capace di generare dati casualmente a partire da un tipo primitivo o uno schema JSON, usando tra le altre la libreria Chance.JS. Il modulo non si limita a proporre valori coerenti con ciò che riceve in ingresso, ma è anche in grado di generare dati che non rispettano per vari motivi il requisito iniziale.Lo strato intermedio si occupa di invocare il generatore, costruire l'oggetto da passare in ingresso a swagger-test-templates e lanciare la generazione dei test.I test generati possono poi essere eseguiti utilizzando la libreria Chai.Considerando il punto di partenza e gli strumenti a disposizione, il risultato finale può considerarsi complessivamente soddisfacente. Ovviamente l'applicazione nel suo stato attuale ha alcuni aspetti che possono essere migliorati, ma comunque al momento soddisfa il requisito iniziale di strumento in grado di testare automaticamente un servizio web.Certamente, l'aspetto più vantaggioso nell'uso dell'applicazione è la sua capacità di generare automaticamente unità di test. Il punto di forza è sicuramente la capacità di individuare grossi errori in fase di implementazione. Inoltre il punto di partenza, ovvero l'unico prerequisito dell'applicazione, è la presenza di una descrizione del servizio.Dal punto di vista degli aspetti da migliorare, uno dei miglioramenti possibili potrebbe essere per esempio introdurre il supporto per la specifica OpenAPI 3. Attualmente infatti l'applicazione è in grado di comprendere descrizioni che usano la versione 2.

Relatori: Antonio Lioy
Anno accademico: 2017/18
Tipo di pubblicazione: Elettronica
Numero di pagine: 74
Soggetti:
Corso di laurea: Corso di laurea magistrale in Ingegneria Informatica (Computer Engineering)
Classe di laurea: Nuovo ordinamento > Laurea magistrale > LM-32 - INGEGNERIA INFORMATICA
Aziende collaboratrici: NON SPECIFICATO
URI: http://webthesis.biblio.polito.it/id/eprint/7993
Modifica (riservato agli operatori) Modifica (riservato agli operatori)