Pular para o conteúdo principal

FitNesse

O Que é FitNesse

FitNesse é uma ferramenta de Desenvolvimento de Software Colaborativo. Muitos Softwares precisam de colaboração e comunicação. FitNesse é uma ferramenta para melhorar a colaboração no desenvolvimento de software. O FitNesse possibilita a criação de Testes do Sistema de forma simples e colaborativa.

Como Executar o FitNesse

Executar no Servidor

Para utilizar o FitNesse é preciso ter o projeto Idempiere configurado e rodando.

  • Dentro do Repositório Idempiere há uma pasta chamada FitNesse, copie ela para o servidor onde deseja executar a wiki.
  • Execute o Servidor do Idempiere.
  • Conecte no terminal OSGI (telnet localhost 1612)
  • Instale e Execute os Plugins org.idempiere.fitnesse.fixture_2.1.0.qualifier e org.idempiere.fitnesse.server_2.1.0.qualifier.
  • Para Obter o ID dos Plugins digite ss fitnesse, o sistema irá apresentar o ID dos Plugins FitNesse.
  • Execute o Projeto FitNesse (./run.sh na pasta FitNesse copiada para o Servidor).

Feito isso o servidor do FitNesse está executando no endereço de onde você pode escrever/executar os testes.

Executar pelo Eclipse

Para utilizar o FitNesse é preciso ter o projeto Idempiere configurado e rodando no seu Eclipse.

  • Dentro do Repositório Idempiere há uma pasta chamada FitNesse, importe ela como um projeto existente em seu eclipse.
  • Execute o Projeto do Idempiere em seu eclipse.
  • Execute os Plugins org.idempiere.fitnesse.fixture_2.1.0.qualifier e org.idempiere.fitnesse.server_2.1.0.qualifier.
  • Execute o Projeto FitNesse como um Aplicativo Java.

Feito isso o servidor do FitNesse está executando no endereço de onde você pode escrever/executar os testes.

Como Utilizar a Wiki (FitNesse)

O FitNesse é um servidor web de Wiki. Antes de começar a criar tabelas de teste, você precisa saber um pouco sobre como a Wiki funciona. A Wiki permite a qualquer usuário autorizado fazer alterações em qualquer página habilitada para edição, ou criar novas páginas, simplesmente utilizando seu navegador web. Se você está trabalhando com uma cópia do FitNesse em sua maquina, você provavelmente está autorizado a fazer essas modificações.

Editando uma Página

Quando você está em uma página que deseja editar, clique no Botão Edit no canto superior esquerdo. (Se este Botão não estiver aparecendo, esta página não está habilitada para edição).

Uma nova página irá se abrir com um frame de Edição contendo a linguagem Markup da página atual. Você pode alterar a página editando o código na linguagem Markup. Caso você não esteja familiarizado com a linguagem Markup, você pode alterar para o modo Editor Rich Text. Simplesmente faça suas alterações e clique no botão Save.

Criando uma nova Página

Todas as Páginas do FitNesse estão no formato Camel-Case, com isso a primeira letra de cada palavra é sempre Maiúscula, caso você queira criar uma Página Chamada Minha Primeira Pagina você deve escrever MinhaPrimeiraPagina. Quando você está editando uma Página e você digita uma palavra no formato Camel-Case, como MinhaPrimeiraPagina, e salva, o FitNesse interpreta isso como um Link para uma página, caso esta ainda não exista, o FitNesse adiciona um ponto de Interrogação (?) ao nome inserido e ao clicar no link é solicitado que você insira o conteúdo da página.

Formatos de Edição da Wiki (Tabelas de Estilo ou Fixtures)

O FitNesse fornece varias "Tabelas de Estilo / Fixtures" para escrever seus Testes. Cada "Tabela de Estilo / Fixture" possui seu propósito de uso afim de permitir que os testadores escrevam seus testes sem precisar de auxílio de programadores para escrever um código específico para cada nova transação. Este documento irá descrever como as "Tabelas de Estilo / Fixtures" devem ser usadas, porém antes de explicar como elas funcionam, os seguintes conceitos são importantes para você prosseguir:

