Showing posts with label testing. Show all posts
Showing posts with label testing. Show all posts

Apr 21, 2017

Συμβουλές για JMeter και ADF 12c

O καλύτερος τρόπος να ξεκινήσει κανείς σενάρια performance testing με το JMeter σε εφαρμογές ADF, είναι να χρησιμοποιήσει το test plan από εδώ, να το διαμορφώσει σε ένα test fragment και να το αξιοποιήσει σε περαιτέρω πλάνα. Επιπλέον συμβουλές που δοκιμάστηκαν σε ADF 12.2.1.2.0 :


  • Όπως αναφέρεται και στο soadev blog ο resolver για το _afrLoop έχει την μορφή: _afrLoop',\s*'([0-9]{13,16})
  • Για πιο αποτελεσματικό recording ADF εφαρμογών μπορούμε να παραλείψουμε αρχεία css, png και js διαμορφώνοντας κατάλληλα τον script recorder
  • Για την καλύτερη οργάνωση των HTTP requests που γίνονται record, είναι προτιμότερο να τα οργανώσουμε ανά transaction controller

  • Τέλος, στη λίστα των patterns to test, ας προσθέσουμε το "Because of inactivity..." επειδή είναι ένα πολύ πιθανό μήνυμα όταν δεν έχει διαμορφωθεί σωστά το σενάριο



Aug 2, 2015

Κυκλοφόρησε η έκδοση του Robot framework 2.9

Την 1η Αυγούστου κυκλοφόρησε η έκδοση 2.9 του acceptance testing framework Robot. H ενημέρωση στην νέα έκδοση είναι εύκολη στο Linux με την εντολή:

sudo pip install robotframework -U
Ίσως το κυριότερο νέο χαρακτηριστικό είναι η υποστήριξη dictionaries (maps) για τις μεταβλητές ενός τεστ. Πάντως, αυτού του είδους οι μεταβλητές δεν υποστηρίζονται προς το παρόν από το Ride 1.4 (άρα θα πρέπει να καταφύγουμε σε text-mode για να τις δηλώσουμε) Ένα επιπλέον πρόβλημα με το Ride 1.4 είναι πως δεν αναγνωρίζονται σωστά οι built-in βιβλιοθήκες και εμφανίζονται με κόκκινο χρώμα. Παρόλο που αυτό δεν δημιουργεί πρόβλημα στην εκτέλεση των tests, ωστόσο προκαλεί προβλήματα στο Ride καθώς δεν αναγνωρίζονται τα σχετιζόμενα keywords. Ας ελπίσουμε πως σύντομα θα υπάρξει διόρθωση.

Ενημέρωση 11/8/2015: Με την έκδοση 1.4.1b2 του Ride επιλύεται το θέμα των Built-in libraries, ενώ δεν υπάρχει ακόμα υποστήριξη για dictionary variables.

Dec 14, 2014

Robot framework + Selenium + Continuous integration σε Weblogic

Ένα από τα πιο ισχυρά χαρακτηριστικά της έκδοσης 12c του Oracle Fusion Middleware είναι η υποστήριξη του Maven τόσο σχεδιαστικά (στον JDeveloper) όσο και εκτελεστικά σε σχέση με τον Weblogic. Για πρώτη φορά μάλιστα υπάρχει και επίσημος οδηγός της Oracle για Continuous Integration. Σε αυτό το άρθρο θα ήθελα να τονίσω την εντυπωσιακή ευκολία κατάρτισης μιας ροής που θα κάνει deploy μια εφαρμογή στον Weblogic Server και έπειτα θα εκτελεί acceptance tests γραμμένα στο Robot framework, σε ένα περιβάλλον continuous integration (πχ Jenkins ή Hudson)

Ως προς την κατάρτιση των acceptance tests και την εκτέλεση τους μέσω Maven, υπάρχει ένα ειδικό plugin του Robot. H τοποθεσία των σεναρίων ελέγχου αναμένεται στην διαδρομή: src/test/robotframework/acceptance. Προκειμένου τα web tests μας να έχουν πρόσβαση στην Selenium βιβλιοθήκη αρκεί να προσθέσουμε το dependency για την Java Selenium2 βιβλιοθήκη:

 <dependency>  
   <groupId>com.github.markusbernhardt</groupId>  
   <artifactId>robotframework-selenium2library-java</artifactId>  
   <version>1.4.0.7</version>  
   <scope>test</scope>  
 </dependency>  

