Nov 25, 2007

Δοκιμές (Testing) σε διαδικασίες BPEL

Από τα πιο ισχυρά χαρακτηριστικά του Oracle BPEL είναι η δυνατότητα γρήγορης σχεδίασης και απεικόνισης διαδικασιών και διασύνδεσης συστημάτων. Μία από τις ενδιαφέρουσες προσθήκες στο προϊόν στην έκδοση 10.1.3 είναι η υποστήριξη unit testing για τις ροές τις οποίες συνθέτουμε. Πιο συγκεκριμένα, είναι δυνατόν να ορίσουμε, με γραφικό τρόπο:
  • σύνολα δοκιμών (test suites)
  • προκατασκευασμένα input / output μηνύματα για την ροή ή τα partner links που χρησιμοποιεί
  • μηχανισμούς επικύρωσης (asserts) για την εκτέλεση της ροής και την τιμή των εσωτερικών μεταβλητών

Το ενδεικτικό παράδειγμα που θα χρησιμοποιηθεί για την επίδειξη αυτής της λειτουργικότητας, έχει να κάνει με μια υπηρεσία που επιστρέφει στο output, ότι έχει δεχθεί στο input (EchoService) Ειδική προσοχή δίνεται στην περίπτωση που η είσοδος είναι "κενή" (empty string) οπότε επιστρέφεται το προκαθορισμένο κείμενο '(empty)'.


Όταν θα κάνουμε deploy τη δουλειά μας, θα δούμε ότι τρέχοντας ένα παράδειγμα και ακολουθώντας την επιλογή "Audit", μπορούμε να οδηγηθούμε στο tab "Test" που μπορεί να αποθηκεύσει σε ένα αρχείο XML το input που δώσαμε (βασική δοκιμή - baseline test). Επίσης παρατηρήστε την ευχέρεια που έχουμε για αποθήκευση όλων των μηνυμάτων που στάλθηκαν και παραλήφθηκαν από τα partner links σε σχέση με την κεντρική μας ροή.

Επιστρέφοντας τώρα στον JDeveloper, το εργαλείο σχεδίασης του Oracle BPEL, μπορούμε να δημιουργήσουμε ένα νέο σύνολο δοκιμών (test suite) κάνοντας δεξί click στην αντίστοιχη κατηγορία και δίνοντας ένα όνομα.

Σε αυτό το σημείο, μπορούμε να εισάγουμε το βασικό test που έχουμε σώσει νωρίτερα με την επιλογή Import BPEL Test μέσα στο test suite μας. Εισάγοντας το στο JDeveloper, διακρίνουμε ένα σημαδάκι στη διαδικασία receiveInput που σημαίνει πως ένα προκατασκευασμένο μήνυμα (emulated) έχει χρησιμοποιηθεί, που δεν είναι φυσικά τίποτα άλλο από τα περιεχόμενα του μηνύματος της αρχικής δοκιμής μας.



Από όσο διακρίνει κανείς, αυτό κείμενο θα ήταν επίσης δυνατόν να δοθεί από ένα αρχείο στον δίσκο. Ας φτιάξουμε λοιπόν το πρώτο μας test, αναφορικά με την περίπτωση ενεργοποίησης του service με κάποιο όχι κενό κείμενο. Κάνουμε λοιπόν Create Test στην σουίτα μας και κατά αντίστοιχο τρόπο μπορούμε να ορίσουμε, με δεξί click στη Receive διαδικασία μας, ποιο μήνυμα θέλουμε να δοκιμάσουμε. Αυτή τη φορά, θα προσθέσουμε και έναν κανόνα επικύρωσης (assertion) ώστε να βεβαιωθούμε πως τα αποτελέσματα θα είναι τα αναμενόμενα. Κάνουμε λοιπόν δεξί click στο replyOutput activity και κατασκευάζουμε έναν κανόνα σχετικά με την αναμενόμενη τιμή του output μετά την επεξεργασία.

Στο παράδειγμά μας, το αναμενόμενο αποτέλεσμα είναι η μεταβλητή outputVariable να πάρει την τιμή "welcome message". Ανάλογες επικυρώσεις (asserts) μπορούμε να ορίσουμε για τον αριθμό εκτέλεσης ενός activity ή για την τιμή ενός XML fragment. Κατά όμοιο τρόπο, δημιουργούμε ένα δεύτερο test case για την περίπτωση του κενού input. Σκοπίμως, το τεστ μας περιμένει την τιμή 'null' ως output, αντί της υλοποιημένης '(empty)'.


Στο τέλος, μπορούμε να κάνουμε deploy τα tests μας μέσα από την επιλογή BPEL Test Deployer.



Αφότου περάσουμε αυτό το βήμα με επιτυχία, τότε όταν θα ξανασυνδεθούμε στο BPEL Console και οδηγηθούμε στην διαδικασία μας και μετά στο tab Test Suites, θα βρίσκονται εκεί οι δοκιμές μας να μας περιμένουν για εκτέλεση.

Κάνουμε click στο Execute tests και μετά από λίγο δημιουργείται ένα HTML report αποτελεσμάτων.

2 comments:

javapapo said...

ο designer τι λέει; μήπως έχεις δουλέψει Bea WLI το οποίο είναι απαράδεκτο -εχεις τις ιδιες παιδικές ασθένειες;

Serafeim Karapatis said...

Ο βασικός designer του Oracle BPEL είναι ο JDeveloper και σε γενικές γραμμές είναι σταθερός και πολύ εύχρηστος, χωρίς βέβαια να λείπουν τα προβλήματα που και που. Συνήθως πάντως, πολλά προβλήματα πηγάζουν από τους περιορισμούς της Oracle Lite, που δεν συνίσταται να χρησιμοποιηθεί σε παραγωγικό περιβάλλον ανάπτυξης.

Δυστυχώς, δεν μπορώ να εκφέρω γνώμη για το BEA WLI γιατί δεν έχει τύχει να το δουλέψω μέχρι στιγμής.