SlideShare a Scribd company logo
utPLSQL v3
Ultimate Unit Testing framework for Oracle
Jacek Gębal
twitter: @GebalJacek
mail: jgebal@gmail.com
blog: oraclethoughts.com
Principal Data Engineer Developer
@Fidelity Investments - Ireland
co-author of: utPLSQL v3
Plan
● Oracle Database testing tools
● utPLSQL v3
● Rules of unit testing
● Test Driven Development with utPLSQL
● Testing data
● Test run options
● Suites
● utPLSQL - SQL Developer extension
● utPLSQL-cli - running tests from command line
● CI/CD integration
Steven Feuerstein
1999
PLUTO
PL/Unit
ruby-plsql-spec
DBFit
Oracle Database Unit Testing market
Market expectations
The team
● Jacek Gębal
● Pavel Kaplya
● Robert Love
● David Pyke
● Vinicius Avellar
● Samuel Nitsche
● Philipp Salvisberg
Why utPLSQL v3 ? ● free
● open source
● pure PL/SQL
● Tested on 11gR2 - 12cR2
● IDE independent
● database independent
● CI/CD oriented
● modular and extendable
Properties of
Unit Tests
● Fast
● Isolated
● Repeatable
● Self-verifying
● Thorough & Timely
https://github.com/.../F.I.R.S.T-Principles-of-Unit-Testing
https://pragprog.com/.../2012-01/unit-tests-are-first
The Unit Test
also needs to be
● Simple
● Automated
● Testing one behavior
● Living documentation
● Developer’s responsibility
Delivering software that is:
● Safe to change
● Maintainable
● Can be tested and delivered iteratively
Why should I
care ?
What to test in
database ?
● Behavior
○ Logic
○ in / out structure
○ State (?)
● Avoid
○ under-testing
○ over-testing
○ meaningless tests
○ flaky tests
○ aiming for metrics (coverage/test count)
Test Driven Development
● write a test
● make it fail
● keep it simple
● tests are examples
● tests become
documentation
● get to green fast
● take baby steps
● stuck?
undo and start over
● write only enough
code to pass the test
● remove duplication
(in code and tests)
● rename and clean up
● run tests and stay green
● change implementation,
not behavior
● improve structure
in small steps
RED GREEN
REFACTOR
With TDD you get:
● Fast feedback loop
● Visible progress
● Code is tested before it exists
● Accomplishment
with every new test
Test Driven Development
with utPLSQL v3
● suite structure
● annotations
● expectation syntax
● running tests
● failure and error messages
demo
Summary
Annotation syntax:
--%name( parameter[s] )
Example:
--%suite(description)
--%test(description)
Expectation examples:
ut.expect( 1 ).to_( equal( 1 ) );
ut.expect( ‘Chuck’ ).to_equal( ‘Chuck’ );
Running tests:
exec ut.run();
Annotations
Package:
● --%suite(<description>)
● --%suitepath(<path>)
● --%rollback(auto/manual)
● --%disabled
Test procedure:
● --%test(<description>)
● --%throws(<error_No>[,...])
● --%beforetest(<proc_name>)
● --%aftertest(<proc_name>)
● --%rollback(auto/manual)
● --%disabled
Procedure:
● --%beforeall, --%afterall
● --%beforeeach, --%aftereach
Expectations & matchers
● be_null
● be_true
● be_greater_than( expected )
● be_less_than( expected )
● equal( expected )
● be_like( mask [, escape_char] )
ut.expect( actual ).to_( matcher(param[, param...]) );
ut.expect( actual ).not_to( matcher(param[, param...]) );
● be_not_null
● be_false
● be_greater_or_equal( expected )
● be_less_or_equal( expected )
● be_between( lower, upper )
● match( pattern [, modifiers] )
● be_empty ● have_count( count )
Matchers:
Equality rules in tests
ut.expect( 100 ).to_equal( ‘100’ );
ut.expect( ‘abcdef’ ).to_equal( to_clob( ‘abcdef’ ) );
ut.expect( systimestamp ).to_equal( current_timestamp );
ut.expect( sysdate ).to_equal( ‘20-MAR-2018’ );
When it comes to unit testing ...
Data types matter!
Supported data-types
● clob, blob
● timestamp (with (local) timezone)
● interval (day to second / year to month)
● cursor
● object, nested table, varray type
● number (integer)
● varchar2 (char / varchar)
● date
● boolean
Testing data
● data setup / cleanup
● cursor data comparison
● automatic rollback
● selective comparison
demo
--%suite(Demo suite)
--%beforeall
procedure data_setup_before_all;
--%beforeeach
procedure thing_to_do_before_each_test;
--%test(Does a thing)
procedure test_the_thing;
--%test(Does stuff)
--%beforetest(setup_before_stuff)
--%aftertest(cleanup_after_stuff)
procedure test_stuff;
procedure setup_before_stuff;
procedure cleanup_after_stuff;
--%afterall
procedure cleanup_after_all_is_done;
data_setup_before_all
thing_to_do_before_each_test
test_the_thing
thing_to_do_before_each_test
setup_before_stuff
test_stuff
cleanup_after_stuff
cleanup_after_all_is_done
savepoint before_suite
Order of execution
savepoint before_test
rollback to before_suite
rollback to before_test
savepoint before_test
rollback to before_test
& test isolation
Organizing tests
● suites hierarchy with suitepath
● parent, siblings, ancestors
● shared beforeall / afterall
● suites isolation / setup scope
demo
package test_add_room_content as
--%suite(Add content to a room)
--%suitepath(org.utplsql.demo.test_rooms)
package test_remove_rooms_by_name as
--%suite(Remove rooms by name)
--%suitepath(org.utplsql.demo.test_rooms)
package test_rooms as
--%suite
--%suitepath(org.utplsql.demo)
package test_betwnstr as
--%suite(description)
savepoint
rollback to savepoint
Suite hierarchy test run
utplsql
test_betwnstr
test_rooms
test_add_room_content test_remove_rooms_by_name
org
demo
savepoint
rollback to savepoint
savepoint
rollback to savepoint
Test run options
● default options
● single schema
● single package
● single test
● suite
● multiple schema
● specifying reporter
demo
utPLSQL - SQL Developer extension
demo
utplsql-cli
● Windows/Linux/Mac
● real-time reporting
● multi-reporting
● Oracle client independent
● CI/CD oriented
demo
Integration
● CI/CD servers
○ Jenkins
○ TeamCity
○ Travis
○ other...
● Sonar
○ generic test results
○ code coverage
● Coveralls
○ code coverage
demo
utPLSQL v3 recap
● free, open-source, pure PL/SQL
● annotations
● human readable syntax
● data type - aware comparison
● automatic test isolation
● rich selection of matchers
● supports cursors, object types, nested tables
● CI/CD oriented
● code coverage
Resources
Cheat-sheet: https://www.cheatography.com/jgebal/cheat-sheets/utplsql-v3/
Documentation: http://utplsql.org/utPLSQL/
Source code: https://github.com/utPLSQL/utPLSQL
Releases: https://github.com/utPLSQL/utPLSQL/releases
utPLSQL-cli: https://github.com/utPLSQL/utPLSQL-cli/releases
SQLDeveloper-extension: https://github.com/utPLSQL/utPLSQL-SQLDeveloper/releases
Twitter: @utplsql
Demo project: https://github.com/utPLSQL/utPLSQL-demo-project
Sonar results: https://sonarcloud.io/dashboard?id=utPLSQL
Coveralls results: https://coveralls.io/github/utPLSQL/utPLSQL
Travis-CI builds: https://travis-ci.org/utPLSQL/utPLSQL

