wiremock tutorial introduction wiremock
Αυτό το εισαγωγικό εκπαιδευτικό βίντεο θα εξηγήσει τις δυνατότητες του Wiremock και τον τρόπο εκτέλεσης του Wiremock ως αυτόνομου διακομιστή και ως μέρος των δοκιμών JUnit:
Σε αυτό το σεμινάριο, θα καλύψουμε τις βασικές έννοιες και λεπτομέρειες γύρω από το εργαλείο Wiremock. Μπορεί να χρησιμοποιηθεί ως αυτόνομος διακομιστής HTTP καθώς και εντός των δοκιμών JUnit σύμφωνα με τις απαιτήσεις.
Αυτό είναι ένα πολύ χρησιμοποιημένο εργαλείο καθώς είναι ανοιχτού κώδικα και έχει μια μεγάλη κοινότητα συντελεστών. Εμπίπτει στην κατηγορία των εργαλείων εικονικοποίησης υπηρεσίας.
Τι θα μάθετε:
Τι είναι το Wiremock;
Με απλά λόγια, το Wiremock είναι μια κοροϊδευτική εγκατάσταση για δοκιμές ενοποίησης. Είναι απλώς ένας πλαστός διακομιστής που είναι εξαιρετικά διαμορφώσιμος για την επιστροφή μιας αναμενόμενης απόκρισης για ένα δεδομένο αίτημα.
Χρησιμοποιείται ευρέως κατά τη διάρκεια της ανάπτυξης και το πιο σημαντικό κατά τη διάρκεια δοκιμών ενοποίησης ενώ ένα σύστημα ή υπηρεσία μιλά σε μία ή περισσότερες εξωτερικές ή εσωτερικές εξαρτήσεις / υπηρεσίες.
Ας προσπαθήσουμε να κατανοήσουμε περισσότερα σχετικά με τις δοκιμές ενσωμάτωσης γενικά και να μάθουμε πώς το Wiremock μπορεί να βοηθήσει να ξεπεράσουμε αυτές τις προκλήσεις και να κάνουμε τη ζωή μας ευκολότερη.
Γενικά, όταν έρθει η λέξη ολοκλήρωση, αυτό που μας χτυπά είναι η ολοκλήρωση μεταξύ 2 επικοινωνιακών συστημάτων. Τώρα, ας το δούμε από την προοπτική μιας υπό δοκιμή εφαρμογής που χρησιμοποιεί κάποια εξωτερική υπηρεσία για να ολοκληρώσει τη δουλειά.
Για παράδειγμα, ας υποθέσουμε ότι χτίζουμε μια εφαρμογή για online ταξίδια ή σύστημα εισιτηρίων και διαθέτουμε μια ενότητα για τον έλεγχο κατάστασης PNR, που αντιστοιχεί σε ένα εξωτερικό API που παρέχεται από την Indian Railways.
Τώρα, πώς μπορούμε να δοκιμάσουμε την ολοκλήρωση της εφαρμογής μας με τα εξωτερικά API;
Υπάρχουν 2 τρόποι για να το κάνετε αυτό:
- Πρώτα, είναι η προσέγγιση δοκιμής μονάδας, όπου στέλνουμε τη διεπαφή που παρέχεται (ή δημιουργείται εσωτερικά), έτσι ώστε το σύστημά μας να ελέγχει / επικυρώνει την κούραση ή ψεύτικη απόκριση, ακόμη και πριν χτυπήσει το εξωτερικό API Αυτό δεν είναι τίποτα άλλο από μια δοκιμή μονάδας που προσπαθεί να χλευάζει μια εξωτερική εξάρτηση.
- Δεύτερος δοκιμάζει με κάποιο περιβάλλον δοκιμής (ή το πραγματικό περιβάλλον παραγωγής) των εξωτερικών εξαρτήσεων. Ωστόσο, υπάρχουν πολλές προκλήσεις με αυτήν την προσέγγιση που αναφέρονται παρακάτω:
- Τα εξωτερικά συστήματα API ενδέχεται να μην είναι πάντα διαθέσιμα. δηλ. Είμαστε σε μεγάλο βαθμό εξαρτημένοι ή εξαρτώνται από εξωτερικά συστήματα και κάθε διακοπή θα επηρεάσει τις δοκιμές μας και έμμεσα τη διαδικασία ανάπτυξης / απελευθέρωσης.
- Δεύτερον, τα εξωτερικά API ενδέχεται να έχουν ή να μην έχουν περιβάλλον δοκιμής. Για παράδειγμα, Ένα API ελέγχου κατάστασης PNR μπορεί πάντα να απαιτεί πραγματικούς αριθμούς PNR για τη λήψη και επιστροφή απαντήσεων.
- Πολλές φορές, υπάρχουν κόστη που σχετίζονται με το χτύπημα ενός API. Για παράδειγμα, ας υποθέσουμε ότι το API ελέγχου PNR χρεώνει Rs 100 για κάθε 1000 αιτήματα. Δεδομένου ότι οι δοκιμές ενσωμάτωσης εκτελούνται συνήθως σε κάθε παλινδρόμηση (και τις περισσότερες φορές με κάθε δέσμευση), ενδέχεται να μην είναι μια οικονομικά αποδοτική λύση για την επίτευξη ενός τέτοιου API που μας κοστίζει ακόμη και για σκοπούς δοκιμής.
- Δεν είναι δυνατή η διαμόρφωση εξωτερικού API για την επιστροφή της επιθυμητής απόκρισης. Ακόμα κι αν είναι δυνατόν, θα πρέπει να δημιουργήσετε πολλά δεδομένα δοκιμής για να διασφαλίσετε διαφορετικές απαντήσεις για διαφορετικές εισόδους αιτημάτων.
Για παράδειγμα, θέλετε να δοκιμάσετε σενάρια σφάλματος, όπως ένα API επιστρέφει διαφορετικούς κωδικούς κατάστασης για διαφορετικούς τύπους δεδομένων. Τώρα, καθώς η απάντηση δεν είναι υπό τον έλεγχό μας, θα χρειαστεί να δημιουργήσουμε πολλά σύνολα δεδομένων για να επικυρώσουμε διαφορετικά πιθανά σενάρια ή αποτελέσματα.
Ας κατανοήσουμε αυτές τις έννοιες με τη βοήθεια του παρακάτω διαγράμματος.
Εδώ συγκρίνουμε και τις δύο προσεγγίσεις της δοκιμής ενοποίησης, δηλαδή χωρίς εικονικό διακομιστή, χρησιμοποιώντας πραγματική εφαρμογή της εξωτερικής εξάρτησης και χρησιμοποιώντας τον εικονικό διακομιστή (Wiremock), ο οποίος χλευάζει τις απαντήσεις στα αιτήματα που ελήφθησαν για την εξάρτηση.
Στην τελευταία περίπτωση, μειώνει σε μεγάλο βαθμό την εξάρτηση και την εξάρτηση από την πραγματική εφαρμογή της εξάρτησης και δίνει πολλές δυνατότητες διαμόρφωσης χωρίς συμβιβασμούς στην ποιότητα και τα προγράμματα παράδοσης.
Πώς ανταποκρίνεται το Wiremock σε ένα δεδομένο αίτημα;
Όπως γνωρίζουμε, το Wiremock είναι ένας διακομιστής Mock μέσω προγραμματισμού, ο τρόπος με τον οποίο ανταποκρίνεται σε ένα συγκεκριμένο αίτημα είναι η αποθήκευση όλων των σχετικών αντιστοιχίσεων (ή πλαστών απαντήσεων) σε ένα φάκελο που ονομάζεται 'αντιστοιχίσεις'
Υπάρχει ένα στοιχείο αντιστοίχισης του Wiremock που ταιριάζει με τα εισερχόμενα αιτήματα στις αποθηκευμένες αντιστοιχίσεις και εάν επιστραφεί μια επιτυχημένη αντιστοίχιση, τότε το πρώτο τέτοιο παιχνίδι επιστρέφεται ως απάντηση για το συγκεκριμένο αίτημα.
Σε περίπτωση που χρησιμοποιείτε την αυτόνομη έκδοση του Wiremock, μόλις εκτελέσετε τον διακομιστή Wiremock, θα δείτε το φάκελο αντιστοιχίσεων που θα δημιουργηθεί στον κατάλογο τοποθεσίας / βάζου Wiremock.
Video Tutorial: Εισαγωγή στο Wiremock Tool
εισαγωγή αλγορίθμου ταξινόμησης c ++
Πώς να χρησιμοποιήσετε το Wiremock;
Τώρα ας δούμε πώς μπορούμε να χρησιμοποιήσουμε αυτό το εργαλείο με τις δοκιμές ενοποίησης.
Μπορεί να χρησιμοποιηθεί με τους ακόλουθους τρόπους.
Ένας αυτόνομος διακομιστής Wiremock
Ως αυτόνομος διακομιστής, μπορείτε απλώς να δημιουργήσετε μια απλή εφαρμογή Java με εξάρτηση Maven / Gradle για το Wiremock και να τη διατηρήσετε ως τρέχουσα διαδικασία.
Αυτή είναι μια καλή εναλλακτική λύση όταν θέλετε να φιλοξενήσετε τον αυτόνομο διακομιστή σας σε κάποιο μηχάνημα και να τον χρησιμοποιήσετε ως μονόδρομο διακομιστή για ολόκληρο το έργο ή την ομάδα. Σε αυτόνομη λειτουργία, αυτό το εργαλείο μπορεί επίσης να εκτελεστεί, κατεβάζοντας το διαθέσιμο αυτόνομο βάζο εδώ και απλά τρέξτε το βάζο.
Για παράδειγμα, ας υποθέσουμε ότι θέλετε να αναπτύξετε την αυτόνομη παρουσία Wiremock σε κάποιο διακομιστή στο cloud ή σε διακομιστή εσωτερικής εγκατάστασης, τότε μπορείτε απλά να εκτελέσετε αυτό το βάζο και να χρησιμοποιήσετε το σύστημα IP για να το χρησιμοποιήσετε ως φιλοξενούμενη υπηρεσία.
Ας δούμε μερικά βήματα για να το εκτελέσετε σε αυτόνομη λειτουργία (και να διαμορφώσετε διαφορετικά πράγματα όπως θύρες, χαρτογράφηση φακέλων κ.λπ.)
# 1) Εκτελέστε το βάζο Wiremock από το τερματικό (ή τη γραμμή εντολών για χρήστες Windows) όπως οποιοδήποτε άλλο αρχείο JAR (από τον κατάλογο εγκατάστασης του Wiremock jar).
java -jar wiremock-standalone-2.25.1.jar
#δύο) Από προεπιλογή, το Wiremock εκτελείται στο localhost: 8080 (εάν η θύρα είναι δωρεάν για χρήση, τότε η παραπάνω εντολή θα ξεκινήσει τον διακομιστή Wiremock σε αυτόνομη λειτουργία) και θα δείτε την έξοδο όπως παρακάτω.
# 3) Τώρα μόλις ξεκινήσει ο διακομιστής, μπορείτε να επισκεφθείτε οποιαδήποτε διεύθυνση URL στο localhost: 8080
Για παράδειγμα, http: // localhost: 8080 / get / user / 1 - Δεδομένου ότι προς το παρόν δεν υπάρχουν χλευασμοί, θα λάβετε μια απάντηση όπως φαίνεται παρακάτω.
# 4) Τώρα ας προσπαθήσουμε να δημιουργήσουμε ένα απλό stub / mock για αυτό το URL και προσπαθήστε να επιστρέψετε ξανά το URL. Στη συνέχεια, θα επικυρώσουμε ότι το χτύπημα της ίδιας διεύθυνσης URL επιστρέφει τώρα την ψευδή ή μαχαιρωμένη απάντηση.
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
Ας προσπαθήσουμε να κατανοήσουμε πρώτα αυτό το αίτημα CURL:
- Κάνουμε ένα αίτημα CURL POST στο http: // localhost: 8080 / __ admin / mappings / new - Τώρα αυτή είναι η τοποθεσία όπου όλες οι αντιστοιχίσεις θα αποθηκευτούν για το διακομιστή Wiremock που εκτελέσαμε / ξεκινήσαμε μέσω του αρχείου JAR.
- Στο αίτημα Curl, ορίζουμε παραμέτρους αιτήματος όπως - URL και μέθοδος αιτήματος μαζί με το σώμα απόκρισης στην ενότητα 'απόκριση'. Αυτό σημαίνει απλώς ότι κάθε φορά που ένα αίτημα GET έρχεται με διεύθυνση URL / get / user / 1, τότε απαντήστε με το καθορισμένο σώμα απόκρισης.
# 5) Μόλις οριστεί η απόκρυψη απόκρισης (με τη βοήθεια του παραπάνω αιτήματος μπούκλα), τότε μπορούμε να δοκιμάσουμε να χτυπήσουμε τη διεύθυνση URL και να δούμε αν λαμβάνουμε πίσω απόκριση από το Wiremock.
Ας δοκιμάσουμε να χτυπήσουμε αυτήν τη διεύθυνση URL στο πρόγραμμα περιήγησης - http: // localhost: 8080 / get / user / 1
Εάν η αντιστοίχιση είχε οριστεί με επιτυχία, τότε θα πρέπει να λάβετε μια απάντηση όπως φαίνεται παρακάτω:
Μαζί με τις δοκιμές JUnit ως διαμόρφωση κανόνα JUnit
Ο διακομιστής Wiremock μπορεί να χρησιμοποιηθεί με δοκιμές JUnit ως ρύθμιση JUnit Rule. Με αυτό, το JUnit φροντίζει τον κύκλο ζωής του Wiremock, δηλαδή το Wiremock ξεκινά και σταματά.
πώς να δηλώσετε έναν πολυδιάστατο πίνακα στο java
Χρησιμοποιείται κυρίως σε ρυθμίσεις όπου θα θέλατε να ξεκινήσετε και να σταματήσετε τον διακομιστή μετά από κάθε δοκιμή.
Αυτό έχει τα δικά του πλεονεκτήματα ότι είναι απομονωμένο και έχει υψηλό βαθμό διαμόρφωσης σε αντίθεση με μια αυτόνομη εγκατάσταση, όπου πολλά άτομα μπορούν να καταλήξουν να χρησιμοποιούν τον ίδιο διακομιστή και να ξεπεράσουν τις αντιδράσεις του άλλου.
Ας δούμε ένα λειτουργικό παράδειγμα αυτής της προσέγγισης:
# 1) Δημιουργήστε έναν κανόνα JUnit για τον διακομιστή Wiremock. Αυτό το βήμα ουσιαστικά μοιάζει με ένα βήμα ρύθμισης δοκιμής, όπου λέμε στον δρομέα JUnit να δημιουργήσει το διακομιστή Wiremock πριν από κάθε δοκιμή και να σταματήσει τον διακομιστή μετά από κάθε δοκιμή.
Αυτό σημαίνει επίσης ότι ο δρομέας JUnit θα φροντίσει να ξεκινήσει και να σταματήσει τον διακομιστή Wiremock, χωρίς να το κάνει ρητά.
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
#δύο) Τώρα θα γράψουμε τη δοκιμή μας όπου θα δημιουργήσουμε πρώτα τον πελάτη μας (χρησιμοποιώντας το okHttp) για να εκτελέσουμε αιτήματα έναντι του επιθυμητού τελικού σημείου.
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) Ωστόσο, μπορείτε να παρατηρήσετε εδώ, ότι ακόμα δεν έχουμε ορίσει κανένα στέλεχος για επιστροφή για την παρουσία μας στο Wiremock. δηλ. ο παραπάνω πελάτης θα ζητήσει μια διεύθυνση URL http: // localhost: 8080 / test / abc που δεν έχει διαμορφωμένο στέλεχος. Σε αυτήν την περίπτωση, ο διακομιστής Wiremock θα επιστρέψει 404 χωρίς περιεχόμενο.
# 4) Τώρα για να ορίσετε ένα stub για την παραπάνω διεύθυνση URL για την παρουσία διακομιστή Wiremock, θα πρέπει να καλέσετε τις στατικές μεθόδους stub του Wiremock όπως φαίνεται παρακάτω.
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
Εδώ, μπορείτε να δείτε ότι έχουμε χρησιμοποιήσει μερικές στατικές μεθόδους όπως configureFor, stubFor κ.λπ. Όλες αυτές οι μέθοδοι αποτελούν μέρος της βιβλιοθήκης Wiremock Java. (Θα εξετάσουμε αυτές τις μεθόδους αναλυτικά στο επόμενο σεμινάριο / ενότητες)
# 5) Τώρα με το βήμα διαμόρφωσης, μπορούμε απλώς να εκτελέσουμε το αίτημα μέσω πελάτη και να επικυρώσουμε την απόκριση (ανάλογα με ό, τι έχει διαμορφωθεί για να επιστρέψει το στέλεχος μέσω Wiremock)
Συνοψίζοντας, δείτε πώς θα μοιάζει ολόκληρο το δείγμα κώδικα:
public class WiremockJunitTest { @Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080)); @Test public void assertWiremockSetup() throws IOException { // Arrange - setup wiremock stubs configureStubs(); // execute request through the http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build(); // Act - call the endpoint Response response = client.newCall(request).execute(); // Assert - verify the response assertEquals('Test success!', response.body().string()); verify(exactly(1),getRequestedFor(urlEqualTo('/test/abc'))); } // configure stubs for wiremock private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); } }
Απαιτούνται εξαρτήσεις
Διατίθεται ως:
- Ένα αυτόνομο JAR που περιέχει μόνο την εξάρτηση Wiremock.
- Ένα λιπαρό βάζο που περιέχει Wiremock και όλες τις εξαρτήσεις του.
Και οι δύο γεύσεις διατίθενται ως εξαρτήσεις Gradle και Maven. Περισσότερες λεπτομέρειες είναι διαθέσιμες στο επίσημο αποθετήριο Maven εδώ
Εκπαιδευτικό βίντεο: Wiremock With JUnit Test
συμπέρασμα
Σε αυτό το σεμινάριο, εξετάσαμε τις βασικές δυνατότητες του Wiremock και είδαμε πώς μπορεί να εκτελεστεί ως αυτόνομος διακομιστής και ως μέρος των δοκιμών JUnit χρησιμοποιώντας κανόνες JUnit.
Επίσης, αγγίξαμε το stubing εν συντομία και θα το καλύψουμε λεπτομερώς στο επόμενο σεμινάριό μας.
ΕΠΟΜΕΝΟ Φροντιστήριο
Συνιστώμενη ανάγνωση
- Εισαγωγή στο Micro Focus LoadRunner - Δοκιμή φόρτωσης με LoadRunner Tutorial # 1
- Ngrok Tutorial: Μια σύντομη εισαγωγή με εγκατάσταση και ρύθμιση
- Tutorial TestNG: Εισαγωγή στο TestNG Framework
- Εισαγωγή στο Selenium WebDriver - Selenium Tutorial # 8
- Εισαγωγή στη γλώσσα προγραμματισμού Java - Video Tutorial
- Διαδικασία εισαγωγής και εγκατάστασης Python
- Τι είναι το Unix: Μια σύντομη εισαγωγή στο Unix
- Tutorial Neoload: Εισαγωγή, Λήψη και Εγκατάσταση Neoload