Στα πλαίσια του Maven πρέπει να ορίσουμε το Weblogic deployment plugin καθώς και αυτό του Robot. Στο παράδειγμα μας, μπορούμε να αναθέσουμε μεταβλητές για τα Robot test scripts μας (όπως αυτό του appurl) Επίσης, τα tags που θέλουμε να εκτελεστούν (για παράδειγμα τα sanity tests και όχι τα load)

 <plugin>  
     <groupId>com.oracle.weblogic</groupId>  
     <artifactId>weblogic-maven-plugin</artifactId>  
     <version>12.1.3-0-0</version>  
     <configuration>  
      <adminurl>${weblogic.admin.url}</adminurl>  
      <user>${weblogic.username}</user>  
      <password>${weblogic.passwd}</password>  
      <upload>true</upload>  
      <action>deploy</action>  
      <remote>true</remote>  
      <verbose>true</verbose>  
      <targets>${weblogic.targets}</targets>  
      <source>${basedir}/target/myapp-${project.version}.ear</source>  
      <name>moj-gn</name>  
     </configuration>  
     <executions>  
      <execution>  
       <phase>pre-integration-test</phase>  
       <goals>  
        <goal>deploy</goal>  
       </goals>  
      </execution>  
     </executions>  
    </plugin>  
   <plugin>  
     <groupId>org.robotframework</groupId>  
     <artifactId>robotframework-maven-plugin</artifactId>  
     <version>1.4.3</version>  
     <configuration>  
     <variables>  
     <variable>appurl:${myappurl}</variable>  
   </variables>  
     <includes>  
      <tag>sanity</tag>  
     </includes>  
     <excludes>  
     <tag>load</tag>  
     </excludes>  
     </configuration>  
     <executions>  
      <execution>  
       <goals>  
        <goal>run</goal>  
       </goals>  
      </execution>  
     </executions>  
    </plugin>  
Στον υπολογιστή του CI θα πρέπει να έχουν εγκατασταθεί:

  • ένας browser (πχ firefox)
  • o X virtual frame buffer και να έχει ξεκινήσει ως service
Όλα αυτά στο Ubuntu γίνονται με την εντολή: sudo apt-get install firefox xvfb

Τέλος στον Jenkins/Hudson, αρκεί να θέσουμε την μεταβλητή DISPLAY στην τιμή :99.
Στο επόμενο deployment του Weblogic, θα εκτελεστούν και τα tests μας. Εντυπωσιακό !

Sep 15, 2014

Αυτοματοποίηση ελέγχου (testing) του Oracle Database με το Robot σε Ubuntu

Έχουμε αναφερθεί στο παρελθόν στο Robot framework για την κατάρτιση αυτοματοποιημένων σεναρίων ελέγχου (test cases) Η απλότητα στη δήλωση των βημάτων ενός σεναρίου και οι πολλές του βιβλιοθήκες το καθιστούν μια πολύ αξιόπιστη λύση για την αυτοματοποίηση και σε προϊόντα της Oracle, όπως για παράδειγμα το SOA Suite ή τον Weblogic Server. Σε αυτό το άρθρο θα σας παρουσιάσω πως μπορούμε να κατασκευάσουμε σενάρια στο Robot που θα αφορούν την Oracle βάση δεδομένων. Ως λειτουργικό σύστημα αναφοράς θα χρησιμοποιήσουμε το Ubuntu 14.04 (Trusty Tahr) ενώ η αρμόδια βιβλιοθήκη του Robot είναι η "Database Library (python)" που υποστηρίζει μέχρι την έκδοση 12c.
 1) Αρχικά, θα κατεβάσουμε τον instant client της Oracle καθώς και το SDK. Για το Ubuntu θα χρειαστούμε τις .zip εκδόσεις.

2) Αφού κάνουμε unzip τα αρχεία πχ στον κατάλογο $HOME/instantclient_12_1, ορίζουμε στο αρχείο .bashrc του χρήστη που θα χρησιμοποιήσει το Robot τα εξής:
export ORACLE_HOME=$HOME/instantclient_12_1
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH

και μετά:
ln -s $ORACLE_HOME/libclntsh.so.12.1 $ORACLE_HOME/libclntsh.so

3) Ως root δημιουργούμε το αρχείο /etc/ld.so.conf.d/oracle.conf με τα ακόλουθα περιεχόμενα, που δείχνουν στον κατάλογο του instant client:

/home/robot/instantclient_12_1

και τρέχουμε την εντολή:

#> ldconfig

4) Προετοιμάζουμε το Ubuntu για την εγκατάσταση με τις εντολές:

sudo apt-get install python-pip python-dev python-wxgtk2.8 libaio1
sudo pip install robotframework
sudo pip install robotframework-ride
sudo pip install robotframework-databaselibrary


