rest api testing with cucumber using bdd approach
Questo tutorial spiega i test API REST con Cucumber utilizzando l'approccio BDD. Copre l'installazione del software, l'impostazione del progetto, l'esecuzione di TestScript e i report.
In questo articolo vedremo come iniziare con il test delle API REST in stile BDD con il framework Cucumber.
Prima di approfondire l'argomento, cerchiamo di comprendere i concetti importanti coinvolti in esso.
Iniziamo!!
Cosa imparerai:
- Concetti importanti nell'API REST
- Come funziona il cetriolo?
- Configurazione del framework di test di cetriolo su Windows
- Conclusione
- Lettura consigliata
Concetti importanti nell'API REST
RIPOSO
Questo è uno stile architettonico del software. La forma completa di REST è il trasferimento di stato rappresentativo . Definisce una serie di vincoli da utilizzare per la creazione di servizi Web. I servizi Web conformi allo stile architettonico REST sono chiamati servizi Web RESTful.
Test API REST
Il test dell'API REST sta testando l'API utilizzando 4 metodi principali, ovvero POST, GET, PUT e DELETE.
Modello REST
RestTemplate è una classe framework di primavera open source che fornisce un modo conveniente per testare i servizi Web restful basati su HTTP fornendo metodi di sovraccarico per i metodi HTTP.
Nota : Per saperne di più sul concetto di test API REST, puoi fare riferimento al nostro tutorial precedente ' Test API REST con Spring RestTemplate e TestNG 'Dove abbiamo spiegato come eseguire manualmente il test dell'API REST insieme al concetto di JSON.
BDD
BDD è l'approccio di sviluppo guidato dal comportamento. Questa è una delle tecniche di sviluppo software emerse dallo stile Test-Driven Development, ovvero lo stile TDD.
Il principio del test BDD è che i casi di test sono scritti in un linguaggio naturale che è facilmente leggibile anche dai non programmatori.
Cetriolo
Il cetriolo è uno strumento che supporta lo sviluppo guidato dal comportamento
Come funziona il cetriolo?
Vediamo come funziona il cetriolo.
Cucumber è costituito da file di funzionalità, file di definizione del passaggio e classe Runner.
File di funzionalità
I file delle funzionalità sono scritti dal tuo analista aziendale o forse dal tuo sponsor. Questi sono scritti in formato in linguaggio naturale con le specifiche descritte in esso e convalidano che l'applicazione funzioni secondo le specifiche.
Queste specifiche hanno più scenari o esempi menzionati in esso. Ogni scenario è un elenco di determinati passaggi che Cucumber deve eseguire.
Consideriamo uno scenario in cui l'utente desidera accedere al sistema.
Per verificare se funziona secondo le specifiche, è necessario descrivere questo scenario. Ecco i passaggi da eseguire insieme al risultato desiderato secondo le specifiche.
Solo per avere un'idea, ecco come apparirà uno scenario di esempio:
Scenario: Login to the system Given User launches Login screen When User enters username, password and submit Then Login Successful message appears
Puoi vedere, ogni scenario è una sorta di elenco dei passaggi che Cucumber deve elaborare. Affinché Cucumber comprenda gli scenari, devono seguire alcune regole di sintassi di base, chiamate Cetriolino .
File di definizione dei passaggi
I file delle definizioni dei passaggi mappano ogni passaggio Gherkin menzionato in un file Feature al codice di implementazione. Ciò consente a Cucumber di eseguire l'azione che deve essere eseguita dal passaggio.
Il framework Cucumber supporta molti linguaggi di programmazione per scrivere definizioni Step come Java, .net e Ruby.
Nota : Nell'articolo ' Test API REST con Spring RestTemplate e TestNG ', Abbiamo sviluppato il progetto di test TestNG con il modello Spring.
Ora svilupperemo il Framework di test per lo stesso servizio REST e RestTemplate, ma usando Cucumber per uno stile di test di sviluppo basato sul comportamento.
Cominciamo con la configurazione del nostro framework di test di automazione con Cucumber!
Configurazione del framework di test di cetriolo su Windows
# 1) Installazione
(io) Utilizzeremo Java per lo sviluppo della definizione dei passaggi. Quindi, prima scarica il programma di installazione JDK per Windows da Oracolo e installa Java sulla tua macchina.
(ii) IDE (Integrated Development Environment) : Ho utilizzato Eclipse come IDE per lo sviluppo della mia suite di test di automazione. Puoi scaricarlo da Eclisse
(iii) Ottieni il plug-in Eclipse per Cucumber:
Segui questi passaggi in Eclipse:
- Seleziona Aiuto -> Installa nuovo software dall'opzione di menu.
- accedere 'Cetriolo Eclipse' nella casella di testo di ricerca.
- Clicca sul Installare pulsante.
Installazione plug-in di cetriolo in Eclipse
- Continua a fare clic sul pulsante Avanti fino a raggiungere il file Rivedi licenza schermo.
Infine, fare clic sulla casella di controllo per accettare il contratto di licenza e fare clic su finire pulsante. Questo completerà l'installazione. Ora riavvia l'IDE Eclipse. Ciò è necessario per rendere effettiva l'installazione del plug-in.
(iv) Barattoli primaverili: Poiché utilizzeremo la classe RestTemplate che appartiene al framework spring, è necessario disporre di jar framework spring. Puoi scaricare i barattoli primaverili dal file Quadro di primavera e salvalo nella cartella locale. Per esempio, C: / projectJar
(v) JSON-Simple Jars: Dobbiamo eseguire l'analisi JSON. Quindi, utilizzeremo un'API semplice JSON leggera. Quindi, scarica JSON-simple-1.1.jar e salvalo in C: / projectJar
(vi) Barattoli di cetriolo:
Avresti bisogno dei seguenti barattoli di cetriolo, per eseguire il progetto Cucumber:
- cuore di cetriolo
- cetriolo-java
- cetriolo-JUnit
- cetriolo-JVM-deps
- rapporti sui cetrioli
- cetriolino
- JUnit
- mockito-all
- copertura
- cucumber-HTML (Per i rapporti in html)
Puoi scaricare questi file usando il file pom.xml. Ma il modo più semplice è scaricare questi file jar dal Repository centrale e salva quei file jar nella cartella locale, Per esempio, C: / projectJar
Ora, con questo, abbiamo completato tutte le installazioni necessarie. Quindi, creiamo il nostro progetto BDD Test Automation.
# 2) Configurazione del progetto
- Crea file -> Nuovo -> Progetto Java -> Denominalo come ' CRUD_Cucumber '.
- Ora, crea un nuovo pacchetto Java demo.
- Configurare BuildPath del progetto:
- Come hai visto nella sezione precedente, abbiamo installato il plug-in Cucumber, scaricato la molla e JSON-simple jar. Quindi, è ora di aggiungere il percorso di compilazione nel nostro progetto per consumarli. Per questo, crea un file lib cartella in Cartella CRUD_Cucumber ' e ora copia tutti i jar da C: / projectJar a lib / cetriolo, lib / primavera cartella.
- Fare clic con il pulsante destro del mouse su ' CRUD_Cucumber ' -> Build Path -> Configura Build Path.
- Clicca sul Biblioteche tab.
- Clicca su Aggiungi i barattoli pulsante-> Seleziona tutti i vasi dal file lib / cetriolo cartella e lib / Spring cartella. Questo aggiungerà tutti i barattoli di cetriolo, i barattoli a molla e il barattolo semplice JSON al percorso di creazione del progetto.
La struttura del progetto verrà visualizzata come segue in Eclipse Package Explorer.
Struttura del pacchetto del progetto di test
# 3) File delle caratteristiche
Ora, costruiamo il nostro file di funzionalità DemoFeature.feature con la funzione Esecuzione di operazioni CRUD sul servizio dei dipendenti.
Nel nostro esempio, ho utilizzato un http://dummy.restapiexample.com/api servizio REST di esempio fittizio.
Questo file di funzionalità descrive gli scenari per eseguire le operazioni CRUD, ad esempio per coprire CRUD (Crea-Leggi-Aggiorna-Elimina).
- Definiamo prima la caratteristica, nel nostro caso sono i metodi CRUD di prova, che possono essere descritti come segue.
Feature: Test CRUD methods in Sample Employee REST API testing
- Ora, questo ha diversi scenari come Crea, Aggiorna, Leggi ed Elimina il record del dipendente. Quindi dai un'occhiata allo scenario POST:
Scenario: Add Employee record
- Descrivi il prerequisito per il test che sta impostando l'URL del servizio per i dipendenti.
Given I Set POST employee service api endpoint
- Specificare la fase di test effettiva dell'invio di una richiesta di post.
When I Set request HEADER And Send a POST HTTP request
- Descrivi ora la verifica del corpo di risposta.
Then I receive valid Response
Quindi, nel nostro file delle caratteristiche, lo scenario apparirà come segue:
Scenario: Add Employee record Given I Set POST employee service api endpoint When I Set request HEADER And Send a POST HTTP request Then I receive valid Response
Allo stesso modo, è possibile scrivere gli scenari rimanenti come mostrato di seguito.
DemoFeature.feature
# 4) Implementazione della definizione dei passaggi
Per i passaggi delle funzionalità utilizzati negli scenari precedenti, è necessario scrivere implementazioni programmatiche, in questo caso è Java.
Una Step Definition è un metodo scritto in Java con un'espressione. Collega il suo metodo a uno o più passaggi. Quindi, quando Cucumber esegue i passaggi descritti in uno scenario del file di funzionalità, prima cerca una corrispondenza definizione del passaggio eseguire.
Per esempio, quando la definizione del passaggio per Aggiungi dipendente utilizzando POST può essere scritta come segue.
Per il passaggio dato, l'implementazione è scritta come segue:
@Given('^I Set POST employee service api endpoint$') public void setPostEndpoint(){ addURI = 'http://dummy.restapiexample.com/api/v1/create'; System.out.println('Add URL :'+addURI); }
Allo stesso modo, per il passaggio Quando, il seguente è il metodo di definizione:
@When ('^Send a POST HTTP request$') public void sendPostRequest(){ doublename_id = Math.random(); emp_name = 'zozo_'+name_id;//Just to avoid Duplicate Name entry String jsonBody'{'name':''+emp_name+'','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntityentity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee restTemplate = newRestTemplate (); response = restTemplate.postForEntity(addURI, entity, String.class); }
Ora, ecco la parte del passaggio di verifica, ovvero l'implementazione del passaggio successivo:
@Then ('^I receive valid Response$') Public void verifyPostResponse(){ responseBodyPOST = response.getBody(); // Write response to file responseBody = response.getBody().toString(); System.out.println('responseBody --->' + responseBody); // Get ID from the Response object employeeId = getEmpIdFromResponse(responseBody); System.out.println('empId is :' + employeeId); // Check if the added Employee is present in the response body. Assert.hasText(responseBody,employeeId); // Check if the status code is 201 Assert.isTrue(response.getStatusCode()==HttpStatus.OK); System.out.println('Employee is Added successfully employeeId:'+employeeId); }
Nota: Qui stiamo usando il metodo RestTemplate per l'invio della richiesta. Questo è lo stesso del metodo utilizzato in ' Test API REST con Spring RestTemplate e TestNG ' . Per saperne di più sui metodi Rest Template, puoi fare riferimento al tutorial.
Pertanto, la definizione del passo apparirà come segue.
StepDefinition.java
È possibile implementare le definizioni dei passaggi per gli scenari rimanenti Aggiorna, Lettura ed Elimina dipendente allo stesso modo.
# 5) Esecuzione dei test
Ora, abbiamo completato la nostra attività di sviluppo dello scenario e dello script di istruzioni, quindi eseguiamo i nostri test. Per questo, dobbiamo scrivere una classe runner JUnit.
publicclassRunner { }
Qui, devi aggiungere le seguenti annotazioni sopra il nome della classe:
@RunWith (Cucumber.class): Per correre come test runner per Cucumber.
@CucumberOptions: Qui si specifica la posizione del file delle caratteristiche e la posizione del file di definizione del passaggio per il framework Cucumber da esaminare durante l'esecuzione.
features='' glue=''
Collegare: Viene utilizzato per specificare diverse opzioni di formattazione per il report che viene generato come output.
Quindi, la tua classe di corridori sarà simile a questa.
TestRunner.java
Basta fare clic destro su TestRunner.java e seleziona l'opzione ' Esegui come test JUnit ' . Questo visualizzerà il risultato dell'esecuzione del test come segue.
Output della scheda Junit
Vedrai i seguenti messaggi su Console.
Uscita console
# 6) Rapporti
Abbiamo visto il risultato sulla console. Tuttavia, Cucumber fornisce i risultati dei test in un formato HTML più presentabile che può essere condiviso con le parti interessate.
Aperto bersaglio -> rapporti sui cetrioli nel browser.
Nota : Ricordi CucucmberOptions della classe Junit runner?
@CucumberOptions (features='Features',glue={'demo'},plugin={'pretty', 'html:target/cucumber-reports'})
Qui il plugin è l'opzione che specifichiamo per i report in formato HTML insieme alla cartella.
target/cucumber-reports
Ora apri la pagina target cucumber-reports index.html. La pagina del report è la pagina HTML in cui è possibile visualizzare il nome della funzionalità con gli scenari eseguiti correttamente.
domande di intervista su angularjs per esperti
Quindi, il tuo rapporto apparirà come segue.
Risultato CucumberTest in formato HTML
Conclusione
Per concludere questo tutorial, riassumiamo ciò che abbiamo imparato finora.
Abbiamo visto tutti i passaggi dall'inizio per configurare BDD Cucumber REST API Test Automation Framework.
In questo processo abbiamo imparato quanto segue:
- Per l'automazione dei test, abbiamo selezionato Java come linguaggio di programmazione.
- Abbiamo scelto Cucumber come framework di test per creare una suite di test nel modo di test Behavior Driven Development.
- Per inviare richieste HTTP effettive al server, abbiamo utilizzato la classe RestTemplate del framework Spring.
- Per utilizzare queste API, abbiamo installato il plug-in Cucumber, scaricato i file jar delle dipendenze Cucumber, i jar Spring e il jar semplice JSON per l'API parser.
- Abbiamo creato il file Feature per descrivere gli scenari in un inglese semplice, il file Step Definition per mappare Steps e la classe JUnit Runner per eseguire il file Feature.
- Infine, abbiamo eseguito la classe Test Runner e abbiamo visto il risultato sulla console in un formato HTML più presentabile e leggibile.
In breve, questo articolo spiega come iniziare con l'automazione dei test API REST con Cucumber. Abbiamo coperto la configurazione del nostro framework di automazione dei test direttamente dall'installazione di tutto il software essenziale, l'impostazione del progetto, lo sviluppo di TestScript fino all'esecuzione del test e la visualizzazione dei report generati.
Questo è sufficiente per qualsiasi QA dell'automazione per iniziare con il framework di automazione dei test. Ma se qualcuno vuole capire in dettaglio come funziona Cucumber internamente, come funziona il linguaggio Gherkin, allora può essere esplorato su Cetriolo.
Spero che tu sia pronto per iniziare con il test dell'API REST in stile BDD con cetriolo !!
Lettura consigliata
- 10 migliori strumenti di test API nel 2021 (strumenti di test API SOAP e REST)
- Migliori strumenti di test del software 2021 (Strumenti di automazione del test QA)
- Test API REST con Spring RestTemplate e TestNG
- Download dell'eBook Testing Primer
- Le 20 domande e risposte più importanti dell'intervista sui test API
- Test SaaS: sfide, strumenti e approccio al test
- Semplificare il test delle API con Katalon Studio
- Test di automazione utilizzando lo strumento Cucumber e il selenio - Tutorial sul selenio # 30