Δοκιμή φόρτωσης API με Locust

Δοκιμή φόρτωσης API με Locust

Δοκιμή φόρτωσης API με Locust: Εισαγωγή

Πιθανότατα να έχετε βρεθεί σε αυτήν την κατάσταση στο παρελθόν: γράφετε κώδικα που κάνει κάτι, για παράδειγμα ένα τελικό σημείο. Δοκιμάζετε το τελικό σας σημείο χρησιμοποιώντας το Postman ή το Insomnia και όλα λειτουργούν καλά. Μεταβιβάζετε το τελικό σημείο στον προγραμματιστή από την πλευρά του πελάτη, ο οποίος στη συνέχεια το καταναλώνει API και αναπτύσσει την εφαρμογή. Στη συνέχεια, όμως, το API αποτυγχάνει όταν οι χρήστες χρησιμοποιούν την εφαρμογή.

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

Οι δοκιμές απόδοσης μπορούν να ομαδοποιηθούν σε δοκιμές λειτουργικότητας και δοκιμές φορτίου. Τα τεστ λειτουργικότητας είναι αυτά για τα οποία συνήθως χρησιμοποιείτε τον Postman ή το Insomnia. Διασφαλίζουν ότι το API σας λειτουργεί όπως περιμένετε. Οι δοκιμές φόρτωσης, από την άλλη πλευρά, ασχολούνται περισσότερο με την απόδοση του API σας με την πραγματική χρήση και το μέγιστο φορτίο, και αυτό είναι το αντικείμενο αυτού του άρθρου. Ας δούμε τις δοκιμές φορτίου με περισσότερες λεπτομέρειες.

Τι είναι η δοκιμή φόρτωσης API;

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

Οι δοκιμές φόρτωσης API μετρούν μετρήσεις όπως ο χρόνος απόκρισης, οι ταυτόχρονοι χρήστες, οι ρυθμοί διεκπεραίωσης, τα επίπεδα χρήσης πόρων, ο μέσος χρόνος μεταξύ αποτυχίας (MTBF), ο μέσος χρόνος αποτυχίας (MTTF) και ούτω καθεξής. Όλες αυτές οι μετρήσεις μπορούν να χρησιμοποιηθούν για να προσδιοριστεί πόσο καλά λειτουργεί το API.

Τύποι δοκιμών φορτίου

Υπάρχουν διάφοροι τύποι δοκιμών φορτίου, ο καθένας με τις περιπτώσεις χρήσης του. Ας ρίξουμε μια ματιά σε μερικά από αυτά.

Δοκιμή φόρτωσης: Αυτή είναι η βασική μορφή δοκιμής φορτίου. Χρησιμοποιείται για την αξιολόγηση της απόδοσης ενός συστήματος (σε αυτήν την περίπτωση, ενός API) υπό κανονικό φορτίο και αναμενόμενο φορτίο αιχμής.

Δοκιμή άγχους: Χρησιμοποιείται για την αξιολόγηση της απόδοσης ενός συστήματος κάτω από πολύ μεγάλο φορτίο. Ο στόχος αυτής της δοκιμής είναι να δει εάν ένα σύστημα ανακάμπτει μετά από αποτυχία και πόσος χρόνος χρειάζεται για να γίνει αυτό. Το φορτίο συνήθως αυξάνεται αργά μέχρι να ξεπεράσει τις δυνατότητες του συστήματος.

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

Δοκιμή εμποτισμού: Αυτό το τεστ είναι διαφορετικό από τα άλλα παραπάνω. Βάζει το σύστημά σας κάτω από το 80% (ή περίπου) του κανονικού φορτίου και το αφήνει να λειτουργεί για μεγάλο χρονικό διάστημα, ας πούμε 12 έως 14 ώρες. Αυτό το είδος δοκιμής καθορίζει πόσο αξιόπιστο είναι ένα σύστημα με την πάροδο του χρόνου.

Φόρτωση δοκιμής των API σας με το Locust

Οι προγραμματιστές έχουν πρόσβαση σε μια ποικιλία επιλογών για τη δοκιμή φόρτωσης των API τους. Μερικά κοινά εργαλεία δοκιμής φορτίου είναι τα Gatling, JMeter και Locust. Θα εστιάσουμε στο Locust σε αυτό το άρθρο.

Το Locust είναι ένα εργαλείο δοκιμής φόρτωσης ανοιχτού κώδικα που βασίζεται σε python και χρησιμοποιείται από κορυφαίες εταιρείες όπως η Google, η Microsoft και η Riot Games για τη δοκιμή των API τους. Σε αυτό το άρθρο, θα δείξουμε πώς να φορτώσετε τη δοκιμή ενός API. 

Για αυτό το σεμινάριο, θα δημιουργήσω ένα απλό API με το Flask. Μπορείτε να ακολουθήσετε μαζί μου ή απλώς να δημιουργήσετε το API σας με το Node ή οποιοδήποτε πλαίσιο με το οποίο αισθάνεστε άνετα.