5) Τέλος, συνδεόμαστε ως ο χρήστης που θα τρέξει το Robot και εκτελούμε τις εντολές:
sudo bash
#> pip install cx_Oracle

Έχουμε τελειώσει με τις εγκαταστάσεις. Μπορούμε να φτιάξουμε το πρώτο μας σενάριο. Η βιβλιοθήκη Database Library υποστηρίζει εντολές όπως Connect to Database, Query, Execute SQL script, Check If Exists In Database, κ.α. Δυστυχώς οι σχετικές row assertion εντολές όπως οι Row Count δεν δουλεύουν για την Oracle. Έτσι μπορούμε να φτιάξουμε σενάρια που εκτελούν μια SQL εντολή, μια stored procedure ή ένα script, ελέγχουν την ύπαρξη αποτελεσμάτων, κτλ.

Aug 25, 2014

Άμεση δοκιμή Web Services στον JDeveloper

Ο JDeveloper διαθέτει εδώ και πολύ καιρό ισχυρές δυνατότητες για την δημιουργία clients σε SOAP Web Services και από την έκδοση 12c και για REST. Μια άγνωστη, μικρή λειτουργία είναι το ότι μπορούμε άμεσα να ελέγξουμε ένα SOAP, REST ή HTTP Web Service, χωρίς να έχουμε κατασκευάσει ένα proxy client, κάτι που φυσικά κάνουν και πιο οργανωμένα εργαλεία όπως το SoapUI.

Αν ανατρέξουμε στο μενού Tools-->HTTP Analyzer, μπορούμε να δημιουργήσουμε μια νέα αίτηση για το είδος του Web Service που μας ενδιαφέρει.
O JDeveloper θα αναλάβει να διαβάσει το σχήμα των δεδομένων (WSDL, WADL) που θα του προσδιορίσουμε και έτσι θα προκατασκευάσει ένα δοκιμαστικό μήνυμα.
Φυσικά παρέχεται full trace για το μήνυμα που στάλθηκε καθώς και επηρεασμός HTTP headers, security credentials, κλπ, πράγμα που είναι πολύ χρήσιμο για έναν γρήγορο έλεγχο μιας υπηρεσίας είτε ενός SOA composite.

Mar 27, 2014

Εκτέλεση σεναρίων ελέγχου (test cases) διαφορετικών browsers στο Robot framework

Ένα εξαιρετικά ενδιαφέρον acceptance testing framework είναι το Robot. Διακρίνεται αφενός για την απλότητα του, καθώς τα βήματα ελέγχου περιγράφονται σε απλή, φυσική γλώσσα που καταχωρείται στην μορφή κελιών, παρόμοιων με αυτών ενός φύλλου εργασίας (spreadsheet) Γι' αυτή τη λειτουργικότητα προσφέρεται το περιβάλλον προγραμματισμού R(obot)IDE. Αφετέρου, διαθέτει μια μεγάλη λίστα από βιβλιοθήκες ή επεκτάσεις αν προτιμάτε, ώστε να καλύψει ελέγχους σε βάσεις δεδομένων, συνδέσεις ssh, web services, web user interfaces κλπ.
Για την εκτέλεση σεναρίων σε web σελίδες μπορεί να χρησιμοποιηθεί η βιβλιοθήκη του Selenium που είναι εξαιρετικά ισχυρή σε επιλογές ώστε να προσομοιώνει την καταχώρηση του χρήστη, τα δυναμικά γεγονότα που συμβαίνουν σε μια σελίδα και να τα αντιπαραβάλει με τα επιθυμητά αποτελέσματα. Προκειμένου να ξεκινήσει ένα τεστ, μια από τις πρώτες Selenium εντολές που θα χρησιμοποιήσουμε είναι αυτή του "Open Browser" που επιδέχεται ως όρισμα και τον τύπο του φυλλομετρητή. Έτσι, μπορούμε να φτιάξουμε μια μεταβλητή στο Robot (πχ "browser") που θα δηλώνει αυτόν τον τύπο (πχ με τιμή "firefox" ή "chrome") και αναλόγως να την τροφοδοτούμε. Για παράδειγμα, η command-line εκτέλεση ενός Robot test suite έχει ως εξής, λαμβάνοντας ως παράμετρο τον τύπο του browser:

pybot -v browser:firefox /home/user/Projects/testing/robot/testsuite1/TestSuite1.robot

