testes unitarios no postgresql com pgtap

43
Introdu¸c˜ ao Qualidade de Software Test Anything Protocol ao na massa Testes unit´ arios no PostgreSQL com pgTAP Dickson S. Guedes [email protected] PGDay S˜ ao Paulo, 2009 24 de abril de 2009 Testes unit´ arios no PostgreSQL com pgTAP PGDay S˜ ao Paulo, 2009

Upload: dickson-s-guedes

Post on 12-Jun-2015

815 views

Category:

Technology


7 download

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

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