Οδηγός REST Assured για δοκιμές αυτοματισμού API (Παράδειγμα)

Τι είναι το Rest Assured;

Μείνε ήσυχος σας δίνει τη δυνατότητα να δοκιμάσετε REST API χρησιμοποιώντας βιβλιοθήκες java και ενσωματώνεται καλά με το Maven. Διαθέτει πολύ αποτελεσματικές τεχνικές αντιστοίχισης, επομένως η επιβεβαίωση των αναμενόμενων αποτελεσμάτων είναι επίσης πολύ απλή. Το Rest Assured έχει μεθόδους ανάκτησης δεδομένων από σχεδόν κάθε τμήμα του αιτήματος και της απόκρισης, ανεξάρτητα από το πόσο περίπλοκες είναι οι δομές JSON.

Για την κοινότητα δοκιμών, το API Automation Testing είναι ακόμα νέο και εξειδικευμένο. Οι πολυπλοκότητες JSON διατηρούν ανεξερεύνητες τις δοκιμές API. Αλλά αυτό δεν το καθιστά λιγότερο σημαντικό στη διαδικασία της δοκιμής. Το πλαίσιο Rest Assured.io το έχει κάνει πολύ απλό χρησιμοποιώντας τα βασικά βασικά στοιχεία της Java, καθιστώντας το πολύ επιθυμητό πράγμα για εκμάθηση.

Γιατί χρειάζεται Rest-Sured;

Φανταστείτε ότι ανοίγετε την προβολή χάρτη σας στο google και αναζητάτε ένα μέρος που θέλετε να πάτε, βλέπετε αμέσως κοντινά εστιατόρια, βλέπετε επιλογές για τη μετακίνηση. από ορισμένους κορυφαίους ταξιδιωτικούς παρόχους και δείτε τόσες πολλές επιλογές στα χέρια σας. Όλοι γνωρίζουμε ότι δεν είναι προϊόντα της Google, τότε πώς καταφέρνει η Google να το δείξει. Χρησιμοποιούν τα εκτεθειμένα API αυτών των παρόχων. Τώρα, εάν σας ζητηθεί να δοκιμάσετε αυτό το είδος εγκατάστασης, ακόμη και πριν κατασκευαστεί ή είναι υπό ανάπτυξη το UI, η δοκιμή των API γίνεται εξαιρετικά σημαντική και η επανειλημμένη δοκιμή τους, με διαφορετικούς συνδυασμούς δεδομένων, το καθιστά μια πολύ κατάλληλη περίπτωση για αυτοματισμό.

Νωρίτερα, χρησιμοποιούσαμε δυναμικές γλώσσες όπως groovy, ruby ​​για να το πετύχουμε και ήταν δύσκολο. Ως εκ τούτου, η δοκιμή API δεν διερευνήθηκε με λειτουργικές δοκιμές.

Αλλά χρησιμοποιώντας το Rest Assured, οι δοκιμές αυτοματοποίησης των API, η αποστολή απλών αιτημάτων https με φιλικές προς το χρήστη προσαρμογές είναι απλή εάν κάποιος έχει ένα βασικό υπόβαθρο της java. Απαιτείται για την κατανόηση των δοκιμών API και των δοκιμών ενσωμάτωσης, αλλά δημοσιεύστε ότι η αυτοματοποίηση Το Rest Assured παρέχει πολύ καλή εμπιστοσύνη στο backend, ενώ οι δοκιμές στο front-end μπορούν απλώς να επικεντρωθούν στη διεπαφή χρήστη και στις λειτουργίες πελάτη. Το Rest Assured είναι ένας ανοιχτός κώδικας με πολλές πρόσθετες μεθόδους και βιβλιοθήκες που προστίθενται το έχουν καταστήσει εξαιρετική επιλογή για την αυτοματοποίηση API.

Πώς να ρυθμίσετε το Rest Assured.io με Eclipse

Βήμα 1) Εγκατάσταση Java. Ανατρέξτε σε αυτό καθοδηγήσει

Βήμα 2) Κατεβάστε ένα IDE για να ξεκινήσετε: έκλειψη