Στις δοκιμές μου σε Ubuntu 13.10 (Saucy Salamander) δεν παρουσιάστηκε κανένα πρόβλημα με τον Firefox. Υπάρχει όμως μια μικρή σημείωση για την υποστήριξη του Chromium. Θα χρειαστεί να κατεβάσουμε τον Chrome Webdriver από εδώ και να τον τοποθετήσουμε σε ένα φάκελο που βρίσκεται στο PATH μας. Τέλος, να φτιάξουμε ένα symbolic link του Chromium για το alias google-chrome:

ln -s /usr/bin/chromium-browser /usr/bin/google-chrome

Mar 16, 2014

UI testing με το Sikuli

Το τελευταίο καιρό δοκιμάζω το sikuli για την αυτοματοποίηση εργασιών αλλά και για UI tests στο ADF. Μου αρέσει πολύ ο τρόπος καταγραφής μιας σειράς ενεργειών στο sikuli με την λήψη screenshots με αποτέλεσμα να έχει μπροστά του κανείς μια άμεση, οπτικοποιημένη περιγραφή ενός σεναρίου. Είναι ένα εργαλείο που είναι βολικό και για fat-client ή και Swing εφαρμογές που συνήθως απουσιάζουν πολλές επιλογές για αυτοματοποιημένο έλεγχο.

Προς το παρόν, το λειτουργώ στο Ubuntu 13.10 64-bit (Saucy Salamander) δίχως προβλήματα αλλά και σε Windows 7. Ας ξεκινήσουμε περιγράφοντας τη διαδικασία εγκατάστασης για Ubuntu (για την περίπτωση των Windows δεν είναι απαραίτητο το ακόλουθο βήμα) Εκτελούμε λοιπόν:

sudo apt-get install libtesseract-dev libcv2.4 tesseract-ocr

Έπειτα, κατεβάζουμε τον jar installer (sikuli-setup.jar) και φροντίζουμε να έχουμε εγκαταστημένη Java 6/7 στον υπολογιστή μας. Η εκκίνηση του installer είναι εύκολη:

java -jar sikuli-setup.jar

O installer εμφανίζει διάφορες επιλογές. Έχω προτιμήσει την πρώτη και την πέμπτη, ώστε να μπορεί να πραγματοποιηθεί OCR έλεγχος γύρω από το λεκτικό περιεχόμενο μιας εικόνας.
Με την ολοκλήρωση του installer, ξεκινούμε το σχεδιαστικό περιβάλλον με την εντολή runIDE και η γλώσσα προγραμματισμού η Jython. Το περιβάλλον περιλαμβάνει στα αριστερά τις ενέργειες που μπορεί να περιλαμβάνει το σενάριο μας, όπως clicks σε κουμπιά που θα φωτογραφίσουμε, πληκτρολόγηση σε input texts (που επίσης θα φωτογραφήσουμε) ενώ στο πάνω μέρος έχουμε τα εικονίδια για την εκκίνηση λήψης φωτογραφιών. Επίσης, με το κουμπί Run θα μπορέσουμε να εκτελέσουμε άμεσα το σενάριο μας.
Επειδή μια εικόνα είναι χίλιες λέξεις, μια ενδεικτική καταγραφή ενεργειών, θα μπορούσε να είναι η ακόλουθη, ξεκινώντας από την εκκίνηση του Firefox, την πλοήγηση σε ένα site, το login process και στην συνέχεια κάποια navigation clicks. Πρόκειται για βήματα μιας γλώσσας που δεν είναι απαραίτητες πολλές τεχνικές γνώσεις. Έλεγχοι που συνοδεύονται από οπτικές ειδοποιήσεις ή μεταβολές (πχ εμφάνιση μηνυμάτων λαθών ή ενημέρωση μιας τιμής) μπορούν να καλυφθούν με ευκολία καθώς το sikuli αυτό που κάνει καλά είναι η αντιπαραβολή και σύγκριση εικόνων (images) H σύγκριση μπορεί να περιλαμβάνει επίσης μετατροπή της εικόνας σε λεκτικά (OCR) αλλά αυτή δεν είναι πάντα επιτυχημένη.
Καθόσον αναπτύσσουμε το script μας μπορούμε άμεσα να το εκτελούμε. Στο παράδειγμα μας, το sikuli θα ξεκινήσει τον Firefox, θα πληκτρολογήσει μπροστά στα μάτια μας ό,τι έχουμε ορίσει και θα κάνει τα clicks που θέλουμε. Τα βήματα της καταγραφής μπορούν να ολοκληρωθούν με το unit testing framework της Jython και την βιβλιοθήκη HTMLTestRunner ώστε να παραχθεί μια HTML αναφορά. Φυσικά όλα αυτά μπορούν να ενταχθούν σε μια διαδικασία καθημερινού, αυτοματοποιημένου ελέγχου μέσω command-line scripting.