απαιτήσεις

Python 3

Ρύθμιση & εγκατάσταση

Αρχικά, πρέπει να ρυθμίσετε ένα εικονικό περιβάλλον στον υπολογιστή σας, ώστε να μην ανακατεύετε το παγκόσμιο περιβάλλον Python σας. Για να το κάνετε αυτό, εκτελέστε τις παρακάτω εντολές. Σημειώστε ότι αυτές οι εντολές ισχύουν για ένα τερματικό των Windows.

$ mkdir έργο

$ cd /d διαδρομή\to\project

$ python -m venv venv

$ venv\Scripts\ενεργοποίηση

 

Αρχικά, δημιουργήσαμε ένα σχέδιο Ευρετήριο. Στη συνέχεια αλλάξαμε τον τρέχοντα κατάλογο μας σε σχέδιο. Στη συνέχεια δημιουργήσαμε και ενεργοποιήσαμε ένα εικονικό περιβάλλον για την Python μέσα σε αυτόν τον κατάλογο. 

Τώρα, θα προχωρήσουμε στην εγκατάσταση Φιάλη(θα το χρησιμοποιήσουμε για να δημιουργήσουμε τα τελικά σημεία που θα δοκιμαστούν φόρτωση) και Ακρίδα Itself. 

 

Για να εγκαταστήσετε το Flask, εκτελέστε. Βεβαιωθείτε ότι είστε στο σχέδιο όπου δημιουργήσατε ένα εικονικό περιβάλλον.

$ pip εγκατάσταση φιάλη

 

Για να εγκαταστήσετε το Locust, εκτελέστε

$ pip εγκατάσταση ακρίδα

 

Μόλις γίνει αυτό, πληκτρολογήστε τις παρακάτω εντολές. Βεβαιωθείτε ότι είστε στο δικό σας σχέδιο κατάλογο όταν το κάνετε αυτό.

$ αντίγραφο nul __init__.py

$ mkdir εφαρμογή

$ copy nul app\app.py

$ copy nul app\__init__.py

 

Αυτές οι εντολές δημιουργούν ορισμένα αρχεία που θα χρησιμοποιήσουμε για να δημιουργήσουμε τα τελικά μας σημεία χρησιμοποιώντας το Flask. Παρεμπιπτόντως, μπορείτε επίσης να δημιουργήσετε αυτά τα αρχεία χρησιμοποιώντας τον εξερευνητή αρχείων σας. Αλλά ποια είναι η διασκέδαση σε αυτό; Μόλις το κάνετε αυτό, αντιγράψτε τον παρακάτω κώδικα app.py

από flask import Flask, jsonify, request

app = Flask (__name__)

car_models = [

  { 'brand': 'Tesla', 'model': 'Model S' }

]

 

αεροπλάνα_μοντέλα = [

  { 'brand': 'Boeing', 'model': '747' }

]

 

@app.route('/cars')

def get_cars():

  επιστροφή jsonify(car_models)

@app.route('/planes')

def get_planes():

  επιστροφή jsonify(plane_models)

αν __name__ == '__main__':

    app.run(debug=True)  

 

Ο παραπάνω κώδικας περιέχει μια μέθοδο get_cars χρησιμοποιείται για τη λήψη μιας λίστας με μάρκες αυτοκινήτων και τα μοντέλα τους και get_planes χρησιμοποιείται για τη λήψη μιας λίστας με μάρκες αεροπλάνων και τα μοντέλα τους. Για να φορτώσουμε τη δοκιμή αυτού του τελικού σημείου, πρέπει να εκτελέσουμε το app.py. Για να το κάνετε αυτό εκτελέστε την παρακάτω εντολή.

$ python path\to\app.py

Μόλις το εκτελέσετε, θα πρέπει να δείτε κάτι σαν αυτό:

Δοκιμή φόρτωσης API 1

Εάν αντιγράψετε τη διεύθυνση URL από το τερματικό και πληκτρολογήστε αυτοκίνητα or αεροπλάνα μετά το /, θα πρέπει να μπορείτε να δείτε τα δεδομένα εκεί. Ωστόσο, στόχος μας είναι να δοκιμάσουμε το τελικό σημείο με ακρίδα, όχι με το πρόγραμμα περιήγησης. Ας το κάνουμε λοιπόν. Εκτελέστε την ακόλουθη εντολή στη ρίζα του σας σχέδιο Κατάλογο.

 

$ αντίγραφο nul locust_test.py

 

Αυτό δημιουργεί ένα αρχείο 'locust_test.py' στη ρίζα του αρχείου σας σχέδιο Ευρετήριο. Αφού το κάνετε αυτό, ανοίξτε το αρχείο και επικολλήστε τον παρακάτω κώδικα. Θα το εξηγήσουμε σύντομα.

 

χρόνος εισαγωγής

