data driven parameterized testing with spock framework
Εξερευνήστε τους τρόπους γραφής βάσει δεδομένων ή παραμετρικών δοκιμών με το Spock Framework:
Σε αυτό Δωρεάν σειρά μαθημάτων εκπαίδευσης Spock , εξερευνήσαμε τα πάντα Δοκιμή μονάδας στο Spock και δοκιμές, ισχυρισμοί και αναφορές στο προηγούμενο σεμινάριό μας.
Σε αυτό το σεμινάριο, θα προσπαθήσουμε να κατανοήσουμε τι είναι οι παραμετροποιημένες δοκιμές και πώς μπορείτε να αξιοποιήσετε τα ενσωματωμένα χαρακτηριστικά του Spock για να επιτύχετε δοκιμές βάσει δεδομένων.
Ας αρχίσουμε!!
Παρακολουθήστε το Video Tutorial
Τι θα μάθετε:
- Τι είναι οι παραμετρικές δοκιμές;
- Γράφοντας παραμετρικές δοκιμές με Spock
- Κύκλος ζωής του μπλοκ 'πού'
- ΣΥΜΒΟΥΛΕΣ
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Τι είναι οι παραμετρικές δοκιμές;
Για όποιον έχει εργαστεί με αυτοματισμούς / δοκιμές μονάδων, οι δοκιμές βάσει δεδομένων δεν είναι ένας νέος όρος.
Οι παραμετροποιημένες δοκιμές δεν είναι τίποτα άλλο από αυτές τις δοκιμές που έχουν την ίδια λογική εκτέλεσης και διαφέρουν μόνο στα δεδομένα εισαγωγής και το αποτέλεσμα σε ορισμένες περιπτώσεις.
Παράδειγμα: Ας υποθέσουμε ότι έχετε μια εφαρμογή Αριθμομηχανής, για να ελέγξετε πλήρως τη λειτουργικότητα, ίσως θελήσετε να εκτελέσετε τις δοκιμές σας σε διαφορετικά σετ εισόδου.
Παράδειγμα: Αρνητικές τιμές, κλασματικοί αριθμοί, κανονικοί ακέραιοι, ακέραιοι αριθμοί που πλησιάζουν το μέγιστο επιτρεπόμενο εύρος κ.λπ. Ανεξάρτητα από τις τιμές εισόδου που έχετε, θέλετε να εκτελέσετε την ίδια λογική εκτέλεσης.
Ένας άλλος καλός λόγος για τη σύνταξη παραμετροποιημένων δοκιμών είναι ότι δεν δοκιμάζει μόνο μια ευτυχισμένη διαδρομή, αλλά ελέγχει επίσης τη διαδρομή σφάλματος ή αρνητικά σενάρια.
Παράδειγμα: Ας υποθέσουμε ότι υπάρχει μια εφαρμογή που επιστρέφει εάν μια δεδομένη επέκταση αρχείου είναι έγκυρη ή όχι. Οι δοκιμές βάσει δεδομένων μπορούν γρήγορα να επιτρέψουν στον προγραμματιστή να εκτελέσει δοκιμές για υποστηριζόμενες επεκτάσεις αρχείων και τυχόν σενάρια σφάλματος ή αρνητικές δοκιμές εισαγωγής.
Τώρα παραδοσιακά, μπορείτε να σκεφτείτε να γράψετε ή να αντιγράψετε τις δοκιμές για πολλές τιμές εισαγωγής, αλλά αυτός δεν είναι ο σωστός ή έξυπνος τρόπος για να επιτύχετε αυτό το είδος εκτέλεσης δοκιμής. Επιπλέον, καθώς ο αριθμός των δοκιμών αρχίζει να αυξάνεται στην εφαρμογή σας, αυτές οι δοκιμές θα είναι δύσκολο να διατηρηθούν.
Γράφοντας παραμετρικές δοκιμές με Spock
Το πού: μπλοκ
Το μπλοκ όπου σε μια δοκιμή Spock, είναι το μπλοκ που κρατά δεδομένα για την παραμετροποιημένη δοκιμή. Μπορεί προαιρετικά να περιέχει τιμές εισόδου και αναμενόμενης εξόδου. Ένα σημαντικό σημείο που πρέπει να σημειωθεί σχετικά με αυτό το μπλοκ είναι ότι αυτό θα πρέπει να είναι το τελευταίο μπλοκ σε μια δοκιμή Spock.
Τούτου λεχθέντος, μπορεί να συνδυαστεί με όλα τα άλλα μπλοκ όπως δίνεται, πότε & τότε αλλά θα πρέπει να είναι το τελευταίο μπλοκ.
Ας δούμε ένα παράδειγμα για να το κατανοήσουμε καλύτερα
Θα χρησιμοποιήσουμε μια εφαρμογή αριθμομηχανής που λαμβάνει 2 παραμέτρους εισόδου και επιστρέφει το άθροισμα των παρεχόμενων εισόδων. Θα συντάξουμε μια παραμετροποιημένη δοκιμή που θα παρέχει πολλές εισόδους και αναμενόμενες τιμές εξόδου.
def 'sample parameterized test'() input2
Στο παραπάνω δείγμα κώδικα μπορείτε να δείτε τα εξής:
- Μπλοκ 'πού' που περιέχει τα δεδομένα για την εκτέλεση της δοκιμής.
- Το μπλοκ 'όπου' είναι το τελευταίο μπλοκ του τεστ.
- Το 'πού' συνδυάζεται με τα άλλα μπλοκ, δηλαδή, όταν και πότε.
- Η αναπαράσταση δεδομένων είναι μια ειδική μορφή που ονομάζεται πίνακες δεδομένων, την οποία θα εξετάσουμε λεπτομερώς στις προσεχείς ενότητες αυτού του σεμιναρίου.
- Η σειρά κεφαλίδας των δεδομένων είναι ουσιαστικά οι ιδιότητες / μεταβλητές εισαγωγής που μπορούν να χρησιμοποιηθούν άμεσα στη δοκιμή. Π.χ. Ανατρέξτε στη δήλωση στο μπλοκ 'πότε' που χρησιμοποιήσαμε άμεσα είσοδος1 και είσοδος2 ως παράμετροι εισαγωγής χωρίς να τις ορίζουμε ρητά.
Χρήση δεδομένων
Ας προσπαθήσουμε να κατανοήσουμε λεπτομερώς τους πίνακες δεδομένων τώρα. Κάθε γραμμή του πίνακα δεδομένων αντιπροσωπεύει δεδομένα για ένα μεμονωμένο σενάριο (δοκιμή εκτέλεσης).
Κατά συνθήκη, δηλαδή οι τιμές εισόδου προηγούνται από έναν μόνο σωλήνα (‘|’) ενώ οι τιμές εξόδου προηγούνται από διπλό σωλήνα (‘||’). Αυτό δεν έχει λογική σημασία, αλλά είναι σύμβαση και βελτιώνει την αναγνωσιμότητα. Έτσι, και τα δύο παρακάτω παραδείγματα ισχύουν.
input1 |input2 |expectedResult 10 |15 |25 -4 |6 |2 input1 |input2 || expectedResult 10 |15 || 25 -4 |6 || 2
Η σειρά κεφαλίδας, όπως φαίνεται παραπάνω, έχει ένα όνομα για καθεμία από τις παραμέτρους που παρέχονται ως δεδομένα προς δοκιμή. Είναι σημαντικό να σημειωθεί εδώ ότι αυτά τα ονόματα παραμέτρων δεν πρέπει να συγκρούονται με υπάρχουσες τοπικές / καθολικές μεταβλητές στη δοκιμή, διαφορετικά θα υπάρξουν λάθη μεταγλώττισης-χρόνου για την επίλυση μεταβλητών ονομάτων.
Ένα σημαντικό σημείο που πρέπει να σημειωθεί κατά τη χρήση πινάκων δεδομένων είναι ότι απαιτούνται τουλάχιστον 2 στήλες. Εάν χρειάζεστε μόνο μία στήλη, τότε μια κενή στήλη με τιμές ως χαρακτήρα υπογράμμισης είναι μια λύση όπως παρακάτω.
input1 ||_ 10 ||_ -4 ||_
Το πλεονέκτημα αυτής της μορφής είναι η απλότητα, η αναγνωσιμότητα και η επεκτασιμότητα. Η προσθήκη μιας νέας εισόδου δεδομένων είναι τόσο απλή όσο η προσθήκη μιας νέας σειράς με τιμές δεδομένων.
Ένα άλλο σημείο που πρέπει να σημειωθεί εδώ είναι ότι οι πίνακες δεδομένων μπορούν να χρησιμοποιηθούν για τη διατήρηση οποιουδήποτε τύπου μεταβλητών, τάξεων, αντικειμένων, αριθμών κ.λπ. που το καθιστούν ακόμη πιο ισχυρό. Καθώς το groovy είναι μια προαιρετικά δακτυλογραφημένη γλώσσα, εάν δεν προσδιορίζεται ένας ρητός τύπος, οι μεταβλητές στον πίνακα δεδομένων υποδηλώνουν ανάλογα με τον τύπο των παρεχόμενων δεδομένων.
Ας δούμε άλλο Παράδειγμα χρησιμοποιώντας πίνακες δεδομένων με μια λίστα συμβολοσειρών ως είσοδο και έξοδο ως μέτρηση στοιχείων στη συμβολοσειρά.
def 'sample parameterized test with list data type'() when: def actualCount = input1.size() then: actualCount == expectedCount where: input1
Στο παραπάνω παράδειγμα, μπορείτε να παρατηρήσετε ότι παρέχουμε είσοδο ως λίστα πίνακα συμβολοσειρών και η έξοδος είναι το μέγεθος αυτής της λίστας συστοιχιών. Έτσι, δίνει μεγάλη ευελιξία για την εισαγωγή δεδομένων διαφορετικών τύπων.
Μπορείτε επίσης να αναφέρετε απλώς τυχόν εκφράσεις που επιστρέφουν δεδομένα του αντίστοιχου τύπου εισόδου και χρησιμοποιούν απευθείας στους πίνακες δεδομένων.
Κύκλος ζωής του μπλοκ 'πού'
Για δοκιμές που περιέχουν τα δείγματα μπλοκ και δεδομένων με τη μορφή πινάκων δεδομένων, κάθε σειρά δεδομένων αντιπροσωπεύει μία εκτέλεση της μεθόδου δοκιμής.
Για παράδειγμα, Αν υπάρχουν 5 σειρές δεδομένων και το τεστ περιέχει μπλοκ 'δεδομένου' και 'πότε', τότε για τέτοια σειρά δεδομένων τα τεστ μπλοκ θα εκτελεστούν μία φορά. Έτσι, συνολικά, θα υπάρξουν συνολικά 5 εκτελέσεις της μεθόδου δοκιμής.
ΣΥΜΒΟΥΛΕΣ
Ας δούμε μερικές συμβουλές και κόλπα για παραμετροποιημένες δοκιμές ενώ εργαζόμαστε με αυτούς τους πίνακες δεδομένων.
# 1) Εμφάνιση των αποτελεσμάτων της μεμονωμένης εκτέλεσης σειράς ξεχωριστά. Όπως είδαμε στην ενότητα κύκλου ζωής, για κάθε σειρά δεδομένων υπάρχει μία εκτέλεση του δοκιμαστικού κώδικα. Για να εμφανίζονται αυτές οι σειρές ή τα αποτελέσματα ξεχωριστά για κάθε τέτοια σειρά, ο σχολιασμός '@ Unnroll' μπορεί να χρησιμοποιηθεί για τέτοιες δοκιμές.
Ας προσπαθήσουμε να το κατανοήσουμε με ένα παράδειγμα:
Θα χρησιμοποιήσουμε την ίδια εφαρμογή αριθμομηχανής με 3 σύνολα δεδομένων εισόδου να παρέχονται στη δοκιμαστική μέθοδο.
χρήσεις του c ++ στον πραγματικό κόσμο
def 'sample parameterized test'() -20
Χωρίς σχολιασμό '@Unroll', ας δούμε πώς φαίνεται το αποτέλεσμα στο τερματικό (καθώς και τις αναφορές βάσει html). Με αυτό το είδος εξόδου, καθίσταται δύσκολο να ανακαλυφθεί ποιο σύνολο εισόδου προκάλεσε την αποτυχία του τεστ.
Τώρα ας δούμε πώς αναφέρεται η έξοδος δοκιμής ξεχωριστά για κάθε σειρά μετά την προσθήκη σχολιασμού '@Unroll' στη μέθοδο δοκιμής (η οποία έχει πίνακες δεδομένων ως εισαγωγή δεδομένων).
#δύο) Τώρα, ας καταλάβουμε πώς να προσθέσουμε σημαντικές πληροφορίες σε αυτές τις δοκιμές που βασίζονται σε δεδομένα (αντί ορισμένων αυτόματων προσαρτημένων ευρετηρίων όπως στο παραπάνω στιγμιότυπο οθόνης).
Μπορούμε να χρησιμοποιήσουμε σύμβολα κράτησης θέσης για τις ιδιότητες εισόδου και εξόδου (σύμφωνα με τον πίνακα δεδομένων) και μετά μπορούμε να δούμε τις τιμές που συμπληρώνονται σε ονόματα δοκιμών με δεδομένα από πίνακες δεδομένων.
Ας χρησιμοποιήσουμε το ίδιο παράδειγμα και ενημερώστε το όνομα δοκιμής για να λάβουμε δεδομένα από την είσοδο και την αναμενόμενη έξοδο όπως αναφέρεται στους πίνακες δεδομένων:
@Unroll def 'result of adding #input1 & #input2 should be #expectedResult'() given: def app = new CalculatorApp() when: def resultSum = app.add(input1, input1) then: resultSum == 2 * input1 where: input1
Τώρα ας δούμε πώς φαίνεται η έξοδος στο τερματικό και στις αναφορές που βασίζονται σε HTML:
Έτσι, όπως μπορείτε να δείτε εδώ, τα δεδομένα από την είσοδο και την έξοδο εμφανίζονται τώρα μαζί με τα δοκιμαστικά ονόματα όταν εκτελούνται. Με αυτόν τον τρόπο διευκολύνει την αντιμετώπιση προβλημάτων και τον εντοπισμό σφαλμάτων, καθώς δείχνει σαφώς ποια είσοδος προκάλεσε την αποτυχία της δοκιμής ή συμπεριφορά.
συμπέρασμα
Σε αυτό το σεμινάριο, μάθαμε να γράφουμε παραμετροποιημένες δοκιμές με το πλαίσιο Spock. Συζητήσαμε επίσης διάφορα χαρακτηριστικά των πινάκων δεδομένων και πώς μπορούν να χρησιμοποιηθούν.
Δείτε το επερχόμενο σεμινάριό μας για να μάθετε πώς να χρησιμοποιείτε το Mocks and Stubs με το Spock !!
Εκπαιδευτικό πρόγραμμα PREV | ΕΠΟΜΕΝΟ Φροντιστήριο
Συνιστώμενη ανάγνωση
- Γράφοντας μονάδες δοκιμών με Spock Framework
- Ερωτήσεις συνέντευξης Spock με απαντήσεις (πιο δημοφιλείς)
- Spock για ενσωμάτωση και λειτουργική δοκιμή με σελήνιο
- Spock Mocking and Stubbing (Παραδείγματα με Video Tutorials)
- Tutorial Spock: Δοκιμές με Spock και Groovy
- Πλαίσιο βάσει δεδομένων στο Selenium WebDriver με χρήση Apache POI
- Τρόπος εκτέλεσης δοκιμών βάσει δεδομένων χρησιμοποιώντας το εργαλείο TestComplete
- Πώς λειτουργεί η δοκιμή βάσει δεδομένων (παραδείγματα QTP και σεληνίου)