Βήμα 3) Εγκαταστήστε το Maven και ρυθμίστε το eclipse σας. Αναφέρομαι εδώ.

Ρύθμιση Να είστε σίγουροι

  1. Δημιουργήστε ένα Maven Project στο IDE σας. Χρησιμοποιούμε το Intellij, αλλά θα έχετε παρόμοια δομή σε οποιοδήποτε IDE μπορεί να χρησιμοποιείτε.
  2. Ανοίξτε το POM.xml
Δομή έργου
Δομή έργου

Για Rest Assured.io: Για Java έκδοση < 9 χρήστες:

Προσθέστε την παρακάτω εξάρτηση στο POM.xml:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Για Rest Assured.io : Για Java χρήστες έκδοσης 9+:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Αντιμετώπιση προβλημάτων:

Σε περίπτωση που βλέπετε σφάλματα και δεν είστε σίγουροι εάν οι εξαρτήσεις λήφθηκαν καλά,

  1. Εκτελέστε μια κατασκευή maven για να εισαγάγετε όλες τις εξαρτήσεις, και πάλι θα βρείτε βοήθεια για τη ρύθμιση του Maven στο guru99.
  2. Ωστόσο, βλέπετε σφάλματα και, στη συνέχεια, κάντε έναν καθαρισμό του maven και στη συνέχεια μια εγκατάσταση του maven και θα πρέπει να δημιουργηθεί χωρίς σφάλματα.
  3. Μπορείτε να προσθέσετε τις παρακάτω γραμμές στην τάξη java και να δείτε ότι δεν υπάρχουν σφάλματα μεταγλώττισης.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Το πρώτο απλό σενάριο Rest Assured

Σύνταξη:

Η σύνταξη του Rest Assured.io είναι το πιο όμορφο κομμάτι, καθώς είναι πολύ BDD και κατανοητό.

Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Επεξήγηση:

Κώδικας εξήγηση
Δεδομένος() Λέξη-κλειδί "Δεδομένη", σας επιτρέπει να ορίσετε ένα φόντο, εδώ, μεταβιβάζετε τις κεφαλίδες αιτήματος, το ερώτημα και την παράμετρο διαδρομής, το σώμα, τα cookie. Αυτό είναι προαιρετικό εάν αυτά τα στοιχεία δεν χρειάζονται στο αίτημα
Οταν() Η λέξη-κλειδί «όταν» σηματοδοτεί την αρχή του σεναρίου σας. Για παράδειγμα, «όταν» παίρνεις/ποστάρεις/ βάζεις κάτι, κάνε κάτι άλλο.
Μέθοδος() Αντικαταστήστε το με οποιαδήποτε από τις λειτουργίες CRUD (get/post/put/delete)
Επειτα() Οι προϋποθέσεις διεκδίκησης και αντιστοίχισης πηγαίνουν εδώ

Τώρα που έχετε τη ρύθμιση και κάποιο υπόβαθρο στη σύνταξη, ας δημιουργήσουμε την πρώτη μας απλή δοκιμή. Είναι εντάξει αν μέχρι στιγμής η δομή σας φαίνεται νέα, καθώς κωδικοποιείτε περαιτέρω ερμηνεύοντας κάθε γραμμή, θα το καταλάβετε.

Τι θα φέρεις;

Ανοίξτε το πρόγραμμα περιήγησής σας και πατήστε – http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Βεβαιωθείτε ότι βλέπετε κάτι όπως παρακάτω.

Σενάριο να είστε σίγουροι

Σε περίπτωση που λάβετε ένα σφάλμα στο πρόγραμμα περιήγησης όταν προσπαθείτε να λάβετε απάντηση για το αίτημα,

  1. Δείτε αν έχετε χρησιμοποιήσει Https ή Http. Το πρόγραμμα περιήγησής σας ενδέχεται να έχει ρυθμίσεις για να μην ανοίγει μη ασφαλείς ιστότοπους.
  2. Δείτε εάν έχετε διακομιστή μεσολάβησης ή τείχος προστασίας που εμποδίζει το πρόγραμμα περιήγησής σας να ανοίγει ιστότοπους.