από ακρίδα εισαγωγή HttpUser, εργασία, μεταξύ

 

class UserBehaviour(HttpUser):

    χρόνος_αναμονής = μεταξύ (5, 10)

 

    @έργο

    def get_cars(self):

        self.client.get('/cars')

    

    @έργο

    def get_planes(self):

        self.client.get('/planes')

 

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

Μια εργασία καθορίζεται διακοσμώντας μια μέθοδο με το @έργο διακοσμητής. Έχουμε επίσης μια συνάρτηση που ονομάζεται μεταξύ() που μας επιτρέπει να καθορίσουμε ένα εύρος δευτερολέπτων για να περιμένουμε πριν εκτελέσουμε την επόμενη εργασία. Μπορείτε να δείτε ότι έχουμε εκχωρήσει ένα εύρος από 5 έως 10 δευτερόλεπτα για αυτό στον κώδικά μας. 

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

 

$ ακρίδα -f locust_test.py

 

Θα πρέπει να δείτε κάτι τέτοιο:

Δοκιμή φόρτωσης API 2

Από προεπιλογή, η διεπαφή ιστού του Locus βρίσκεται στη διεύθυνση http://localhost/8089. Εάν επισκεφτείτε τον ιστότοπο, θα πρέπει να δείτε μια διεπαφή όπως αυτή:

Δοκιμή φόρτωσης API 3

Από τη διεπαφή, μπορούμε να καθορίσουμε τον αριθμό των χρηστών, τον ρυθμό αναπαραγωγής (χρήστες που δημιουργούνται ανά δευτερόλεπτο) και τον κεντρικό υπολογιστή. Μπορείτε να λάβετε τη διεύθυνση του κεντρικού υπολογιστή σας ελέγχοντας το τερματικό όπου εκτελείται ο διακομιστής. Στην περίπτωσή μας, βρίσκεται στη θύρα 5000. Όταν κάνετε κλικ στο Άρχισε να μαζεύεις, θα σας παρουσιαστεί η διεπαφή παρακάτω.

Δοκιμή φόρτωσης API 4

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


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

Υπάρχει ένα συνολικές αιτήσεις ανά δευτερόλεπτο γράφημα, γράφημα χρόνου απόκρισης, και γράφημα αριθμού χρηστών, όλα σχεδιάστηκαν ενάντια στο χρόνο. Χρησιμοποιώντας τα γραφήματα, μπορείτε να προσδιορίσετε πόσοι χρήστες είναι αποδεκτοί για σταθερό χρόνο απόκρισης ή μπορείτε να παρατηρήσετε τα γραφήματα σας για σταθερό χρόνο απόκρισης παρά τον αυξανόμενο αριθμό χρηστών και άλλες παρόμοιες πληροφορίες. Αν θέλετε να τα μοιραστείτε stats με κάποιον άλλο, μπορείτε να κάνετε λήψη μιας αναφοράς από το Λήψη δεδομένων Tab.

Να συμπεράνω...

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

Εάν θέλετε να κάνετε μια δοκιμή ακίδας, καθορίστε μια μεγάλη τιμή (ας πούμε 2000) για τον αριθμό των χρηστών και, στη συνέχεια, μια εξίσου μεγάλη τιμή για τον ρυθμό αναπαραγωγής (500 για παράδειγμα). Αυτό σημαίνει ότι σε 4 δευτερόλεπτα, θα έχετε και τους 2000 χρήστες που θα δημιουργήσουν και θα αποκτήσουν πρόσβαση στα τελικά σημεία σας. Μια δοκιμή ακραίων καταστάσεων θα είναι παρόμοια, αλλά με πολύ χαμηλότερη τιμή για το ποσοστό αναπαραγωγής. Για να μάθετε όλα όσα μπορείτε να κάνετε, ρίξτε μια ματιά στο Locust τεκμηρίωση

Παράκαμψη της λογοκρισίας TOR

Παράκαμψη της λογοκρισίας στο Διαδίκτυο με TOR

Παράκαμψη της λογοκρισίας στο Διαδίκτυο με TOR Εισαγωγή Σε έναν κόσμο όπου η πρόσβαση σε πληροφορίες ρυθμίζεται όλο και περισσότερο, εργαλεία όπως το δίκτυο Tor έχουν γίνει ζωτικής σημασίας για

Διαβάστε περισσότερα »
Kobold Letters: Επιθέσεις ηλεκτρονικού ψαρέματος που βασίζονται σε HTML

Kobold Letters: Επιθέσεις ηλεκτρονικού ψαρέματος που βασίζονται σε HTML

Kobold Letters: Επιθέσεις ηλεκτρονικού ψαρέματος που βασίζονται σε HTML Στις 31 Μαρτίου 2024, η Luta Security δημοσίευσε ένα άρθρο που ρίχνει φως σε ένα νέο εξελιγμένο φορέα ηλεκτρονικού ψαρέματος, το Kobold Letters.

Διαβάστε περισσότερα »