Variável de Contexto:

A Proposta das variáveis de contexto é possuir valores visíveis durante toda a execução dos testes, estes são os tipos de variáveis de contexto:

  • Definido pelo Usuário: @nome_variavel@
  • Pé definida pelo Idempiere: estas variáveis foram criadas para manter vários tipos de operações, tais como:

@SQL: Permite manter um valor retornado de uma Query SQL, note que mais variáveis de contexto podem ser usadas nas clausulas SQL. @Ref: Permite para manter um valor de referência a partir de uma coluna de tabela específica.

Exemplo: //"@Ref=AD_Client[@random_number: Pode ser utilizado para Gerar Números Randômicos,ele aceita parâmetros como:PREFIXO,SUFIXO,TAMANHO e CASAS DECIMAIS.

@random_string: Pode ser utilizado para Gerar Textos Randômicos, ele aceita parâmetros como: PREFIXO, SUFIXO e TAMANHO.

Ação:

Você pode identificar uma ação devido a possuir "*" como //Prefixo// e //Sufixo// dependendo da "Tabela de Estilo / Fixture" utilizada.

Avisos:

  • Se os Testes obtiverem sucesso, as eles ficam Verdes caso contrario eles ficam Vermelhos.
  • Se for preciso digitar o caractere @ em uma sentença, é preciso adicionar duas barras como prefixo, Ex: //@.
  • Se o teste a ser executado precisar de dados de outro teste, você pode chamar o teste utilizando o comando !include -c.

Entendendo os Testes

Os Testes são baseados nas "Tabelas de Estilo / Fixtures" criadas, atualmente existem 10 "Tabelas de Estilo / Fixtures" as quais são: *Login
*Assert Variable *Set Variable *Create Record *Read Record *Update Record *Assert Record *Delete Record *Run Process *Set DocAction

Estas possibilitam executar ações no sistema de maneira fácil seguindo a estrutura a seguir:

Estrutura das Tabelas de Estilo / Fixtures

A Wiki utiliza a forma de Tabela de Decisão para expressar um Teste.

A Estrutura para Escrever um Teste é:

  • Iniciar a Primeira Linha com um Ponto de Exclamação (!).

  • Nome da "Fixture"

  • Valor: Valor Relacionado a "Fixture"

  • Coluna: Nome da Coluna.

  • Variável: Variável relacionada a "Fixture"

  • Ação: Ação para executar o teste, depende da "Fixture" (Read, Save, Login, Run, etc)

    Exemplo:

!|Fixture Name|
|*Value* |Context Variable | Name's Table | User ](Value='GardenWorld'.AD_Client_ID"//) | (Optional)
| | Variable | Password | (Column) | (Optional)
|| (Optional)
|*Execute*(Column) | (Optional)
|| (Optional)

Efetuar Login

Esta "Tabela de Estilo / Fixture" permite testar se é possível efetuar login no sistema, e deve ser executando antes de qualquer outro teste. Note que o esquema de segurança do Idempiere se aplica ao teste.

Parâmetros:

  • User : Nome de Usuário
  • Password : Senha para o Usuário escolhido.
  • AD_Client_ID : ID da Empresa a fazer o Login.
  • AD_Role_ID : ID do Papel/Função.
  • AD_Org_ID : ID da Organização.
  • M_Warehouse_ID : ID do Armazém.
  • Language : Idioma de Exibição. Comando a Executar:

*Login* : Executa o Teste e faz Login.

*Login*Error* : Executa o Teste e esperar um erro.

Retorno:

  • Logado com sucesso.

    Exemplo:

  !|Login|
|User |superuser @ idempiere.com|
|Password |System |
|AD_Client_ID|0 |
|AD_Role_ID |0 |
|*Login* | |
  • Sem Papel/Função

    Exemplo:

  !|Login|
|User |superuser @ idempiere.com|
|Password |System |
|AD_Client_ID |0 |
|AD_Role_ID |100002 |
|*Login*Error* |No role |

Verificar Variável

