rest api testing with spring resttemplate
Αυτός ο σε βάθος οδηγός εξηγεί πώς να ξεκινήσετε με το REST API Testing με Spring RestTemplate και TestNG με απλά παραδείγματα:
Σε αυτό το άρθρο, θα δούμε πώς να ξεκινήσετε με το REST API Testing με RestTemplate και TestNG framework.
Πριν εξερευνήσετε το REST API Testing με το RestTemplate και το TestNG framework, ας κατανοήσουμε μερικές από τις βασικές έννοιες που εμπλέκονται σε αυτό.
Ας αρχίσουμε!!
Τι θα μάθετε:
- Τι είναι το REST;
- Τι είναι το JSON;
- Τι είναι η δοκιμή API REST;
- Τι είναι το TestNG;
- Τι είναι το πρότυπο Spring REST;
- Βήματα δοκιμής API REST
- Ρύθμιση TestNG Test Framework στα Windows
- Πλήρης κωδικός αρχείου TestCRUD
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Τι είναι το REST;
Σήμερα, το REST έχει γίνει μια πολύ δημοφιλής επιλογή δημιουργίας Web Services. Για παράδειγμα , Η Google διαθέτει πολλές υπηρεσίες REST όπως το Ημερολόγιο, API χάρτη , και τα λοιπά.
ΥΠΟΛΟΙΠΟ δηλ. Αντιπροσωπευτική μεταβίβαση κράτους είναι ένα αρχιτεκτονικό στυλ λογισμικού. Σε αυτό το στυλ, καθορίζεται ένα σύνολο περιορισμών και απαιτούνται υπηρεσίες web που απαιτούνται για την ικανοποίηση αυτών των περιορισμών. Τέτοιες διαδικτυακές υπηρεσίες που συμμορφώνονται με το αρχιτεκτονικό στυλ REST είναι γνωστές ως RESTful Web Services.
Ο όρος «εκπροσώπηση κρατικής μεταφοράς» προτάθηκε για πρώτη φορά από Ρόι Φίλντινγκ στο διδακτορικό του διατριβή το έτος 2000. Η βασική ιδέα του REST είναι η μεταχείριση αντικειμένων από διακομιστή ως πόρων που μπορούν να δημιουργηθούν ή να διαγραφούν.
Τι είναι το JSON;
JSON δηλ. Σημείωση αντικειμένου JavaScript είναι μια πολύ συχνά χρησιμοποιούμενη σύνταξη στις υπηρεσίες REST για αποθήκευση και ανταλλαγή δεδομένων μεταξύ του προγράμματος περιήγησης και του διακομιστή.
Το κύριο πλεονέκτημα του JSON είναι το ελαφρύ και, δεύτερον, και η αναγνώσιμη μορφή του. Τα δεδομένα αποθηκεύονται στο κλειδί: μορφή ζεύγους τιμών. Για παράδειγμα, Μπορείτε να αποθηκεύσετε τα δεδομένα των υπαλλήλων σε μορφή JSON ως εξής: {'name': 'Emp1 ″,' gaji ':' 3000 ″, 'age': '23 ″,' id ':' 52686 ″}.
Τι είναι η δοκιμή API REST;
Όταν λέμε REST API testing, βασικά δοκιμάζει το API εκτελώντας ενέργειες Δημιουργία, Επεξεργασία, Ανάγνωση και Διαγραφή στο Resource με 4 κύριες μεθόδους, δηλαδή POST, GET, PUT και DELETE αντίστοιχα
Τι είναι το TestNG;
Το TestNG είναι ένα πλαίσιο δοκιμών που εμπνέεται από το JUnit και το NUnit. Είναι για τη γλώσσα προγραμματισμού Java. Το TestNG καλύπτει ένα ευρύτερο φάσμα κατηγοριών δοκιμών όπως μονάδα, λειτουργικό, από άκρο σε άκρο, ενσωμάτωση κ.λπ.
Είναι ένα πλαίσιο ανοιχτού κώδικα που υπάγεται στην Άδεια Apache. Παρέχει ένα πλούσιο σύνολο σχολιασμών που επιταχύνουν την ανάπτυξη δοκιμαστικών σεναρίων.
Τι είναι το πρότυπο Spring REST;
Το Spring RestTemplate class είναι ένα μέρος του spring-web που παρουσιάστηκε την Άνοιξη 3
Η κλάση RestTemplate παρέχει έναν πολύ βολικό τρόπο για να δοκιμάσετε τις ξεκούραστες υπηρεσίες ιστού που βασίζονται σε HTTP παρέχοντας υπερφορτωμένες μεθόδους για μεθόδους HTTP όπως GET, POST, PUT, DELETE κ.λπ.
Βήματα δοκιμής API REST
Ας κατανοήσουμε τα βήματα που ακολουθούνται συνήθως στο REST API Testing με μερικά παραδείγματα για να έχουμε μια σαφή κατανόηση.
Σε αυτό το άρθρο, έχω εξετάσει ένα δείγμα υπηρεσίας υπαλλήλου REST API από αυτή η πηγή.
Αρχικά, ας ακολουθήσουμε τα βήματα χειροκίνητα χρησιμοποιώντας το εργαλείο POSTMAN.
# 1) Αρχικά, μάθετε το τελικό σημείο του API στο οποίο θέλετε να αποκτήσετε πρόσβαση.
Για παράδειγμα, http://dummy.restapiexample.com/api/v1/create για δημιουργία νέου πόρου εργαζομένων
#δύο) Ορίστε κεφαλίδες και σώμα, εάν απαιτείται για τη μέθοδο HTTP.
Στο παράδειγμά μας, καθώς προσπαθούμε να δημιουργήσουμε έναν νέο πόρο χρησιμοποιώντας το POST. Για το POST, απαιτείται ένα σώμα αιτήματος.
Έτσι θα ορίσουμε το σώμα ως εξής:
'Όνομα': 'zozo100 ″,' μισθός ':' 123 ″, 'ηλικία': '23 ″
Αποδέχομαι : εφαρμογή / JSON και Τύπος περιεχομένου : εφαρμογή / JSON.
πώς να εγκαταστήσετε το eclipse για το c ++
# 3) Ορίστε την κατάλληλη μέθοδο HTTP, δηλαδή POST σε αυτήν την περίπτωση.
# 4) Στείλτε ένα αίτημα στον διακομιστή υπηρεσίας Rest.
# 5) Λάβετε μια απάντηση από το διακομιστή.
REST API Call χρησιμοποιώντας το εργαλείο POSTMAN
# 6) Επαληθεύστε την απόκριση όπως αναμένεται με τη βοήθεια του κώδικα απόκρισης Π.χ. 200 ΟΚ ως επιτυχία.
# 7) Επαληθεύστε το σώμα απόκρισης όπως αναμένεται, εάν απαιτείται, συγκρίνοντάς το με το αρχείο αναφοράς.
Τώρα, πρέπει να αυτοματοποιήσουμε τα ίδια βήματα για τη δοκιμαστική σουίτα αυτοματισμού. Ας ξεκινήσουμε με την απαιτούμενη ρύθμιση για αυτοματοποίηση.
Ρύθμιση TestNG Test Framework στα Windows
# 1) Εγκατάσταση
- Θα χρησιμοποιήσουμε Java για δοκιμαστική ανάπτυξη σεναρίων. Λοιπόν, Πρώτη λήψη Πρόγραμμα εγκατάστασης JDK για παράθυρα και Εγκαταστήστε το Java στον υπολογιστή σας.
- IDE (Ολοκληρωμένο Περιβάλλον Ανάπτυξης) : Έχω χρησιμοποιήσει το Eclipse ως IDE για την ανάπτυξη της αυτοματοποιημένης δοκιμαστικής σουίτας. Κάντε κλικ εδώ για να το κατεβάσετε.
- Λήψη Eclipse Plug-in για TestNG: Σημειώστε ότι απαιτείται Java 1.7+ για την εκτέλεση του TestNG για την προσθήκη Eclipse. Απαιτείται έκλειψη 4.2 και άνω. (Αναφορά: ΔοκιμήNG ). Ακολουθήστε τα παρακάτω βήματα στο Eclipse:
- Επιλέξτε Βοήθεια / Εγκατάσταση νέου λογισμικού.
- Κάντε κλικ στο Προσθήκη -> Εισαγάγετε http://beust.com/eclipse/
- Επιλέξτε το πλαίσιο ελέγχου δίπλα στη διεύθυνση URL και κάντε κλικ στο κουμπί Επόμενο.
Εγκατάσταση TestNG
-
- Συνεχίστε να κάνετε κλικ στο Επόμενο κουμπί, μέχρι να φτάσετε στην ακόλουθη οθόνη.
Τελική οθόνη εγκατάστασης TestNG
Τέλος, αποδεχτείτε το Συμφωνητικό Άδειας Apache και κάντε κλικ στο κουμπί Τέλος για να ολοκληρώσετε την εγκατάσταση.
Επανεκκινήστε το Eclipse για να ενεργοποιήσετε την εγκατάσταση της προσθήκης.
- Άνοιξη βάζα: Ένα ακόμη τελευταίο πράγμα, πρόκειται να χρησιμοποιήσουμε την κλάση RestTemplate από το εαρινό πλαίσιο. Μπορείς κατεβάστε ελατήρια και να το αποθηκεύσετε σε έναν τοπικό φάκελο, Για παράδειγμα ,C: / projectJar
- JSON-Simple βάζα: Πρέπει να πραγματοποιήσουμε ανάλυση JSON. Για αυτό, θα χρησιμοποιήσουμε ένα ελαφρύ API Json-simple. Λοιπόν, κατεβάστε το Json-simple-1.1.jar στο C: / projectJar
Τώρα έχουμε ολοκληρώσει τις απαραίτητες εγκαταστάσεις. Ας δημιουργήσουμε λοιπόν το έργο αυτοματοποίησης δοκιμής.
# 2) Ρύθμιση έργου
- Δημιουργία αρχείου -> Νέο -> Java Project -> Ονομάστε το ως ' EmployeeTestSuite ».
- Τώρα, Δημιουργήστε νέο πακέτο java com.demo :
- Διαμόρφωση διαδρομής κατασκευής:
- Όπως είδατε στην προηγούμενη ενότητα, έχουμε εγκαταστήσει TestNG, κατεβάσαμε ελατήρια και απλά δοχεία JSON. Λοιπόν, τώρα πρέπει να προσθέσουμε διαδρομή δημιουργίας στο έργο μας για να τα καταναλώσουμε. Για αυτό, δημιουργήστε ένα lib φάκελο στο το EmployeeTestSuite φάκελο και τώρα αντιγράψτε όλα τα βάζα από το C: / projectJar στο lib ντοσιέ.
- Κάντε δεξί κλικ στο ' EmployeeTestSuite '» -> Διαδρομή κατασκευής -> Διαμόρφωση διαδρομής δημιουργίας.
- Κάνε κλικ στο lib αυτί.
- Κάνε κλικ στο Προσθήκη βιβλιοθήκης κουμπί -> Επιλέξτε TestNG. Αυτό θα προσθέσει το TestNG στη διαδρομή κατασκευής.
- Κάντε κλικ στο Προσθέστε βάζα κουμπί -> Επιλέξτε όλα τα βάζα από το lib. Αυτό θα προσθέσει όλα τα βάζα με ελατήριο και το απλό βάζο JSON στη διαδρομή κατασκευής του έργου σας.
Διαδρομή κατασκευής Java
Η δομή του έργου σας θα εμφανίζεται ως εξής στον Eclipse Package Explorer τώρα.
Δομή πακέτου
# 3) Τάξη δοκιμής
Πρέπει να δημιουργήσουμε μια δοκιμαστική τάξη που να καλύπτει τις λειτουργίες CRUD (Δημιουργία-Ανάγνωση-Ενημέρωση-Διαγραφή).
Δημιουργία νέας κλάσης Αρχείο -> Νέο -> TestNG class και ονομάστε το TestCRUD.java
# 4) Μέθοδος δοκιμής
Ας δημιουργήσουμε ξεχωριστές μεθόδους δοκιμής:
- addEm Employee (): Δοκιμή μεθόδου για δοκιμή Δημιουργία API χρησιμοποιώντας τη μέθοδο HTTP POST.
- getEm Employee (): Μέθοδος δοκιμής για δοκιμή API ανάγνωσης χρησιμοποιώντας τη μέθοδο HTTP GET.
- updateEm Employee (): Δοκιμή μεθόδου για τη δοκιμή Ενημέρωσης API χρησιμοποιώντας τη μέθοδο HTTP PUT.
- deleteEm Employee (): Δοκιμή μεθόδου για τη δοκιμή Διαγραφή API χρησιμοποιώντας τη μέθοδο HTTP DELETE.
Μπορείτε να δημιουργήσετε μια μέθοδο δοκιμής όπως οποιαδήποτε μέθοδο java μόνο με σχολιασμό @ Test για το TestNG για να την αναγνωρίσετε ως μέθοδο δοκιμής από το πλαίσιο TestNG
Για παράδειγμα,Το παρακάτω είναι η μέθοδος δοκιμής addEm Employee.
@Test public void addEmployee () {}
Στο παράδειγμά μας, έχω χρησιμοποιήσει ένα δείγμα Υπηρεσία REST.
Τώρα ας αυτοματοποιήσουμε την κλήση POST. Για αυτό, πρέπει να χαρτογραφήσουμε τον κώδικά μας με τα βήματα που ακολουθήσαμε μη αυτόματα στην ενότητα «Βήματα δοκιμών API REST» ένα προς ένα.
# 1) Αρχικά, μάθετε το τελικό σημείο του API στο οποίο θέλετε να αποκτήσετε πρόσβαση.
String addURI = 'http://dummy.restapiexample.com/api/v1/create';
#δύο) Ορισμός κεφαλίδων για τη μέθοδο HTTP.
HttpHeaders headers = new HttpHeaders();
// Προσθήκη κεφαλίδων
headers.add('Accept', 'application/json'); headers.add('Content-Type', 'application/json');
Ορισμός σώματος για τη μέθοδο HTTP.
String jsonBody = '{'name':'zozo100','salary':'123','age':'23'}';
// Δημιουργήστε ένα αντικείμενο HttpEntity ρυθμίζοντας το σώμα και τις κεφαλίδες.
HttpEntity entity = new HttpEntity(jsonBody, headers);
Θα έχουμε τα ακόλουθα βήματα αυτοματοποιημένα σε μία δήλωση.
# 3) Ορίστε την κατάλληλη μέθοδο HTTP, δηλαδή POST σε αυτήν την περίπτωση.
# 4) Στείλτε ένα αίτημα στον διακομιστή υπηρεσιών RESTful.
# 5) Λάβετε μια απάντηση από το διακομιστή.
RestTemplate restTemplate = new RestTemplate(); ResponseEntity response =restTemplate.postForEntity(addURI, entity, String.class);
Χρησιμοποιούμε postForEntity για να στείλετε τη μέθοδο POST στον διακομιστή. Λαμβάνουμε την απάντηση από το αντικείμενο ResponseEntity του διακομιστή.
# 6) Επαληθεύστε την απόκριση όπως αναμένεται με τη βοήθεια του κώδικα απόκρισης.
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
Εδώ, χρησιμοποιούμε την κλάση εργαλείων Assert του TestNG για να επαληθεύσουμε τη μέθοδο κωδικού status assertEquals που συγκρίνει την πραγματική τιμή, δηλαδή απόκριση.getStatusCode (), με την αναμενόμενη τιμή HttpStatus.OK.
Αλλά εδώ, κάνουμε μια ακόμη επαλήθευση, δηλαδή επαλήθευση εάν ο πρόσθετος υπάλληλος είναι παρών στο σώμα απόκρισης ή όχι.
Assert.assertTrue(responseBody.contains(employeeId));
Πώς πήραμε τον υπάλληλο;
Γι 'αυτό, παίρνουμε τη βοήθεια του JSON parser API, δηλαδή Json-simple.
Χρησιμοποιούμε το πρόγραμμα ανάλυσης JSON, καθώς η μορφή JSON χρησιμοποιείται για την αποθήκευση και την ανταλλαγή δεδομένων μεταξύ του πελάτη και του διακομιστή μας στην υπηρεσία REST των υπαλλήλων μας. Όπως αναφέρθηκε προηγουμένως, τα δεδομένα JSON αποθηκεύονται στο κλειδί: τιμή μορφή. Εδώ, θέλουμε να πάρουμε το 'ταυτότητα' αξία.
Θα το πάρουμε αναλύοντας το σώμα απόκρισης ως εξής:
JSONParser parser = new JSONParser(); // Instantiate JSONParser object JSONObject jsonResponseObject = new (JSONObject) parser.parse(jsonString); //Parse jsonString i.e. Response body string in json format to JSON object String employeeId = jsonResponseObject.get('id').toString(); // Get id attribute
Αυτό λοιπόν αφορά τη δοκιμή μεθόδου Δημιουργία.
Ενημέρωση, λήψη και διαγραφή μεθόδων
- Δημιουργήστε ξεχωριστές μεθόδους δοκιμής και ορίστε τις κεφαλίδες, ανάλογα με την περίπτωση.
- Η επαλήθευση του κωδικού κατάστασης γίνεται επίσης με παρόμοιο τρόπο.
- Η κύρια διαφορά είναι οι μέθοδοι αποστολής ενός αιτήματος στους διακομιστές.
Μπορείτε να χρησιμοποιήσετε τις ακόλουθες μεθόδους:
# 1) Ενημέρωση υπαλλήλου : Είναι το αίτημα HTTP PUT. Η μέθοδος RestTemplate PUT που μπορείτε να χρησιμοποιήσετε είναι:
public void put(String url,Object request, Object... urlVariables) throws RestClientException
# 2) Αποκτήστε υπάλληλο: Είναι το αίτημα HTTP GET. Η μέθοδος RestTemplate GET που μπορείτε να χρησιμοποιήσετε έχει ως εξής:
public ResponseEntity getForEntity(String url, Class responseType, Object... urlVariables) throws RestClientException
# 3) Διαγραφή πόρου υπαλλήλου: Είναι το αίτημα διαγραφής HTTP. Η μέθοδος ΔΙΑΓΡΑΦΗ RestTemplate που μπορείτε να χρησιμοποιήσετε είναι:
public void delete(String url, Object... urlVariables) throws RestClientException
Εκτός από αυτές τις μεθόδους, υπάρχουν εναλλακτικές () και εκτελούνται () χρήσιμες μέθοδοι.
εισαγωγή αλγορίθμου ταξινόμησης c ++
Για παράδειγμα, Εάν παρατηρήσετε, η μέθοδος Διαγραφή είναι άκυρη. Αλλά εάν θέλετε να επαληθεύσετε το σώμα απόκρισης, τότε θα χρειαστείτε μια απόκριση πίσω από την εκτέλεση της μεθόδου. Για το σκοπό αυτό, μπορείτε να χρησιμοποιήσετε τη μέθοδο exchange () που επιστρέφει ResponseEntity. Αναφέρομαι στο Άνοιξη πλαίσιο Για περισσότερες πληροφορίες.
# 5) Εκτέλεση των δοκιμών
Τώρα, ολοκληρώσαμε το έργο ανάπτυξης σεναρίου δοκιμής, οπότε ας κάνουμε τις δοκιμές μας Απλώς κάντε δεξί κλικ στο TestCRUD.java και ορίστε την επιλογή «Εκτέλεση ως TestNG Test» .
Αυτό θα εμφανίσει τα αποτελέσματα εκτέλεσης δοκιμής ως εξής.
Έξοδος κονσόλας
Σημείωση: Μπορείτε να ορίσετε τη δοκιμαστική σουίτα στο testng.xml αρχείο επίσης. Στο παράδειγμά μας, είναι μόνο ένα δοκιμαστικό σενάριο. Αλλά στο πραγματικό σενάριο, είναι πάντα μια συλλογή πολλαπλών σεναρίων.
Έτσι το αρχείο testg.xml θα έχει ως εξής:
# 6) Αναφορές
Έχουμε δει το αποτέλεσμα στην κονσόλα. Ωστόσο, το TestNG παρέχει αποτελέσματα δοκιμών σε μια πιο ευπαρουσίαστη μορφή html που μπορεί να κοινοποιηθεί στους ενδιαφερόμενους. Ανοιξε δοκιμή-έξοδος -> emailable-report.html στο πρόγραμμα περιήγησης.
Θα δείτε την αναφορά δοκιμής ως εξής. Στη σελίδα αναφοράς, μπορείτε να δείτε το Όνομα δοκιμής ως TestCRUD, αρκετές επιτυχημένες δοκιμές, δηλαδή 4, Αριθμός παραλειφθέντων και αποτυχημένων, οι οποίες είναι 0 σε αυτήν την περίπτωση. Δείχνει επίσης τον συνολικό χρόνο που απαιτείται για κάθε εκτέλεση της μεθόδου δοκιμής.
Αποτέλεσμα δοκιμής σε μορφή HTML
Πλήρης κωδικός αρχείου TestCRUD
package com.demo; import java.io.IOException; import java.text.ParseException; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.testng.log4testng.Logger; /** * This test class has test methods for CRUD actions on REST API * REST Service http://dummy.restapiexample.com/api * * It has test methods for Create , Edit , Get and Delete Employee items * https://docs.spring.io/spring-framework/docs/current/javadoc- api/org/springframework/web/client/RestTemplate.html * https://docs.spring.io/autorepo/docs/spring/3.2.3.RELEASE/javadoc- api/org/springframework/web/client/RestTemplate.html * @author * */ public class TestCRUD { private String responseBody; public String responseBodyPOST; final static Logger logger = Logger.getLogger(TestCRUD.class); //RESTTemplate Object private RestTemplate restTemplate; //Employee ID private String employeeId; // Create Response Entity - Stores HTTPStatus Code, Response Body, etc private ResponseEntity response; @BeforeTest public void beforeTest() throws IOException, ParseException { logger.info('Setting up prerequisite for test execution'); logger.info('Creating RestTemplate object before tests'); this.restTemplate = new RestTemplate(); } /** * Test Method to add employee using HTTP POST request * * Verifies POST action Status Code * * @throws IOException * @throws ParseException */ @Test public void addEmployee() throws IOException, ParseException { String addURI = 'http://dummy.restapiexample.com/api/v1/create'; HttpHeaders headers = new HttpHeaders(); headers.add('Accept', 'application/json'); headers.add('Content-Type', 'application/json'); logger.info('Add URL :'+addURI); String jsonBody = '{'name':'zozo100','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntity entity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee response = this.restTemplate.postForEntity(addURI, entity, String.class); 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.assertTrue(responseBody.contains(employeeId)); // System.out.println(propertyFile.get('EmployeeAddResBody')); // Check if the status code is 201 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); logger.info('Employee is Added successfully employeeId:'+employeeId); } /** * Method to get Employee ID from REsponse body * I have used Json Simple API for Parsing the JSON object * * @param json * @return */ public static String getEmpIdFromResponse(String json) { JSONParser parser = new JSONParser(); JSONObject jsonResponseObject = new JSONObject(); Object obj = new Object(); try { obj = parser.parse(json); } catch (org.json.simple.parser.ParseException e) { e.printStackTrace(); } jsonResponseObject = (JSONObject) obj; String id = jsonResponseObject.get('id').toString(); return id; } /** * Test Method to Update employee using HTTP PUT request * * Verifies PUT action Status Code * Verifies Updated Name exists in Response Body * * @throws IOException * @throws ParseException */ @Test(dependsOnMethods = 'addEmployee', enabled = true) public void updateEmployee() throws IOException, ParseException { String updateURI = 'http://dummy.restapiexample.com/api/v1/update/'+employeeId; logger.info('Update URL :'+updateURI); String jsonBody = responseBodyPOST; jsonBody = jsonBody.replace('zozo100', 'update_zozo100'); HttpHeaders headers = new HttpHeaders(); headers.add('Accept', 'application/json'); headers.add('Content-Type', 'application/json'); HttpEntity entity = new HttpEntity(jsonBody, headers); //PUT Method to Update the existing Employee //NOTE that I have Not used restTemplate.put as it's void and we need response for verification response = restTemplate.exchange(updateURI, HttpMethod.PUT, entity, String.class); responseBody = response.getBody().toString(); System.out.println('Update Response Body :'+responseBody); // Check if the updated Employee is present in the response body. Assert.assertTrue(responseBody.contains('update_zozo100')); // Check if the status code is 200 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); logger.info('Employee Name is Updated successfully employeeId:'+employeeId); } /** * Test Method to Get employee using HTTP GET request * * Verifies GET action Status Code * Verifies Name exists in Response Body * * @throws IOException * @throws ParseException */ @Test(dependsOnMethods = 'updateEmployee', enabled = true) void getEmployee() throws IOException, ParseException { String getURI = 'http://dummy.restapiexample.com/api/v1/employee/'+this.employeeId; logger.info('Get URL :'+getURI); HttpHeaders headers = new HttpHeaders(); HttpEntity entity = new HttpEntity(headers); //GET Method to Get existing Employee response = restTemplate.getForEntity(getURI,String.class); // Write response to file responseBody = response.getBody().toString(); //Suppressing for log diffs System.out.println('GET Response Body :'+responseBody); // Check if the added Employee ID is present in the response body. Assert.assertTrue(responseBody.contains('update_zozo100')); // Check if the status code is 200 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); logger.info('Employee is retrieved successfully employeeId:'+employeeId); } /** * Test Method to Delete employee using HTTP DELETE request * * Verifies DELETE action Status Code * Verifies Success Message Text in Response Body * * @throws IOException * @throws ParseException */ @Test(dependsOnMethods = 'getEmployee', enabled = true) public void deleteEmployee() throws IOException, ParseException { String delURI = 'http://dummy.restapiexample.com/api/v1/delete/'+this.employeeId; HttpHeaders headers = new HttpHeaders(); HttpEntity entity = new HttpEntity(headers); //DELETE Method to Delete existing Employee response = restTemplate.exchange(delURI, HttpMethod.DELETE, entity, String.class); // Check if the status code is 204 Assert.assertEquals(response.getStatusCode(), HttpStatus.OK); responseBody = response.getBody(); Assert.assertEquals(getMessageFromResponse(responseBody), 'successfully! deleted Records'); logger.info('Employee is Deleted successfully employeeId:'+employeeId); } /** * Gets 'text' key value from Response body text for verification * I have used Json Simple API for Parsing the JSON object * * @param json * @return text string */ public static String getMessageFromResponse(String json) { String successMessageText = null; try { JSONParser parser = new JSONParser(); JSONObject jsonResponseObject = new JSONObject(); jsonResponseObject = (JSONObject) (parser.parse(json)); String successMessage = jsonResponseObject.get('success').toString(); jsonResponseObject = (JSONObject) (parser.parse(successMessage)); successMessageText = jsonResponseObject.get('text').toString(); } catch (org.json.simple.parser.ParseException e) { e.printStackTrace(); } return successMessageText; } @AfterTest public void afterTest() { logger.info('Clean up after test execution'); logger.info('Creating RestTemplate object as Null'); this.restTemplate = new RestTemplate(); } }
συμπέρασμα
Έχουμε συνοψίσει το μαθησιακό αποτέλεσμα αυτού του άρθρου παρακάτω. Είδαμε όλα τα βήματα από την αρχή για να δημιουργήσουμε ένα REST API Test Automation Framework.
Σε αυτό μάθαμε τα εξής:
- Για αυτοματοποιημένο έλεγχο, επιλέξαμε τη Java ως γλώσσα προγραμματισμού.
- Επιλέξαμε το TestNG ως δοκιμαστικό πλαίσιο για τη δημιουργία ενός δοκιμαστικού σεναρίου όπου καταναλώσαμε σχολιασμούς TestNG όπως το @Test.
- Για την αποστολή πραγματικών αιτημάτων HTTP στον διακομιστή, καταναλώσαμε την κλάση RestTemplate Spring framework.
- Για την κατανάλωση αυτών των API, κάναμε την εγκατάσταση του TestNG, κάναμε λήψη βάζων Spring και απλού βάζου Json για το API ανάλυσης.
- Τέλος, εκτελέσαμε το Test class και είδαμε το αποτέλεσμα στην κονσόλα καθώς και σε μια πιο ευπαθή και πιο ευανάγνωστη μορφή HTML.
Με λίγα λόγια, σε αυτό το άρθρο, μάθαμε πώς να ξεκινήσουμε με τον αυτοματισμό δοκιμής REST API με το Spring RestTemplate. Καλύψαμε τη δημιουργία του δοκιμαστικού αυτοματοποιημένου πλαισίου μας, ξεκινώντας από την εγκατάσταση όλου του βασικού λογισμικού, το Project Setup, το Test Script development μέχρι το Test test και την προβολή των δημιουργημένων αναφορών.
Αυτό είναι αρκετά αρκετό για κάθε αυτοματοποιημένο QA για να ξεκινήσετε με το πλαίσιο δοκιμής αυτοματισμού. Όμως, έχουμε δει μόνο τα απαιτούμενα μέρη από το καθένα. Για παράδειγμα, έχουμε χρησιμοποιήσει την εγκατάσταση TestNG, τη μέθοδο δοκιμής χρησιμοποιώντας σχολιασμό @Test, αναφορές. Ωστόσο, το TestNG παρέχει πολλές ακόμη δυνατότητες όπως το DataProvider για δοκιμές βάσει δεδομένων κ.λπ.
Είστε έτοιμοι να ξεκινήσετε με τον αυτοματισμό REST API Test με το Spring RestTemplate;
Συνιστώμενη ανάγνωση
- 10 καλύτερα εργαλεία δοκιμών API το 2021 (SOAP και REST API Testing Tools)
- Τα καλύτερα εργαλεία δοκιμής λογισμικού 2021 (QA Test Automation Tools)
- Testing Primer eBook Λήψη
- Κορυφαίες 20 πιο σημαντικές ερωτήσεις και απαντήσεις συνέντευξης δοκιμών API
- Απλοποίηση της δοκιμής API με το Katalon Studio
- Parasoft SOAtest Tutorial: Εργαλείο δοκιμών API χωρίς script
- Φόρτωση δοκιμής με HP LoadRunner Tutorials
- Διαφορά μεταξύ Desktop, Client Server Testing και Web Testing