More Related Content

What's hot (20)

PDF
MySQL Cheat Sheet
Chen Dominique
 
PDF
Javascript Design Patterns
Subramanyan Murali
 
PDF
GraalVM: Run Programs Faster Everywhere
J On The Beach
 
PPTX
Unit Testing in Java
Ahmed M. Gomaa
 
PDF
MySQL Backup & Recovery
Mindfire Solutions
 
PPTX
Packages in PL/SQL
Pooja Dixit
 
PDF
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
PostgresOpen
 
PDF
Functional Programming with Groovy
Arturo Herrero
 
PDF
High Performance PL/SQL
Steven Feuerstein
 
PDF
ClickHouse ReplacingMergeTree in Telecom Apps
Altinity Ltd
 
PDF
Functional programming
ijcd
 
PPTX
OOPs in Java
Ranjith Sekar
 
PDF
Unit Test and TDD
Viet Tran
 
PPTX
Oracle REST Data Services: Options for your Web Services
Jeff Smith
 
PDF
MySQL Performance Schema in Action
Sveta Smirnova
 
PPTX
PLSQL Tutorial
Quang Minh Đoàn
 
PDF
Postgresql database administration volume 1
Federico Campoli
 
PPTX
Module 5: YANG Tutorial - part 1
Tail-f Systems
 
PDF
All About PL/SQL Collections
Steven Feuerstein
 
PDF
ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
Altinity Ltd
 
MySQL Cheat Sheet
Chen Dominique
 
Javascript Design Patterns
Subramanyan Murali
 
GraalVM: Run Programs Faster Everywhere
J On The Beach
 
Unit Testing in Java
Ahmed M. Gomaa
 
MySQL Backup & Recovery
Mindfire Solutions
 
Packages in PL/SQL
Pooja Dixit
 
Kevin Kempter PostgreSQL Backup and Recovery Methods @ Postgres Open
PostgresOpen
 
Functional Programming with Groovy
Arturo Herrero
 
High Performance PL/SQL
Steven Feuerstein
 
ClickHouse ReplacingMergeTree in Telecom Apps
Altinity Ltd
 
Functional programming
ijcd
 
OOPs in Java
Ranjith Sekar
 
Unit Test and TDD
Viet Tran
 
Oracle REST Data Services: Options for your Web Services
Jeff Smith
 
MySQL Performance Schema in Action
Sveta Smirnova
 
PLSQL Tutorial
Quang Minh Đoàn
 
Postgresql database administration volume 1
Federico Campoli
 
Module 5: YANG Tutorial - part 1
Tail-f Systems
 
All About PL/SQL Collections
Steven Feuerstein
 
ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
Altinity Ltd
 

Similar to prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle (20)

PDF
POUG Meetup 1st MArch 2019 - utPLSQL v3 - Testing Framework for PL/SQL
Jacek Gebal
 
PDF
Bgoug 2019.11 test your pl sql - not your patience
Jacek Gebal
 
PDF
PL/SQL unit testing with Ruby
Raimonds Simanovskis
 
PDF
Agile db testing_techniques
Tarik Essawi
 
PPTX
ITAG Excellence Awards 2017 - utPLSQL v3
Jacek Gebal
 
PDF
Database development unit test with tSQLt
Sergio Govoni
 
PPTX
Database Unit Testing Made Easy with VSTS
Sanil Mhatre
 
PDF
Pl sql office hours data setup and teardown in database testing
DeeptiBandari
 
PPTX
Test your PL/SQL with utPLSQL
Daniel Overby Hansen
 
PPT
A testing framework for Microsoft SQL-Server
elliando dias
 
PDF
utplsql.pdf
vijayv991893
 
PDF
Test Driven Development with Sql Server
David P. Moore
 
PPT
xUnit Style Database Testing
Chris Oldwood
 
PPTX
Get Testing with tSQLt - SQL In The City Workshop 2014
Red Gate Software
 
PDF
PL/SQL Unit Testing Can Be Fun
Raimonds Simanovskis
 
PPT
Automated Unit Testing
Simon Boorsma
 
PPTX
The Road to U-SQL: Experiences in Language Design (SQL Konferenz 2017 Keynote)
Michael Rys
 
PDF
PL/SQL Unit Testing Can Be Fun!
Raimonds Simanovskis
 
PPTX
Test Driven Database Development With Data Dude
Cory Foy
 
PPTX
#DOAW16 - DevOps@work Roma 2016 - Testing your databases
Alessandro Alpi
 
POUG Meetup 1st MArch 2019 - utPLSQL v3 - Testing Framework for PL/SQL
Jacek Gebal
 
Bgoug 2019.11 test your pl sql - not your patience
Jacek Gebal
 
PL/SQL unit testing with Ruby
Raimonds Simanovskis
 
Agile db testing_techniques
Tarik Essawi
 
ITAG Excellence Awards 2017 - utPLSQL v3
Jacek Gebal
 
Database development unit test with tSQLt
Sergio Govoni
 
Database Unit Testing Made Easy with VSTS
Sanil Mhatre
 
Pl sql office hours data setup and teardown in database testing
DeeptiBandari
 
Test your PL/SQL with utPLSQL
Daniel Overby Hansen
 
A testing framework for Microsoft SQL-Server
elliando dias
 
utplsql.pdf
vijayv991893
 
Test Driven Development with Sql Server
David P. Moore
 
xUnit Style Database Testing
Chris Oldwood
 
Get Testing with tSQLt - SQL In The City Workshop 2014
Red Gate Software
 
PL/SQL Unit Testing Can Be Fun
Raimonds Simanovskis
 
Automated Unit Testing
Simon Boorsma
 
The Road to U-SQL: Experiences in Language Design (SQL Konferenz 2017 Keynote)
Michael Rys
 
PL/SQL Unit Testing Can Be Fun!
Raimonds Simanovskis
 
Test Driven Database Development With Data Dude
Cory Foy
 
#DOAW16 - DevOps@work Roma 2016 - Testing your databases
Alessandro Alpi
 
Ad

Recently uploaded (20)

PPTX
Threat Modeling a Batch Job Framework - Teri Radichel - AWS re:Inforce 2025
2nd Sight Lab
 
PDF
The Rise of Sustainable Mobile App Solutions by New York Development Firms
ostechnologies16
 
PDF
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
PDF
Alur Perkembangan Software dan Jaringan Komputer
ssuser754303
 
PPTX
declaration of Variables and constants.pptx
meemee7378
 
PDF
Best Software Development at Best Prices
softechies7
 
DOCX
Best AI-Powered Wearable Tech for Remote Health Monitoring in 2025
SEOLIFT - SEO Company London
 
PDF
OpenChain Webinar - AboutCode - Practical Compliance in One Stack – Licensing...
Shane Coughlan
 
PDF
Azure AI Foundry: The AI app and agent factory
Maxim Salnikov
 
PDF
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
PDF
TEASMA: A Practical Methodology for Test Adequacy Assessment of Deep Neural N...
Lionel Briand
 
PDF
Humans vs AI Call Agents - Qcall.ai's Special Report
Udit Goenka
 
PDF
AWS Consulting Services: Empowering Digital Transformation with Nlineaxis
Nlineaxis IT Solutions Pvt Ltd
 
PDF
Code Once; Run Everywhere - A Beginner’s Journey with React Native
Hasitha Walpola
 
PPTX
Avast Premium Security crack 25.5.6162 + License Key 2025
HyperPc soft
 
PPTX
Iobit Driver Booster Pro 12 Crack Free Download
chaudhryakashoo065
 
PPTX
IDM Crack with Internet Download Manager 6.42 [Latest 2025]
HyperPc soft
 
PDF
From Data Preparation to Inference: How Alluxio Speeds Up AI
Alluxio, Inc.
 
PPTX
IObit Driver Booster Pro Crack Download Latest Version
chaudhryakashoo065
 
PDF
Automated Testing and Safety Analysis of Deep Neural Networks
Lionel Briand
 
Threat Modeling a Batch Job Framework - Teri Radichel - AWS re:Inforce 2025
2nd Sight Lab
 
The Rise of Sustainable Mobile App Solutions by New York Development Firms
ostechnologies16
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
Alur Perkembangan Software dan Jaringan Komputer
ssuser754303
 
declaration of Variables and constants.pptx
meemee7378
 
Best Software Development at Best Prices
softechies7
 
Best AI-Powered Wearable Tech for Remote Health Monitoring in 2025
SEOLIFT - SEO Company London
 
OpenChain Webinar - AboutCode - Practical Compliance in One Stack – Licensing...
Shane Coughlan
 
Azure AI Foundry: The AI app and agent factory
Maxim Salnikov
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
TEASMA: A Practical Methodology for Test Adequacy Assessment of Deep Neural N...
Lionel Briand
 
Humans vs AI Call Agents - Qcall.ai's Special Report
Udit Goenka
 
AWS Consulting Services: Empowering Digital Transformation with Nlineaxis
Nlineaxis IT Solutions Pvt Ltd
 