Esta "Tabela de Estilo / Fixture" permite verificar se o valor de uma variável em relação ao valor anterior, que por sua vez pode ser um variável de contexto ou o retorno de outra "Tabela de Estilo / Fixture".

Parâmetros:

  • Variáveis: Variáveis para preencher.

    Retorno:

  • O Valor Esperado.

    Exemplo:

!|Assert Variable|
|@ExpectedInventoryLevelAfter@|@SQL=SELECT SUM(s.qtyonhand) FROM m_storage s, m_locator l, m_warehouse w WHERE s.m_product_id=133 AND s.m_locator_id = l.m_locator_id AND l.m_warehouse_id=w.m_warehouse_id AND w.m_warehouse_id=103|

Criar uma Variável

Esta "Tabela de Estilo / Fixture" permite Criar uma variável.

Parâmetros:

  • Variáveis: Variáveis para Criar.

    Retorno:

  • O Valor Preenchido.

    Exemplo:

!|Set Variable|
|@InventoryLevelBefore@|@SQL=SELECT SUM(s.qtyonhand) FROM m_storage s, m_locator l, m_warehouse w WHERE s.m_product_id=133 AND s.m_locator_id = l.m_locator_id AND l.m_warehouse_id=w.m_warehouse_id AND w.m_warehouse_id=103|

Criar Registro

Esta "Tabela de Estilo / Fixture" permite criar um registro em uma tabela, fazendo com que este registro seja processado pelas classes de Modelo do Idempiere.

Parâmetros:

  • Tabela: Nome da Tabela

  • Valor(es): Valor(es) da(s) Coluna(s)

    Comando a Executar:

*Save* : Executa o Teste e Salva o Novo Registro.

*Save*Error* : Executa o Teste e esperar um erro ao tentar Salvar o Novo Registro.

Retorno:

  • Salvo com sucesso.

    Exemplo:

  !|Create Record|
|*Table* |C_Order |
|ad_org_id |11 |
|c_doctypetarget_id |@Ref=c_doctype[Name='POS Order'](Column]).c_doctype_id|
|salesrep_id |101 |
|dateordered |2009-03-25 00:00:00.0 |
|c_bpartner_id |@c_bpartner.c_bpartner_id@ |
|c_bpartner_location_id|114 |
|paymentrule |B |
|m_warehouse_id |103 |
|m_pricelist_id |101 |
|ad_user_id |105 |
|*Save* | |
  • Parceiro de Negócios (C_BPartner_ID) em Branco.

    Exemplo:

  !|Create Record|
|*Table* |C_Order |
|ad_org_id |11 |
|c_doctypetarget_id |@Ref=c_doctype[Order'](Name='POS).c_doctype_id|
|salesrep_id |101 |
|dateordered |2009-03-25 00:00:00.0 |
|c_bpartner_location_id|114 |
|paymentrule |B |
|m_warehouse_id |103 |
|m_pricelist_id |101 |
|ad_user_id |105 |
|*Save*Error* |c_bpartner_id can not be null |

Ler Registro

Esta " *Tabela de Estilo / Fixture *" permite ler um registro em uma tabela considerandos os parâmetros pré-definidos.

Parâmetros:

  • Tabela: Nome da Tabela

  • Colunas: Colunas que deseja ler

    Parâmetro Opcional:

  • Where: Define as Colunas na Sentença, valor definido na segunda coluna.

    Comando a Executar:

*Read* : Executa o Teste e Carrega o Registro.

*Read*Error* : Executa o Teste e esperar um erro ao tentar Ler o Registro.

Retorno: Carregado com sucesso

Exemplo:

  !|Read Record|
|*Table* |C_bpartner|
|c_bpartner_id |120 |
|*Read* | |
|actuallifetimevalue| |
|so_creditused | |
|totalopenbalance | |
  • Nenhum Registro encontrado.

    Exemplo:

  !|Read Record|
|*Table* |C_bpartner |
|c_bpartner_id |1000002 |
|*Read*Error* |No record found |
|actuallifetimevalue| |
|so_creditused | |
|totalopenbalance | |

Atualizar Registro