*Σημείωση – δεν χρησιμοποιήσατε καμία κεφαλίδα εδώ, κανένα σώμα και κανένα cookie. Ήταν μια διεύθυνση URL και επίσης λαμβάνετε περιεχόμενο από το API και δεν δημοσιεύετε ή ενημερώνετε οποιοδήποτε υπάρχον περιεχόμενο, έτσι ώστε να είναι μια κλήση GET. Θυμηθείτε αυτό για να κατανοήσετε καλύτερα την πρώτη μας δοκιμή.

Ο στόχος της δοκιμής σας:

Ο στόχος του σεναρίου είναι να εκτυπώσει το ίδιο αποτέλεσμα στην κονσόλα IDE με αυτό που λάβατε στο πρόγραμμα περιήγησης μέσω του Rest Assured.

Ας το κωδικοποιήσουμε με τα παρακάτω βήματα:

Λήψη του σώματος απάντησης

Βήμα 1) Δημιουργήστε μια τάξη με το όνομα "myFirstRestAssuredClass"

Βήμα 2) Δημιουργήστε μια μέθοδο που ονομάζεται "getResponseBody"

Βήμα 3) Παρόμοια με τη δομή που μάθαμε νωρίτερα για το δεδομένο, πότε και μετά, πληκτρολογήστε τον παρακάτω κώδικα

δεδομένος(). -> Δεν απαιτούνται κεφαλίδες, δεν απαιτείται ερώτημα ή παράμετρος διαδρομής.

πότε(). -> Δεν υπάρχει ρύθμιση συγκεκριμένης συνθήκης

παίρνω('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->μόνο το url πρέπει να παρέχεται

έπειτα(). -> Δεν απαιτούνται συγκεκριμένοι ισχυρισμοί

κούτσουρο(). all() -> Μόλις ληφθεί όλη η απάντηση, καταγράψτε την απάντηση, τις κεφαλίδες, ουσιαστικά όλα όσα σας επιστρέφει το αίτημα.

public static void getResponseBody(){
   given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Τώρα παρατηρήστε ότι η διεύθυνση URL που χρησιμοποιείται είναι μεγάλη και λιγότερο ευανάγνωστη, αν κοιτάξετε προσεκτικά, θα παρατηρήσετε ότι χρησιμοποιούνται 3 παράμετροι ερωτήματος που είναι

  1. Κωδικός πελάτη
  2. Κωδικός Πρόσβασης
  3. Αριθμός λογαριασμού

Να είστε σίγουροι, μας βοηθά να περάσουμε κάθε μέρος (ερώτημα, διαδρομή, παράμετρος κεφαλίδας) ξεχωριστά, κάνοντας τον κώδικα πιο ευανάγνωστο και εύκολο στη συντήρηση. Επίσης, μπορούμε να παραμετροποιήσουμε τα δεδομένα από ένα εξωτερικό αρχείο όπως απαιτείται.

Για τη χρήση παραμέτρων ερωτήματος, επιστρέφουμε στον ορισμό της σύνταξης και βλέπουμε ότι όλες περνούν ως μέρος του δεδομένου.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**Σημειώστε ότι χρησιμοποιήσαμε "σώμα" αντί για "όλα". Αυτό μας βοηθά να εξαγάγουμε μόνο το σώμα της απόκρισης.

Παραγωγή:

Έξοδος για το getResponseBody
Έξοδος για το getResponseBody

Λήψη του κωδικού κατάστασης απάντησης

Η επόμενη μέθοδος που θα κάνουμε σενάριο θα είναι να λάβουμε τον κωδικό κατάστασης και επίσης να βάλουμε έναν ισχυρισμό για την επικύρωση του ίδιου.

Βήμα 1) Δημιουργήστε μια μέθοδο που ονομάζεται getResponseStatus()

Βήμα 2) Χρησιμοποιήστε την ίδια δομή αιτήματος που χρησιμοποιήθηκε παραπάνω. Αντιγράψτε και επικολλήστε το.