Code Once; Run Everywhere - A Beginner’s Journey with React Native
Hasitha Walpola
 
Avast Premium Security crack 25.5.6162 + License Key 2025
HyperPc soft
 
Iobit Driver Booster Pro 12 Crack Free Download
chaudhryakashoo065
 
IDM Crack with Internet Download Manager 6.42 [Latest 2025]
HyperPc soft
 
From Data Preparation to Inference: How Alluxio Speeds Up AI
Alluxio, Inc.
 
IObit Driver Booster Pro Crack Download Latest Version
chaudhryakashoo065
 
Automated Testing and Safety Analysis of Deep Neural Networks
Lionel Briand
 
Ad

prohuddle-utPLSQL v3 - Ultimate unit testing framework for Oracle

  • 1. utPLSQL v3 Ultimate Unit Testing framework for Oracle Jacek Gębal twitter: @GebalJacek mail: [email protected] blog: oraclethoughts.com Principal Data Engineer Developer @Fidelity Investments - Ireland co-author of: utPLSQL v3
  • 2. Plan ● Oracle Database testing tools ● utPLSQL v3 ● Rules of unit testing ● Test Driven Development with utPLSQL ● Testing data ● Test run options ● Suites ● utPLSQL - SQL Developer extension ● utPLSQL-cli - running tests from command line ● CI/CD integration
  • 5. The team ● Jacek Gębal ● Pavel Kaplya ● Robert Love ● David Pyke ● Vinicius Avellar ● Samuel Nitsche ● Philipp Salvisberg
  • 6. Why utPLSQL v3 ? ● free ● open source ● pure PL/SQL ● Tested on 11gR2 - 12cR2 ● IDE independent ● database independent ● CI/CD oriented ● modular and extendable
  • 7. Properties of Unit Tests ● Fast ● Isolated ● Repeatable ● Self-verifying ● Thorough & Timely https://github.com/.../F.I.R.S.T-Principles-of-Unit-Testing https://pragprog.com/.../2012-01/unit-tests-are-first
  • 8. The Unit Test also needs to be ● Simple ● Automated ● Testing one behavior ● Living documentation ● Developer’s responsibility
  • 9. Delivering software that is: ● Safe to change ● Maintainable ● Can be tested and delivered iteratively Why should I care ?
  • 10. What to test in database ? ● Behavior ○ Logic ○ in / out structure ○ State (?) ● Avoid ○ under-testing ○ over-testing ○ meaningless tests ○ flaky tests ○ aiming for metrics (coverage/test count)
  • 11. Test Driven Development ● write a test ● make it fail ● keep it simple ● tests are examples ● tests become documentation ● get to green fast ● take baby steps ● stuck? undo and start over ● write only enough code to pass the test ● remove duplication (in code and tests) ● rename and clean up ● run tests and stay green ● change implementation, not behavior ● improve structure in small steps RED GREEN REFACTOR With TDD you get: ● Fast feedback loop ● Visible progress ● Code is tested before it exists ● Accomplishment with every new test
  • 12. Test Driven Development with utPLSQL v3 ● suite structure ● annotations ● expectation syntax ● running tests ● failure and error messages
  • 13. demo
  • 14. Summary Annotation syntax: --%name( parameter[s] ) Example: --%suite(description) --%test(description) Expectation examples: ut.expect( 1 ).to_( equal( 1 ) ); ut.expect( ‘Chuck’ ).to_equal( ‘Chuck’ ); Running tests: exec ut.run();
  • 15. Annotations Package: ● --%suite(<description>) ● --%suitepath(<path>) ● --%rollback(auto/manual) ● --%disabled Test procedure: ● --%test(<description>) ● --%throws(<error_No>[,...]) ● --%beforetest(<proc_name>) ● --%aftertest(<proc_name>) ● --%rollback(auto/manual) ● --%disabled Procedure: ● --%beforeall, --%afterall ● --%beforeeach, --%aftereach
  • 16. Expectations & matchers ● be_null ● be_true ● be_greater_than( expected ) ● be_less_than( expected ) ● equal( expected ) ● be_like( mask [, escape_char] ) ut.expect( actual ).to_( matcher(param[, param...]) ); ut.expect( actual ).not_to( matcher(param[, param...]) ); ● be_not_null ● be_false ● be_greater_or_equal( expected ) ● be_less_or_equal( expected ) ● be_between( lower, upper ) ● match( pattern [, modifiers] ) ● be_empty ● have_count( count ) Matchers:
  • 17. Equality rules in tests ut.expect( 100 ).to_equal( ‘100’ ); ut.expect( ‘abcdef’ ).to_equal( to_clob( ‘abcdef’ ) ); ut.expect( systimestamp ).to_equal( current_timestamp ); ut.expect( sysdate ).to_equal( ‘20-MAR-2018’ ); When it comes to unit testing ... Data types matter!
  • 18. Supported data-types ● clob, blob ● timestamp (with (local) timezone) ● interval (day to second / year to month) ● cursor ● object, nested table, varray type ● number (integer) ● varchar2 (char / varchar) ● date ● boolean
  • 19. Testing data ● data setup / cleanup ● cursor data comparison ● automatic rollback ● selective comparison
  • 20. demo
  • 21. --%suite(Demo suite) --%beforeall procedure data_setup_before_all; --%beforeeach procedure thing_to_do_before_each_test; --%test(Does a thing) procedure test_the_thing; --%test(Does stuff) --%beforetest(setup_before_stuff) --%aftertest(cleanup_after_stuff) procedure test_stuff; procedure setup_before_stuff; procedure cleanup_after_stuff; --%afterall procedure cleanup_after_all_is_done; data_setup_before_all thing_to_do_before_each_test test_the_thing thing_to_do_before_each_test setup_before_stuff test_stuff cleanup_after_stuff cleanup_after_all_is_done savepoint before_suite Order of execution savepoint before_test rollback to before_suite rollback to before_test savepoint before_test rollback to before_test & test isolation
  • 22. Organizing tests ● suites hierarchy with suitepath ● parent, siblings, ancestors ● shared beforeall / afterall ● suites isolation / setup scope
  • 23. demo
  • 24. package test_add_room_content as --%suite(Add content to a room) --%suitepath(org.utplsql.demo.test_rooms) package test_remove_rooms_by_name as --%suite(Remove rooms by name) --%suitepath(org.utplsql.demo.test_rooms) package test_rooms as --%suite --%suitepath(org.utplsql.demo) package test_betwnstr as --%suite(description) savepoint rollback to savepoint Suite hierarchy test run utplsql test_betwnstr test_rooms test_add_room_content test_remove_rooms_by_name org demo savepoint rollback to savepoint savepoint rollback to savepoint
  • 25. Test run options ● default options ● single schema ● single package ● single test ● suite ● multiple schema ● specifying reporter
  • 26. demo
  • 27. utPLSQL - SQL Developer extension
  • 28. demo
  • 29. utplsql-cli ● Windows/Linux/Mac ● real-time reporting ● multi-reporting ● Oracle client independent ● CI/CD oriented
  • 30. demo
  • 31. Integration ● CI/CD servers ○ Jenkins ○ TeamCity ○ Travis ○ other... ● Sonar ○ generic test results ○ code coverage ● Coveralls ○ code coverage
  • 32. demo
  • 33. utPLSQL v3 recap ● free, open-source, pure PL/SQL ● annotations ● human readable syntax ● data type - aware comparison ● automatic test isolation ● rich selection of matchers ● supports cursors, object types, nested tables ● CI/CD oriented ● code coverage
  • 34. Resources Cheat-sheet: https://www.cheatography.com/jgebal/cheat-sheets/utplsql-v3/ Documentation: http://utplsql.org/utPLSQL/ Source code: https://github.com/utPLSQL/utPLSQL Releases: https://github.com/utPLSQL/utPLSQL/releases utPLSQL-cli: https://github.com/utPLSQL/utPLSQL-cli/releases SQLDeveloper-extension: https://github.com/utPLSQL/utPLSQL-SQLDeveloper/releases Twitter: @utplsql Demo project: https://github.com/utPLSQL/utPLSQL-demo-project Sonar results: https://sonarcloud.io/dashboard?id=utPLSQL Coveralls results: https://coveralls.io/github/utPLSQL/utPLSQL Travis-CI builds: https://travis-ci.org/utPLSQL/utPLSQL