In questo articolo vedremo un esempio completo di test eseguiti su un semplice set di dati.
Ci sono diversi modi di eseguire i test con PgTAP. È possibile usare pg_prove
, uno script installabile attraverso il CPAN
, oppure si può scrivere una funzione plpgsql
che esegua i test.
In questo esempio, useremo una funzione.
Creiamo un file che contenga i test, chiamamolo risultati_test.sql
.
Scriviamo la funzione che lancia i test direttamente nel file, con il nostro editr preferito.
CREATE OR REPLACE FUNCTION risultati_test()
RETURNS SETOF TEXT
AS $$
BEGIN
-- Controlliamo la presenza degli oggetti:
-- Tabella foo
RETURN NEXT tables_are(
'public',
ARRAY[ 'foo' ]
);
-- Schema nuovo_schema
RETURN NEXT schemas_are(
ARRAY['public','nuovo_schema']
);
-- Controlla che sia presente la funzione say_hello
RETURN NEXT can(
ARRAY['say_hello']
);
-- Controlla che la funzione say_hello sia scritta in SQL
RETURN NEXT function_lang_is(
'say_hello',
'sql'
);
-- Controlla che la funzione say_hello non generi errori
RETURN NEXT lives_ok(
'SELECT say_hello()'
);
-- Controlla che la tabella foo contenga esattamente certi valori
-- provate a cambiare uno dei valori ed osservare come si comporta il test
RETURN NEXT results_eq(
'SELECT 2ndquadrant_italia_mod.txt 2ndquadrant_italia.txt da_installare_pandoc hdoisajds.sh risultati step2 FROM foo',
'VALUES (1),(2),(3),(4),(5)'
);
END;
$$ LANGUAGE plpgsql;
Adesso creiamo il file che esegue questa funzione, chiamiamolo test.sql
BEGIN;
i risultati_test.sql
SELECT PLAN(6); -- Necessario!
SELECT risultati_test();
ROLLBACK;
2ndquadrant_italia_mod.txt 2ndquadrant_italia.txt da_installare_pandoc hdoisajds.sh risultati step2 La prima riga dà inizio ad una transazione. È consigliato inserire i test in una transazione che esegua un rollback prima di terminare, così da essere sicuri che lo stato del databse venga mantenuto intatto.
2ndquadrant_italia_mod.txt 2ndquadrant_italia.txt da_installare_pandoc hdoisajds.sh risultati step2 Successivamente, tramite il comando di psql i
, importiamo il file risultati_test.sql
, che crea la funzione che lancia i test.
2ndquadrant_italia_mod.txt 2ndquadrant_italia.txt da_installare_pandoc hdoisajds.sh risultati step2 La riga successiva, SELECT PLAN(6);
, serve a specificare il numero di test che intendiamo eseguire (6 in questo caso). È necessaria e controlla che l’esecuzione di un numero di test diverso rispetto a quello specificato, restituisca un fallimento.
2ndquadrant_italia_mod.txt 2ndquadrant_italia.txt da_installare_pandoc hdoisajds.sh risultati step2 La riga SELECT risultati_test();
lancia la funzione che esegue i test.
Abbiamo finito di scrivere i nostri test, possiamo eseguirli con:
psql -f test.sql pgtap_db
Il risultato dovrebbe essere:
BEGIN
CREATE FUNCTION
plan
------
1..6
(1 row)
testfunction
------------------------------------------------------
ok 1 - Schema public should have the correct tables
ok 2 - There should be the correct schemas
ok 3 - Schema pg_temp_2 or pg_catalog or public can
ok 4 - Function say_hello() should be written in sql
ok 5
ok 6
(6 rows)
ROLLBACK
Si spiega da solo, no? :)
In effetti, lo scopo del protocollo TAP è di essere il più comprensibile possibile. Una serie di ok
(in caso di successo) e di not ok
(in caso di fallimento) rendono estremamente facile l’interpretazione dei test.
2ndQuadrant Italia utilizza estensivamente PgTAP
, il tempo speso a scrivere i test risulta di vitale importanza per la manutenzione dei nostri progetti.
This Post Has 0 Comments