Βήμα 3) Αντί να το καταγράψουμε, χρησιμοποιούμε την ενσωματωμένη μέθοδο "getStatusCode" του Rest Assured για να ανακτήσουμε την τιμή του κωδικού κατάστασης

Βήμα 4) Για να επιβεβαιώσουμε ότι ο κωδικός κατάστασής σας είναι 200, χρησιμοποιούμε τις λέξεις-κλειδιά – assertThat().statusCode(expectedCode)

**Σημείωση – Το URL είναι μια μεταβλητή που χρησιμοποιείται για απλότητα. Η διεύθυνση URL περιέχει ολόκληρη τη διεύθυνση URL αιτήματος API

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Παραγωγή:

Έξοδος για getResponseStatus
Έξοδος για getResponseStatus

Επιχειρηματική Ανάγκη

Ένας από τους βασικούς κανόνες του αυτοματισμού είναι ότι πρέπει να βάζουμε σημεία ελέγχου ώστε το τεστ να προχωρήσει μόνο εφόσον πληρούνται όλες οι απαιτούμενες προϋποθέσεις. Στη δοκιμή API, η πιο βασική επικύρωση είναι να ελέγξετε εάν ο κωδικός κατάστασης του αιτήματος είναι σε μορφή 2XX.

Ο πλήρης κωδικός, μέχρι στιγμής:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

     getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* Σημείωση:

  1. Το 200 είναι μια επιτυχημένη απάντηση για αυτό το σενάριο. Κατά καιρούς, χρειάζεται επίσης να αποτύχει το αίτημα και, στη συνέχεια, μπορείτε να χρησιμοποιήσετε το 4XX ή το 5XX. Προσπαθήστε να αλλάξετε τον κωδικό κατάστασης παρέχοντας μη έγκυρες παραμέτρους και ελέγξτε.
  2. Όταν διεκδικούμε μια συνθήκη, δεν θα υπάρχει εκτύπωση στην κονσόλα εκτός εάν υπάρχει κάποιο σφάλμα.

Σενάριο για λήψη διαφορετικών τμημάτων μιας απάντησης

Η ανάκτηση του σώματος απόκρισης και του κωδικού κατάστασης απόκρισης καλύπτεται ήδη στο παραπάνω τμήμα. Αξίζει να σημειωθεί ότι για τη λήψη διαφορετικών τμημάτων της απάντησης, η λέξη-κλειδί «απόσπασμα» είναι πολύ σημαντική.

επικεφαλίδα

Το Rest Assured είναι μια πολύ απλή γλώσσα και η ανάκτηση κεφαλίδων είναι εξίσου απλή. Το όνομα της μεθόδου είναι headers(). Όπως και πριν, θα δημιουργήσουμε μια αυτόνομη μέθοδο για να κάνουμε το ίδιο.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Λάβετε υπόψη ότι το "given().when()" παραλείπεται εδώ και η γραμμή κώδικα ξεκινά από το get(), αυτό οφείλεται στο ότι δεν υπάρχει προϋπόθεση ή επαλήθευση που γίνεται εδώ για να πατήσετε το αίτημα και να λάβετε απάντηση. Σε τέτοιες περιπτώσεις, είναι προαιρετικό να χρησιμοποιήσετε το ίδιο.

Έξοδος:

Έξοδος για το getResponseHeader
Έξοδος για το getResponseHeader

Επιχειρηματική ανάγκη:

Αρκετές φορές, θα χρειαστεί να χρησιμοποιήσετε το διακριτικό εξουσιοδότησης ή ένα cookie περιόδου λειτουργίας για το επόμενο αίτημα και, ως επί το πλείστον, αυτές οι λεπτομέρειες επιστρέφονται ως κεφαλίδες της απάντησης.

Χρόνος Απόκρισης

Για να λάβετε τον χρόνο που απαιτείται για την ανάκτηση της απόκρισης από το backend ή άλλα συστήματα κατάντη, το Rest Assured παρέχει μια μέθοδο που ονομάζεται "timeIn" με μια κατάλληλη μονάδα χρόνου για να λάβετε το χρόνο που απαιτείται για την επιστροφή της απόκρισης.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Παραγωγή:

Έξοδος για getResponseTime
Έξοδος για getResponseTime

Επιχειρηματική ανάγκη:

Ένα πολύ σημαντικό χαρακτηριστικό της δοκιμής των API είναι ο χρόνος απόκρισής τους, για τη μέτρηση της απόδοσης της εφαρμογής. Λάβετε υπόψη ότι ο χρόνος που απαιτείται για την κλήση σας μπορεί να διαρκέσει περισσότερο ή λιγότερο χρόνο ανάλογα με την ταχύτητα διαδικτύου σας, την απόδοση του API εκείνη τη στιγμή, το φόρτο του διακομιστή και άλλους παράγοντες που επηρεάζουν την ώρα.

Content-Type

Μπορείτε να λάβετε το περιεχόμενο-Τύπος της απάντησης που επιστρέφεται χρησιμοποιώντας τη μέθοδο "contentType ()".

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Παραγωγή

Έξοδος για getContentType
Έξοδος για getContentType

Επιχειρηματική ανάγκη:

Κατά καιρούς, η λήψη του τύπου περιεχομένου είναι απαραίτητη για τη διασφάλιση ότι δεν υπάρχουν κενά ασφαλείας για απειλές πολλαπλής προέλευσης ή απλώς για να διασφαλιστεί ότι το περιεχόμενο που διαβιβάστηκε είναι σύμφωνα με τα πρότυπα του API.

Λήψη μεμονωμένου στοιχείου JSON

Από τη δοθείσα απάντηση, σας ζητείται να υπολογίσετε το συνολικό ποσό, πρέπει να συλλέξετε κάθε ποσό και να το συνοψίσετε.

Βήματα:

Βήμα 1) Το πεδίο ποσού βρίσκεται μέσα σε έναν πίνακα με κλειδί "statements" που με τη σειρά του βρίσκεται στη λίστα με το κλειδί "rezult"

Βήμα 2) Να είστε σίγουροι, παρέχει έναν μηχανισμό για να φτάσετε τις τιμές στο API χρησιμοποιώντας "διαδρομή"

Βήμα 3) Η διαδρομή για την επίτευξη των ποσών είναι "result.statements.AMOUNT". Σκεφτείτε το σαν το Xpath σε σελήνιο.

Βήμα 4) Λήψη όλων των ποσών σε μια συλλογή και, στη συνέχεια, πραγματοποιήστε βρόχο για όλες τις τιμές για να υπολογίσετε το άθροισμα

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Σημείωση: Εφόσον η τιμή του ποσού είναι σε τύπο δεδομένων συμβολοσειράς, μετατρέπουμε σε ακέραιο και τον χρησιμοποιούμε για άθροιση.

Παραγωγή:

Έξοδος για το getSpecificPartOfResponse
Έξοδος για το getSpecificPartOfResponse

Σύνοψη

  • Το Rest Assured είναι μια ομάδα βιβλιοθηκών java που μας δίνει τη δυνατότητα να αυτοματοποιούμε Υπόλοιπη δοκιμή API
  • Να είστε σίγουροι είναι Java-βασισμένη και γνώση του πυρήνα Java αρκεί για να το μάθεις
  • Βοηθά στην ανάκτηση τιμών αιτήματος και απόκρισης από περίπλοκες δομές JSON
  • Τα Διαχωριστικά API Το αίτημα μπορεί να προσαρμοστεί με μια ποικιλία κεφαλίδων, ερωτημάτων, παραμέτρων διαδρομής και οποιασδήποτε περιόδου λειτουργίας ή cookie που πρόκειται να οριστούν.
  • Βοηθά στον καθορισμό δηλώσεων ισχυρισμών και συνθηκών.
  • Αν και το Rest Assured είναι πολύ χρήσιμο όταν η απόκριση είναι τύπου JSON, οι μέθοδοι μπορεί να μην λειτουργούν απρόσκοπτα εάν το αναγνωριστικό τύπου περιεχομένου είναι HTML ή απλό κείμενο.