1. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Testes unit´rios no PostgreSQL com pgTAP
a
Dickson S. Guedes
guedes@guedesoft.net
PGDay S˜o Paulo, 2009
a
24 de abril de 2009
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
2. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Uma vis˜o geral...
a
Introdu¸˜o
ca
Compreendendo os ambientes
Compreendendo os resultados inesperados
Supostas alternativas
Qualidade de Software
Conceitos b´sicos
a
Compreendendo os testes
O papel do DBA
Test Anything Protocol
Compreendendo o TAP
Compreendendo o pgTAP
M˜o na massa
a
Preparando o ambiente
Entendendo os scripts
Entendendo os tipos de testes
Executando um script
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
3. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo os ambientes
Por onde come¸amos?
c
Laborat´rio
o
Desenvolvimento
Teste
Homologa¸˜o
ca
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
4. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo os ambientes
Por onde come¸amos?
c
Laborat´rio
o
Desenvolvimento
Teste
Homologa¸˜o
ca
Produ¸˜o
ca
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
5. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo os resultados inesperados
O tempo passa... o tempo voa...
e o software vai sofrendo altera¸oes...
c˜
”Mas antes funcionava!”
”Isso piorou!”
”Eu n˜o fiz nada, foi essa mudan¸a a´
a c ı!”
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
6. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Supostas alternativas
Op¸oes
c˜
Ignorar, fingir que n˜o ´ com vocˆ;
a e e
Melhorar a infra-estrutura de suporte;
Utilizar o efeito placebo;
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
7. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Supostas alternativas
Op¸oes
c˜
Ignorar, fingir que n˜o ´ com vocˆ;
a e e
Melhorar a infra-estrutura de suporte;
Utilizar o efeito placebo;
Melhorar a qualidade do software!
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
8. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Conceitos b´sicos
a
Qualidade de Software
O que ´?
e
Por que?
Quem precisa?
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
9. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo os testes
Teste Unit´rio?
a
O que ´?
e
Por que?
Quem precisa?
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
10. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo os testes
Quem precisa estar envolvido?
Analistas de Neg´cio
o
Analistas de Sistemas
Desenvolvedores
Testadores
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
11. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo os testes
Quem precisa estar envolvido?
Analistas de Neg´cio
o
Analistas de Sistemas
Desenvolvedores
Testadores
DBA
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
12. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
O papel do DBA
Qual o papel do DBA?
Manter os ambientes versionados
Testar as mudan¸as
c
Validar
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
13. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
O papel do DBA
Evite perder...
tempo...
paciˆncia...
e
cabelos...
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
14. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo o TAP
TAP
Protocolo de Teste de Qualquer coisa
O que ´?
e
Por quˆ?
e
Quem usa?
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
15. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Compreendendo o pgTAP
Como o pgTAP pode ajudar?
auxiliando nos testes de regress˜o
a
Testar Estrutura
tabelas, campos, restri¸˜es, vis˜es
co o
Testar Dados
valida¸˜es de CPF, tipos de dados financeiros...
co
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
16. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Preparando o ambiente
Obtendo o pgTAP
Baixe e descompacte
http://pgtap.projects.postgresql.org/
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
17. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Preparando o ambiente
Obtendo o pgTAP
Baixe e descompacte
http://pgtap.projects.postgresql.org/
Instalar via make
make USE PGXS=1
make install USE PGXS=1
make installcheck
USE PGXS=1
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
18. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Preparando o ambiente
Obtendo o pgTAP
Baixe e descompacte
http://pgtap.projects.postgresql.org/
Instalar via make Instalar via gmake
make USE PGXS=1 gmake USE PGXS=1
make install USE PGXS=1 gmake install USE PGXS=1
make installcheck gmake installcheck
USE PGXS=1 USE PGXS=1
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
19. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Preparando o ambiente
Preparando o pgTAP
Variaveis que ajudam
$PGDATABASE
$PGHOST
$PGPORT
$PGUSER
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
20. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Preparando o ambiente
Preparando o pgTAP
Variaveis que ajudam
$PGDATABASE
$PGHOST
$PGPORT
$PGUSER
Exemplo
export PGDATABASE=testedb
export PGHOST=dbteste.srv.intranet
export PGPORT=5433
export PGUSER=teste
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
21. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Preparando o ambiente
Gerenciando o pacote pgTAP
Diretamente no banco de dados
psql -f pgtap.sql
psql -f uninstall pgtap.sql
Diretamente no banco template
psql -d template1 -f pgtap.sql
psql -d template1 -f uninstall pgtap.sql
Sem altera¸˜es no banco
co
Neste caso utilizamos o pgtap apenas dentro de uma transa¸˜o,
ca
sem inserir as fun¸˜es no banco.
co
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
22. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os scripts
Anatomia de um script de teste
O pseudo-c´digo
o
Configurar silenciamento
Configurar formata¸˜o da saida
ca
Configurar rever¸˜o das mudan¸as em caso de falhas
ca c
BEGIN
Carregar as fun¸˜es do pgTAP (se necess´rio)
co a
Planejar os testes
Executar os testes
Finalizar e limpar
ROLLBACK
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
23. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os scripts
Anatomia de um script de teste
O cabe¸alho do script
c
-- Configura silenciamento
set ECHO
set QUIET 1
-- Configura formata¸~o de saida
ca
pset format unaligned
pset tuples_only true
pset pager
-- Configura recer¸~o das mudan¸as em caso de falhas
ca c
set ON_ERROR_ROLLBACK 1
set ON_ERROR_STOP true
set QUIET 1
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
24. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os scripts
Anatomia de um script de teste
O corpo do script
BEGIN;
i pgtap.sql -- Carrega as fun¸~es do pgTAP
co
-- Planeja os testes
SELECT plan(1);
-- Executa os testes
SELECT pass( ’Passei no teste!’ );
-- Finaliza e limpa
SELECT * FROM finish();
ROLLBACK;
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
25. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os scripts
Executando o teste
Via psql
Exemplo de um teste individual
$ psql -Xf teste.sql
1..1
ok 1 - Passei no teste!
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
26. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os scripts
Executando o teste
Via pg prove
Exemplo de um conjunto de testes
$ pg_prove testes/*.sql
sql/coltap.....ok
sql/hastap.....ok
sql/moretap....ok
sql/pktap......ok
All tests successful.
Files=4, Tests=216, 1 wallclock secs
( 0.06 usr 0.02 sys +
0.08 cusr 0.07 csys = 0.23 CPU)
Result: PASS
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
27. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os tipos de testes
Tipos de testes
OK? N˜o OK?
a
ok( boolean, descricao )
is( elemento, elemento, descricao )
isnt( elemento, elemento, descricao )
matches( elemento, regex, descricao )
imatch( anyelement, regex, description )
doesnt match( anyelement, regex, description )
doesnt imatch( anyelement, regex, description )
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
28. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os tipos de testes
Tipos de testes
Errar ´ umano
e
throws ok( consulta, errcode, errmsg, descricao )
lives ok( query, description )
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
29. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os tipos de testes
Tipos de testes
O esquema est´ certinho?
a
has tablespace( tablespace, location, description )
hasnt tablespace( tablespace, tablespace, description )
has schema( schema, description )
hasnt schema( schema, schema, description )
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
30. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os tipos de testes
Tipos de testes
Os objetos existem?
has table( schema, table, description )
hasnt table( schema, table, description )
has view( schema, view, description )
hasnt view( schema, view, description )
has sequence( schema, sequence, description )
hasnt sequence( schema, sequence, description )
has index( schema, table, index, columns[], description )
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
31. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os tipos de testes
Tipos de testes
E a estrutura das tabelas?
has column( schema, table, column, description )
col not null( schema, table, column, description )
col is null( schema, table, column, description )
col has default( schema, table, column, description )
col default is( schema, table, column, default, description )
col type is( schema, table, column, type, description )
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
32. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Entendendo os tipos de testes
Tipos de testes
N˜o podemos esquecer das restri¸oes...
a c˜
has pk( schema, table, description )
has fk( schema, table, description )
col is pk( schema, table, column[], description )
col is fk( schema, table, column[], description )
fk ok( fk schema, fk table, fk column[], pk schema, pk table,
pk column[], description )
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
33. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Lista de rela¸~es
co
Esquema | Nome | Tipo | Dono
------------+-------------+--------+----------
aplicativo | cargo | tabela | postgres
aplicativo | funcionario | tabela | postgres
aplicativo | pessoa | tabela | postgres
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
34. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco homologacao
Lista de rela¸~es
co
Esquema | Nome | Tipo | Dono
------------+-------------+--------+----------
aplicativo | cargo | tabela | postgres
aplicativo | pessoa | tabela | postgres
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
35. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Tabela "aplicativo.cargo"
Coluna | Tipo | Modificadores
-----------+-----------------------+---------------
sigla | character varying(10) | not null
descricao | character varying(20) | not null
salario | numeric(17,2) |
´ndices:
I
"cargo_pkey" PRIMARY KEY, btree (sigla)
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
36. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco homologacao
Tabela "aplicativo.cargo"
Coluna | Tipo | Modificadores
-----------+-----------------------+---------------
sigla | character varying(10) | not null
descricao | character varying(20) | not null
salario | numeric(12,2) |
´ndices:
I
"cargo_pkey" PRIMARY KEY, btree (sigla)
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
37. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Tabela "aplicativo.funcionario"
Coluna | Tipo | Modificadores
-------------+-----------------------+---------------
cpf | numeric(14,0) | not null
sigla_cargo | character varying(10) | not null
´ndices:
I
"pk_funcionario" PRIMARY KEY, btree (cpf, sigla_cargo)
Restri¸~es de chave estrangeira:
co
"funcionario_cpf_fkey" FOREIGN KEY (cpf)
REFERENCES pessoa(cpf)
"funcionario_sigla_cargo_fkey" FOREIGN KEY (sigla_cargo)
REFERENCES cargo(sigla)
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
38. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco homologacao
N˜o existe tabela ”funcionario”...
a
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
39. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
40. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
41. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
42. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a
43. Introdu¸˜o
ca Qualidade de Software Test Anything Protocol M˜o na massa
a
Executando um script
Um exemplo
a estrutura dos bancos
Banco teste
Testes unit´rios no PostgreSQL com pgTAP
a PGDay S˜o Paulo, 2009
a