Esta "Tabela de Estilo / Fixture" permite atualizar um registro em uma tabela considerando os parâmetros pré-definidos.

Parâmetros:

  • Tabela: Nome da Tabela

  • Where: Define as Colunas na Sentença, valor definido na segunda coluna (Deve-se retornar um único registro para atualizar).

  • Colunas: Colunas que deseja atualizar

    Comando a Executar:

*Update* : Executa o Teste e Atualiza o Registro.

*Update*Error* : Executa o Teste e esperar um erro ao tentar Atualizar o Registro.

Retorno: Atualizado com sucesso

Exemplo:

  !|Update Record|
|*Table* |C_bpartner |
|*Where* |c_bpartner_id=10000 |
|*Update* | |
|IsActive |Y |
|Description |TEST |
  • Nenhum Registro encontrado.

    Exemplo:

  !|Update Record      |
|*Table* |C_bpartner |
|*Where* |c_bpartner_id=10000 |
|*Update*Error* |No record found |
|IsActive |Y |
|Description |TEST |

Verificar Registro

Esta "Tabela de Estilo / Fixture" permite verificar se o valor de um registro em relação ao valor anterior, que por sua vez pode ser um variável de contexto ou o retorno de outra "Tabela de Estilo / Fixture".

Parâmetros:

  • Tabela: Nome da tabela

  • Colunas: Colunas a Verificar o Valor.

  • Valores Esperados: Colunas Relacionadas a Tabela / Valores Esperados

    Parâmetros Opcionais

  • Where: Define as Colunas na Sentença, valor definido na segunda coluna

    Comando a Executar:

*Read* : Executa o Teste e Carrega o Registro.

*Read*Error* : Executa o Teste e esperar um erro ao tentar Ler o Registro.

Retorno:

  • Valor esperado.

    Exemplo:

  !|Assert Record|
|*Table* |C_order |
|c_order_id|@C_order.c_Order_id@|
|*Read* | |
|GrandTotal|67.50 |
  • Nenhum Registro encontrado.

    Exemplo:

  !|Assert Record|
|*Table* |C_order |
|c_order_id |@C_order.c_Order_id@|
|*Read*Error*|No record Found |
|GrandTotal |67.50 |

Deletar Registro

Esta "Tabela de Estilo / Fixture" permite deletar um registro.

  • Parâmetros:
    • Tabela: Nome da tabela.
    • Where: Define as Colunas na Sentença, valor definido na segunda coluna.

Comando a Executar:

*Delete* : Executa o Teste e Deleta o Registro.

*Delete*Error* : Executa o Teste e espera um erro ao tentar Deletar o Registro.

Retorno:

  • Deletado com sucesso.

    Exemplo:

  !|Delete Record|                                                                              
|*Table* |C_bpartner |
|*Where* |c_bpartner_id=120 |
|*Delete* | |
  • Atualização ou exclusão em "c_bpartner" viola chave estrangeira.

    Exemplo:

  !|Delete Record   |
|*Table* |C_bpartner |
|*Where* |c_bpartner_id=120 |
|*Delete*Error* |ERROR: update or delete on "c_bpartner" violates foreign key |

Executar Processo

Esta "Tabela de Estilo / Fixture" permite executar um Processo porém não suporta relatórios.

Parâmetros

  • ProcessValue: Valor do Processo.

Parâmetros Opcionais

  • Record_ID: ID do Registro.
  • AD_Process_ID: ID do Processo.
  • DocAction: Ação do Documento.
  • Parâmetros: Parâmetros do Processo, para parâmetros do tipo range insira o sufixo "_2" ex: date, date_2.

Comando a Executar: *Run: Para executar o teste. RunError: Para Executar o teste e esperar por um erro.

Retorno

  • Executado com Sucesso.

    Exemplo:

!|Run Process|
|*ProcessValue*|C_Order Process |
|*RecordID* |@C_Order.C_Order_ID@|
|*DocAction* |CO |
|*Run* | |
  • Não possui Linhas.

    Exemplo:

!|Run Process|
|*ProcessValue*|C_Order Process |
|*RecordID* |@C_Order.C_Order_ID@|
|*DocAction* |CO |
|*Run*Error* |No Documents Lines |

Alterar Ação de Documento

Esta "Tabela de Estilo / Fixture" permite implementar uma ação sobre o documento escolhido.

Parâmetros:

  • Tabela: Nome da Tabela.
  • Record_ID: ID do Registro
  • DocAction: Ação do Documento.
  Completado            = "CO"
Aprovado = "AP"
Rejeitado = "RJ"
Postado = "PO"
Cancelado = "VO"
Acumulo Reverso = "RA"
Invalidado = "IN"
Reativado = "RE"
Aguardando Completar = "WC"

Comando a Executar:

  *Save* : Executa o Teste e Salva o Registro.

Exemplo:

!|Set DocAction        |
|*Table* |C_Payment|
|C_Payment_ID|100 |
|docAction |VO |
|*Save* | |

Como Gravar Testes

O Idempiere possibilita gravar Testes de forma simples para utilização no FitNesse, mas para isso é necessário seguir os passos abaixo para configurar a gravação dos aquivos de Teste.

Gravar Testes Pelo Servidor

  • Execute o Idempiere em seu Servidor.
  • Instale org.idempiere.fitrecorder_2.1.0.qualifier;
  • Execute o Plugin através do comando start "ID do Plugin"
    • Para Obter o ID do Plugin digite ss fitrecorder, o sistema irá apresentar o ID do Plugin FitNesse Recorder.
  • Crie um Model Validator (Logado como //System//), utilizando os seguintes dados:
    • Nome: FitRecorder
    • Descrição: FitRecorder
    • Classe do Model Validator: org.idempiere.fitrecorder.FitRecorder
  • Crie uma Preferência (Logado com o Usuário que Deseja Gerar Scripts), utilizando os seguintes dados:
    • Chave de Busca: Y
    • Usuário Contato: Usuário Logado
    • Janela: Deixar em Branco
    • Processo: Deixar em Branco
    • Preferência para: Janela
    • Atributo: FitRecorder
  • Deslogue do Sistema e Logue novamente, note que na pasta ${Idempiere_Home}/log foi criado um arquivo fit_test% já com as informações utilizadas ao fazer login, a partir deste momento todos os registros criados no sistema serão criados também no arquivo fit_test% para que você possa utiliza-los como Testes do FitNesse.
  • Para Desabilitar a Gravação dos Arquivos fit_test% edite a preferência criada mudando a chave de busca para N.

Gravar Testes Pelo Eclipse

  • Execute o Projeto do Idempiere em seu eclipse.
  • Execute o Plugin org.idempiere.fitrecorder_2.1.0.qualifier
  • Crie um Model Validator (Logado como //System//), utilizando os seguintes dados:
    • Nome: FitRecorder
    • Descrição: FitRecorder
    • Classe do Model Validator: org.idempiere.fitrecorder.FitRecorder
  • Crie uma Preferência (Logado com o Usuário que Deseja Gerar Scripts), utilizando os seguintes dados:
    • Chave de Busca: Y
    • Usuário Contato: Usuário Logado
    • Janela: Deixar em Branco
    • Processo: Deixar em Branco
    • Preferência para: Janela
    • Atributo: FitRecorder
  • Deslogue do Sistema e Logue novamente, note que na pasta ${Idempiere_Home}/log foi criado um arquivo fit_test% já com as informações utilizadas ao fazer login, a partir deste momento todos os registros criados no sistema serão criados também no arquivo fit_test% para que você possa utiliza-los como Testes do FitNesse.
  • Para Desabilitar a Gravação dos Arquivos fit_test% edite a preferência criada mudando a chave de busca para N.

Referências

http://wiki.idempiere.org/en/Fitnesse.HowTo

http://wiki.idempiere.org/en/Fitnesse.HowToTestCase

http://wiki.idempiere.org/en/Fitnesse.FixtureReference

http://wiki.idempiere.org/en/Fitnesse_Recorder

https://fitnesse.org/FitNesse/UserGuide/FitNesseWiki/EditingFitNessePages.html