utPLSQL, czyli testujemy zmiany

Wprowadzając zmiany w kodzie, możemy poczuć się zestresowani. Czy moja zmiana zadziała? Czy nie popsuje innych funkcjonalności? Dlatego po wprowadzeniu poprawek testujemy nasze zmiany. W większości projektów informatycznych testy nowych funkcjonalności są robione automatycznie. Dlaczego więc, w dużej części projektów w PL/SQLu są pomijane? A jeśli już są, jest to na ogół ręczny i żmudny proces. Co, jeśli powiem Ci, że można to zautomatyzować w prosty sposób?

Z pomocą przychodzi biblioteka utPLSQL. Jest to framework do tworzenia testów w języku PL/SQL. Poniżej zaprezentuję, w jaki sposób możemy dodać takie testy do projektu. W jednym z poprzednich artykułów przedstawiłem, w jaki sposób można uruchomić bazę danych w kontenerze Dockera. Rozszerzymy to teraz o utPLSQL.

Pierwszym krokiem, który należy wykonać, jest pobranie najnowszej wersji biblioteki ze strony projektu. Po rozpakowaniu interesuje nas zawartość folderu source.  Należy ją rozpakować do katalogu, w którym przechowujemy plik docker-compose. Struktura powinna wyglądać w następujący sposób.


├── docker-compose.yml
├── README.md
├── utplsql
│   └── source
│       ├── api
│       ├── check_object_grants.sql
│       ├── check_sys_grants.sql
│       ├── core
│       ├── create_grants.sql
│       ├── create_synonyms_and_grants_for_public.sql
│       ├── create_synonyms.sql
│       ├── create_user_grants.sql
│       ├── create_user_synonyms.sql
│       ├── create_utplsql_owner.sql
│       ├── define_ut3_owner_param.sql
│       ├── dummy.sql
│       ├── expectations
│       ├── install_above_12_1.sql
│       ├── install_component.sql
│       ├── install_ddl_trigger.sql
│       ├── install_headless.sql
│       ├── install_headless_with_trigger.sql
│       ├── install.sql
│       ├── reporters
└── var.env

Po poprawnym uruchomieniu kontenera należy zainstalować pakiet utPLSQL na bazie danych. W tym celu najpierw mapujemy folder utplsql tak, aby był dostępny z poziomu kontenera. Użyjemy do tego opcji volumes. Kolejnym krokiem będzie instalacja pakietu, przy użyciu instrukcji dostępnych w dokumentacji. Poniżej przedstawiam cały listing.

 ls
docker-compose.yml  README.md  utplsql  var.env

# podglad na użytą konfigurację
 nano docker-compose.yml 
version: "3.3"

services:
  oraclelocal:
    container_name: oraclelocal
    image: container-registry.oracle.com/database/standard
    ports:
      - "1527:1521"
      - "5507:5500"
    volumes:
      - ./utplsql/source:/opt/oracle/utplsql:rw
    shm_size: 8g

# sprawdzenie, czy wszystko odpowiednio zmapowało się w kontenerze
 docker exec -it oraclelocal /bin/bash
 [root@020271ee9447 /]# ls /opt/oracle/utplsql/
api                                        create_utplsql_owner.sql    install_headless_with_trigger.sql
check_object_grants.sql                    define_ut3_owner_param.sql  reporters
check_sys_grants.sql                       dummy.sql                   set_install_params.sql
core                                       expectations                uninstall.sql
create_grants.sql                          install.sql                 uninstall_all.sql
create_synonyms.sql                        install_above_12_1.sql      uninstall_coverage_tables.sql
create_synonyms_and_grants_for_public.sql  install_component.sql       uninstall_objects.sql
create_user_grants.sql                     install_ddl_trigger.sql     uninstall_synonyms.sql
create_user_synonyms.sql                   install_headless.sql

# instalacja frameworka 
 [root@020271ee9447 utplsql]# /u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus sys/Oracle@PDB1 as sysdba @install_headless_with_trigger.sql

Po wykonaniu powyższych komend powinniśmy mieć zainstalowany framework utPLSQL na bazie danych. Żeby to zweryfikować, możemy uruchomić testy. Oczywiście, nie stworzyliśmy aktualnie żadnego testu, jednak możemy sprawdzić działanie i potwierdzić poprawność instalacji.

 [root@70e5c878b2f6 utplsql]# /u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus ut3/XNtxj8eEgA6X6b6f@PDB1
SQL*Plus: Release 12.1.0.2.0 Production on Sat Aug 6 15:09:20 2022

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

SQL> begin ut.run(); end;  
  2  /

PL/SQL procedure successfully completed.

Jak widać na powyższym przykładzie, wszystko zostało zainstalowane poprawnie. Możemy skupić się na utworzeniu przykładowych testów dla istniejących już funkcjonalności.  Przedstawiony do tej pory zestaw narzędzi umożliwia nam powtarzalne instalowanie naszego kodu na lokalnej bazie danych oraz jego testowanie. Jeśli potrzebujemy posiadać pełny backup możemy go również wczytać za pomocą narzędzia IMPDP.  Dzięki takiej konfiguracji zapewniamy możliwość szybszej i wygodniejszej pracy pojedynczemu programiście. Kolejnym krokiem będzie spięcie całego procesu poprzez użycie jednego z rozwiązań do Continuous Integration.

Cały kod możecie dostępny jest w moim repozytorium na Githubie. Jest tam również pełna konfiguracja, dzięki czemu bezpośrednio po ściągnięciu można przetestować rozwiązanie.

 

Możesz również polubić…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *