how handle exception soapui groovy scripts soapui tutorial 11
Σε αυτό το σεμινάριο SoapUI, θα εξετάσουμε το χειρισμό εξαιρέσεων χρησιμοποιώντας το σενάριο Groovy. Ο χειρισμός των εξαιρέσεων χρόνου εκτέλεσης στο groovy είναι παρόμοιος με την Java καθώς ενσωματώνονται οι βιβλιοθήκες Java. Ωστόσο, θα συζητήσουμε βασικές έννοιες στο SoapUI και θα πάμε στο βάθος του χειρισμού εξαιρέσεων στην Java.
Αυτό είναι φροντιστήριο # 11 στη σειρά μαθημάτων SoapUI . Αυτό είναι το τελευταίο σεμινάριο για τη δωρεάν έκδοση του SoapUI. Υπάρχουν μερικά ακόμη θέματα που απομένουν σε αυτήν τη σειρά, τα οποία αφορούν τις λειτουργίες SoapUI pro, τις υπηρεσίες REST και SOAP και τις δοκιμές βάσει δεδομένων στο SoapUI.
Ας ξεκινήσουμε με μια σύντομη εισαγωγή σε μια εξαίρεση:
Τι είναι μια εξαίρεση;
Ενα εξαίρεση είναι ένα σφάλμα που αντιμετωπίζεται κατά την εκτέλεση ενός προγράμματος. Μπορεί να συμβεί για πολλούς λόγους όπως μη έγκυρα δεδομένα, απώλεια σύνδεσης δικτύου, προσπάθεια ανοίγματος αρχείων που δεν είναι διαθέσιμα, πρόσβαση σε μη έγκυρη κλάση, διαρροή μνήμης, δηλαδή αναγκάζοντας το σύστημα να εργαστεί με τεράστιο όγκο δεδομένων, ο διακομιστής βάσης δεδομένων δεν ανταποκρίνεται, κ.λπ. Αυτά τα σφάλματα μπορεί να οφείλεται σε χρήστες, προγραμματιστές ή πόρους υλικού.
Εσωτερικά, όταν υπάρχει εξαίρεση κατά την εκτέλεση, το SoapUI θα προσπαθήσει να βρει τον χειριστή. Το Handler είναι το μπλοκ που περιέχει τον κωδικό για την εξαίρεση.
Οι εξαιρέσεις κατηγοριοποιούνται σε δύο τύπους:
- Εξαίρεση χρόνου εκτέλεσης
- Εξαίρεση χρόνου μεταγλώττισης - δεν ισχύει για το SoapUI, καθώς δεν διαθέτει ρητό μεταγλωττιστή
Δείτε το παρακάτω στιγμιότυπο οθόνης που μας δείχνει μια εξαίρεση χρόνου εκτέλεσης για μη έγκυρο κώδικα. Στο παρακάτω σενάριο προσπαθήσαμε να διαιρέσουμε έναν ακέραιο με 0. Στο διάλογο σφαλμάτων μπορεί να φανεί ότι η εξαίρεση προέρχεται από βιβλιοθήκες java και το μήνυμα σφάλματος είναι Διαίρεση με το μηδέν .
Μπορούμε να πάρουμε αυτήν την εξαίρεση κατά την εκτέλεση και να την χειριστούμε μέσω προγραμματισμού. Πριν από αυτό, θα δούμε μερικές από τις σημαντικές λέξεις-κλειδιά που χρησιμοποιούνται στις έννοιες εξαίρεσης java. Ορισμένες από τις λέξεις-κλειδιά μπορούν να χρησιμοποιηθούν και στο groovy script. Αυτοί είναι:
- Βολή - Αυτή η λέξη-κλειδί μας βοηθά να ρίχνουμε μια εξαίρεση με μη αυτόματο τρόπο, δηλαδή να ρίχνουμε εξαιρέσεις που καθορίζονται από τον χρήστη
- Ρίχνει - Χρησιμοποιείται για την κλήση των προκαθορισμένων εξαιρέσεων από τον ορισμό της μεθόδου. Επομένως, θα εντοπίσει την εξαίρεση εάν εντοπιστεί σφάλμα χρόνου εκτέλεσης κατά την εκτέλεση.
- Προσπαθήστε και Σύλληψη - Η λέξη-κλειδί «try» χρησιμοποιείται με τη λέξη-κλειδί «catch». Εάν μπορούμε να προβλέψουμε το τμήμα του προγράμματος όπου μπορεί να προκύψει η εξαίρεση κατά την εκτέλεση, μπορούμε να χρησιμοποιήσουμε το μπλοκ 'try' σε αυτό το μέρος. Στο τέλος του μπλοκ 'try', το μπλοκ 'catch' πρέπει να αρχίσει να λαμβάνει μια εξαίρεση. Μέσα στο μπλοκ σύλληψης, πρέπει να γράψουμε το χειριστή για να χειριστούμε την εξαίρεση.
- Τελικά - Αυτό είναι το προεπιλεγμένο και προαιρετικό μπλοκ στη δομή εξαιρέσεων. Αν χρειαστεί να εκτελεστούν δηλώσεις στο τέλος του προγράμματος, όπως καθαρισμός αντικειμένων που δεν χρησιμοποιούνται, κλείσιμο συνδέσεων κ.λπ. που μπορούν να γίνουν μέσα σε αυτό το μπλοκ.
Το παρακάτω είναι η γενική δομή μιας εξαίρεσης:
προσπαθήστε
{
}
catch
{
}
finally
{
}
Now let us implement the exception handler in the sample code which we have already seen in the screenshot.
Add new test suite under the GlobalWeather project. Then add a test case and groovy script test step under the test step. In the script editor, enter the following script.
// initializing the variables int a = 10; int b = 0; // try, catch block try { // Dividing a number by zero int c = a/b; log.info('Result :' + c); } catch(Exception expObj) { // Exception Handler log.info('You are trying to divide ' + a + ' by ' + b + '. This is not possible actually!'); }
Το παραπάνω σενάριο παράγει το ακόλουθο αποτέλεσμα όπως φαίνεται στο στιγμιότυπο οθόνης.
Όπως συζητήσαμε νωρίτερα, προσπαθήσαμε να διαιρέσουμε το 'A' 'B' που είναι μηδέν. Έτσι, το μπλοκ 'catch' εκτελείται και εμφανίζει το μήνυμα που καθορίζεται από το χρήστη στο αρχείο καταγραφής. Δείτε ότι στη δήλωση 'catch', χρησιμοποιήσαμε Εξαίρεση τάξη που είναι το superclass στην Java για όλες τις ενσωματωμένες εξαιρέσεις. Όλες οι προκαθορισμένες κατηγορίες εξαιρέσεων προέρχονται από Εξαίρεση τάξη. Για να χειριστούμε απρόβλεπτες εξαιρέσεις χρόνου εκτέλεσης, μπορούμε να χρησιμοποιήσουμε Εξαίρεση τάξη στο μπλοκ 'catch'.
Ας τροποποιήσουμε τώρα το παραπάνω σενάριο για να λάβουμε το απαιτούμενο αποτέλεσμα. Δείτε το παρακάτω στιγμιότυπο οθόνης:
Ας το δοκιμάσουμε τώρα στην τακτική δοκιμή υπηρεσιών διαδικτύου. Στο παρακάτω σενάριο, δεν χρησιμοποιήσαμε το μπλοκ try-catch, οπότε θα λάβουμε την εξαίρεση χρόνου εκτέλεσης.
// Initializing array with 5 elements String() countryNames = new String(5); // Assigning values to the array countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; // Iterate the array elements and assign value to the global property for(int idx=0; idx<=5; idx++) { com.eviware.soapui.SoapUI.globalProperties.setPropertyValue( 'CountryName', countryNames(idx)); def testStep = testRunner.testCase.testSteps('GetCitiesByCountry'); testStep.run(testRunner,context); log.info('Executed at ' + idx + ' times!'); }
Το παραπάνω σενάριο θα φέρει μια εξαίρεση που ονομάζεται ArrayIndexOutOfBoundsException επειδή το σενάριο προσπαθεί να αποκτήσει πρόσβαση σε μη έγκυρο ευρετήριο πίνακα, δηλαδή 5 που δεν είναι διαθέσιμο.
(Κάντε κλικ στην εικόνα για μεγέθυνση)
Όπως μπορείτε να δείτε στο παραπάνω σενάριο, έχουμε αρχικοποιήσει τον πίνακα 'countryNames' με μέγεθος πέντε. Αποδέχεται μόνο πέντε τιμές συμβολοσειράς, δηλαδή ονόματα χωρών. Μέσα στις επαναλαμβανόμενες δηλώσεις, έχουμε ελέγξει ως idx<= 5 . Έτσι, ο βρόχος θα επαναλαμβάνεται έως και 6 φορές και θα προσπαθήσει να πραγματοποιήσει αναζήτηση 6ουστοιχείο στον πίνακα. Δεδομένου ότι η τιμή δεν θα είναι εκεί, ρίχνει μια εξαίρεση χρόνου εκτέλεσης.
δωρεάν εφαρμογή ρολογιού χρόνου για υπολογιστή
Για να χειριστούμε αυτό το σενάριο, ας τροποποιήσουμε το παραπάνω σενάριο όπως παρακάτω:
String() countryNames = new String(5); // Try block try { countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; for(int idx=0; idx<=5; idx++) { com.eviware.soapui.SoapUI.globalProperties.setPropertyValue ( 'CountryName', countryNames(idx)); def testStep = testRunner.testCase.testSteps('GetCitiesByCountry'); testStep.run(testRunner,context); log.info('Executed at ' + idx + ' times!'); } } catch(Exception exp) // Catch the exception and displaying the message in the log { log.info('You are trying to access invalid array index. Please check and try again!'); }
Εδώ είναι το αποτέλεσμα για το παραπάνω σενάριο.
Έτσι μπορούμε να χειριστούμε την εξαίρεση χρόνου εκτέλεσης κατά την εκτέλεση του προγράμματος.
Σημείωση: μπορούμε να χρησιμοποιήσουμε ArrayIndexOutOfBoundsException στο μπλοκ 'catch' απευθείας αντί να το χρησιμοποιήσετε Εξαίρεση τάξη. Εάν βάλουμε το ακριβές όνομα εξαίρεσης στο μπλοκ 'catch', θα πιάσει μόνο όταν ρίχνεται η συγκεκριμένη εξαίρεση. Εάν υπάρχουν άλλες προκαθορισμένες εξαιρέσεις, το μπλοκ αλιευμάτων θα αποτύχει.
Ένα καλό σενάριο αυτοματισμού πρέπει να έχει κατάλληλους χειριστές εξαιρέσεων. Διαφορετικά, θα είναι δύσκολο να παρακολουθείτε κάθε στιγμή της εκτέλεσης.
Όπως ανέφερα νωρίτερα, το σενάριο groovy υποστηρίζει τη λέξη κλειδί «ρίχνει» για να ρίξει την προκαθορισμένη εξαίρεση στον καλούντα.
Δείτε το παρακάτω δείγμα σεναρίου για να κατανοήσετε αυτήν την έννοια:
(ορίσματα / παράμετροι) ρίχνει
{
}
Ακολουθεί το δείγμα κώδικα για τον παραπάνω σκελετό.
// Invoke Method MethodWithThrowKeyword(); void MethodWithThrowKeyword() throws ArrayIndexOutOfBoundsException { String() countryNames = new String(5); countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; for(int idx=0; idx<=5; idx++) { log.info('Country Names: ' + countryNames(idx)); } }
Στο παραπάνω σενάριο, το ArrayIndexOutOfBoundsException θα μεταφερθεί στη λεγόμενη συνάρτηση. Εκεί πρέπει να χειριστούμε σωστά με ένα μπλοκ try-catch. Διαφορετικά, μια εξαίρεση θα απορριφθεί από το SoapUI.
Συμπέρασμα:
Η εφαρμογή του χειρισμού εξαιρέσεων στα τακτικά σενάρια δοκιμών που σχετίζονται με τις υπηρεσίες ιστού, θα μας βοηθήσει να διατηρήσουμε τον κώδικα και να μειώσουμε τη μη αυτόματη παρέμβαση / παρακολούθηση από τους δοκιμαστές. Μπορούμε να χρησιμοποιήσουμε πολλά μπλοκ try-catch όταν απαιτείται στο σενάριο.
Επόμενο σεμινάριο SoapUI # 12: Στο επόμενο σεμινάριο, θα παράσχουμε περισσότερες πληροφορίες και δυνατότητες της έκδοσης SoapUI Pro.
Συνεχίστε λοιπόν να διαβάζετε. Σχόλια, ερωτήσεις, προτάσεις είναι ευπρόσδεκτα, όπως πάντα!
Συνιστώμενη ανάγνωση
- 4 Σημαντικά χαρακτηριστικά του SoapUI Pro για Pro Audience - SoapUI Tutorial # 12
- Πώς να γράψετε το βασικό σενάριο Groovy στο SoapUI - SoapUi Tutorial # 6
- Τρόπος χρήσης ιδιοτήτων στο σενάριο SoapUI Groovy - SoapUI Tutorial # 7
- Ένας γρήγορος οδηγός SoapUI για την αποθήκευση δεδομένων αιτήσεων και απαντήσεων σε ένα αρχείο - SoapUI Tutorial # 15
- 15+ Tutorial SoapUI: Το καλύτερο εργαλείο δοκιμών API υπηρεσιών Ιστού
- Μάθετε προχωρημένες ιδέες για δέσμες ενεργειών SoapUI Groovy - SoapUI Tutorial # 9
- Εκμάθηση έκλειψης σε βάθος για αρχάριους
- Πώς να δημιουργήσετε το έργο REST στο SoapUI Pro: Tutorial # 13