testes unitarios no postgresql com pgtap
DESCRIPTION
Palestra ministrada no PGDay SP em Abril de 2009.TRANSCRIPT
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Testes unitarios no PostgreSQL com pgTAP
Dickson S. [email protected]
PGDay Sao Paulo, 2009
24 de abril de 2009
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Uma visao geral...Introducao
Compreendendo os ambientesCompreendendo os resultados inesperadosSupostas alternativas
Qualidade de SoftwareConceitos basicosCompreendendo os testesO papel do DBA
Test Anything ProtocolCompreendendo o TAPCompreendendo o pgTAP
Mao na massaPreparando o ambienteEntendendo os scriptsEntendendo os tipos de testesExecutando um script
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo os ambientes
Por onde comecamos?
I Laboratorio
I Desenvolvimento
I Teste
I Homologacao
I Producao
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo os ambientes
Por onde comecamos?
I Laboratorio
I Desenvolvimento
I Teste
I Homologacao
I Producao
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo os resultados inesperados
O tempo passa... o tempo voa...e o software vai sofrendo alteracoes...
I ”Mas antes funcionava!”
I ”Isso piorou!”
I ”Eu nao fiz nada, foi essa mudanca aı!”
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Supostas alternativas
Opcoes
I Ignorar, fingir que nao e com voce;
I Melhorar a infra-estrutura de suporte;
I Utilizar o efeito placebo;
I Melhorar a qualidade do software!
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Supostas alternativas
Opcoes
I Ignorar, fingir que nao e com voce;
I Melhorar a infra-estrutura de suporte;
I Utilizar o efeito placebo;
I Melhorar a qualidade do software!
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Conceitos basicos
Qualidade de Software
I O que e?
I Por que?
I Quem precisa?
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo os testes
Teste Unitario?
I O que e?
I Por que?
I Quem precisa?
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo os testes
Quem precisa estar envolvido?
I Analistas de Negocio
I Analistas de Sistemas
I Desenvolvedores
I Testadores
I DBA
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo os testes
Quem precisa estar envolvido?
I Analistas de Negocio
I Analistas de Sistemas
I Desenvolvedores
I Testadores
I DBA
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
O papel do DBA
Qual o papel do DBA?
I Manter os ambientes versionados
I Testar as mudancas
I Validar
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
O papel do DBA
Evite perder...
I tempo...
I paciencia...
I cabelos...
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo o TAP
TAPProtocolo de Teste de Qualquer coisa
I O que e?
I Por que?
I Quem usa?
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Compreendendo o pgTAP
Como o pgTAP pode ajudar?auxiliando nos testes de regressao
I Testar EstruturaI tabelas, campos, restricoes, visoes
I Testar DadosI validacoes de CPF, tipos de dados financeiros...
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Preparando o ambiente
Obtendo o pgTAP
Baixe e descompacte
http://pgtap.projects.postgresql.org/
Instalar via makemake USE PGXS=1make install USE PGXS=1make installcheckUSE PGXS=1
Instalar via gmake
gmake USE PGXS=1gmake install USE PGXS=1gmake installcheckUSE PGXS=1
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Preparando o ambiente
Obtendo o pgTAP
Baixe e descompacte
http://pgtap.projects.postgresql.org/
Instalar via makemake USE PGXS=1make install USE PGXS=1make installcheckUSE PGXS=1
Instalar via gmake
gmake USE PGXS=1gmake install USE PGXS=1gmake installcheckUSE PGXS=1
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Preparando o ambiente
Obtendo o pgTAP
Baixe e descompacte
http://pgtap.projects.postgresql.org/
Instalar via makemake USE PGXS=1make install USE PGXS=1make installcheckUSE PGXS=1
Instalar via gmake
gmake USE PGXS=1gmake install USE PGXS=1gmake installcheckUSE PGXS=1
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Preparando o ambiente
Preparando o pgTAP
Variaveis que ajudam
$PGDATABASE$PGHOST$PGPORT$PGUSER
Exemplo
export PGDATABASE=testedbexport PGHOST=dbteste.srv.intranetexport PGPORT=5433export PGUSER=teste
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Preparando o ambiente
Preparando o pgTAP
Variaveis que ajudam
$PGDATABASE$PGHOST$PGPORT$PGUSER
Exemplo
export PGDATABASE=testedbexport PGHOST=dbteste.srv.intranetexport PGPORT=5433export PGUSER=teste
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Preparando o ambiente
Gerenciando o pacote pgTAP
Diretamente no banco de dadospsql -f pgtap.sqlpsql -f uninstall pgtap.sql
Diretamente no banco template
psql -d template1 -f pgtap.sqlpsql -d template1 -f uninstall pgtap.sql
Sem alteracoes no banco
Neste caso utilizamos o pgtap apenas dentro de uma transacao,sem inserir as funcoes no banco.
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os scripts
Anatomia de um script de testeO pseudo-codigo
I Configurar silenciamento
I Configurar formatacao da saida
I Configurar revercao das mudancas em caso de falhasI BEGIN
I Carregar as funcoes do pgTAP (se necessario)I Planejar os testesI Executar os testesI Finalizar e limpar
I ROLLBACK
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os scripts
Anatomia de um script de testeO cabecalho do script
-- Configura silenciamento\set ECHO\set QUIET 1
-- Configura formatac~ao de saida\pset format unaligned\pset tuples_only true\pset pager
-- Configura recerc~ao das mudancas em caso de falhas\set ON_ERROR_ROLLBACK 1\set ON_ERROR_STOP true\set QUIET 1
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os scripts
Anatomia de um script de testeO corpo do script
BEGIN;\i pgtap.sql -- Carrega as func~oes do pgTAP
-- Planeja os testesSELECT plan(1);
-- Executa os testesSELECT pass( ’Passei no teste!’ );
-- Finaliza e limpaSELECT * FROM finish();
ROLLBACK;
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os scripts
Executando o testeVia psql
Exemplo de um teste individual
$ psql -Xf teste.sql1..1ok 1 - Passei no teste!
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os scripts
Executando o testeVia pg prove
Exemplo de um conjunto de testes
$ pg_prove testes/*.sqlsql/coltap.....oksql/hastap.....oksql/moretap....oksql/pktap......okAll 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 unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os tipos de testes
Tipos de testesOK? Nao OK?
I ok( boolean, descricao )
I is( elemento, elemento, descricao )
I isnt( elemento, elemento, descricao )
I matches( elemento, regex, descricao )
I imatch( anyelement, regex, description )
I doesnt match( anyelement, regex, description )
I doesnt imatch( anyelement, regex, description )
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os tipos de testes
Tipos de testesErrar e umano
I throws ok( consulta, errcode, errmsg, descricao )
I lives ok( query, description )
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os tipos de testes
Tipos de testesO esquema esta certinho?
I has tablespace( tablespace, location, description )
I hasnt tablespace( tablespace, tablespace, description )
I has schema( schema, description )
I hasnt schema( schema, schema, description )
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os tipos de testes
Tipos de testesOs objetos existem?
I has table( schema, table, description )
I hasnt table( schema, table, description )
I has view( schema, view, description )
I hasnt view( schema, view, description )
I has sequence( schema, sequence, description )
I hasnt sequence( schema, sequence, description )
I has index( schema, table, index, columns[], description )
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os tipos de testes
Tipos de testesE a estrutura das tabelas?
I has column( schema, table, column, description )
I col not null( schema, table, column, description )
I col is null( schema, table, column, description )
I col has default( schema, table, column, description )
I col default is( schema, table, column, default, description )
I col type is( schema, table, column, type, description )
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Entendendo os tipos de testes
Tipos de testesNao podemos esquecer das restricoes...
I has pk( schema, table, description )
I has fk( schema, table, description )
I col is pk( schema, table, column[], description )
I col is fk( schema, table, column[], description )
I fk ok( fk schema, fk table, fk column[], pk schema, pk table,pk column[], description )
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Lista de relac~oesEsquema | Nome | Tipo | Dono
------------+-------------+--------+----------aplicativo | cargo | tabela | postgresaplicativo | funcionario | tabela | postgresaplicativo | pessoa | tabela | postgres
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco homologacao
Lista de relac~oesEsquema | Nome | Tipo | Dono
------------+-------------+--------+----------aplicativo | cargo | tabela | postgresaplicativo | pessoa | tabela | postgres
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Tabela "aplicativo.cargo"Coluna | Tipo | Modificadores
-----------+-----------------------+---------------sigla | character varying(10) | not nulldescricao | character varying(20) | not nullsalario | numeric(17,2) |
Indices:"cargo_pkey" PRIMARY KEY, btree (sigla)
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco homologacao
Tabela "aplicativo.cargo"Coluna | Tipo | Modificadores
-----------+-----------------------+---------------sigla | character varying(10) | not nulldescricao | character varying(20) | not nullsalario | numeric(12,2) |
Indices:"cargo_pkey" PRIMARY KEY, btree (sigla)
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Tabela "aplicativo.funcionario"Coluna | Tipo | Modificadores
-------------+-----------------------+---------------cpf | numeric(14,0) | not nullsigla_cargo | character varying(10) | not null
Indices:"pk_funcionario" PRIMARY KEY, btree (cpf, sigla_cargo)
Restric~oes de chave estrangeira:"funcionario_cpf_fkey" FOREIGN KEY (cpf)
REFERENCES pessoa(cpf)"funcionario_sigla_cargo_fkey" FOREIGN KEY (sigla_cargo)
REFERENCES cargo(sigla)Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco homologacao
Nao existe tabela ”funcionario”...
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009
Introducao Qualidade de Software Test Anything Protocol Mao na massa
Executando um script
Um exemploa estrutura dos bancos
Banco teste
Testes unitarios no PostgreSQL com pgTAP PGDay Sao Paulo, 2009