terça-feira, 19 de outubro de 2010

Projeto de Integracao Selenium x Mantis x Testlink

Olá Pessoal!
Como último post sobre a Integração com o Selenium e ferramentas de Gestão de Teste e Gestão de Defeitos criei um projeto em Java que integra o Selenium, Mantis e Testlink.

É recomendado você ler os dois post's abaixo:

Se você já leu estes dois tutoriais, continue lendo este post...
Este projeto de exemplo vai:
  • Executar um script de teste no Selenium RC
    • O script de teste irá falhar
  • Reportar um bug no Mantis anexando uma imagem do browser no momento do erro
  • Reportar o resultado do teste (que será com falha) ao Testlink
  • Associar o bug aberto ao Caso de Teste no Testlink
Abaixo será apresentado somente as modificações executadas para a criação de um exemplo único. Se você precisar de mais explicações sobre algum item da integração, por favor, consulte os post's anteriores.

1. Organização
Este projeto foi dividido nos seguintes pacotes, conforme descrito abaixo:
  •  com.blogspot.sembugs.mantis
    • ConnectMantis.java: Classe que faz a conexão com o Mantis
    • MantisReport.java: Classe que reporta o bug no Mantis
  • com.blogspot.sembugs.test
    • CasoTeste.java: Caso de Teste de exemplo
  • com.blogspot.sembugs.testlink
    • ResultadoExecucao.java: Classe que reporta o resultado da execução do teste
  • com.blogspot.sembugs.util
    • IConstantes.java: Interface com dados comuns as classes

2. Modificações
A seguir serão apresentados os trechos das classes que foram alterados e os devidos comentários sobre as alterações

MantisReport.java
Nesta classe foram feitas as seguintes alterações:
  • Linha 1: Mudança do método, que agora tem como retorno um String.
  • Linha 8: Criado um atributo local do tipo long para retornar o ID do bug cadastrado
  • Linha 12: O atributo local é transformado em uma String e atribuido a variável bugID
  • Linha 22: Adicionado o retorno do método

PS: A classe abaixo está omitindo uma série de linhas de código, sendo apresentado apenas as mais relevantes perante as alterações.

1:  public static String reporIssue(String sumario, String descricao, String categoria, String informacaoAdicional, String evidencia, String nomeArquivo) {  
2:          IMCSession sessao = null;  
3:          String arquivo = nomeArquivo + ".png";  
4:          String bugID = null;  
5:            
6:          try {  
7:        // submete o bug no Mantis  
8:        long id = sessao.addIssue(issue);     
9:        sessao.addIssueAttachment(id, arquivo, "image/png", Base64.decodeBase64(evidencia));  
10:          
11:        // retorna o ID do bug como String, para fazer o relacionanmento do bug com o Testlink  
12:        bugID = String.valueOf(id);  
13:          
14:          } catch (MalformedURLException e) {  
15:              System.err.println("Erro na URL de acesso ao Mantis");  
16:              e.printStackTrace();  
17:          } catch (MCException e) {  
18:              System.err.println("Erro na comunicacao com o Mantis");  
19:              e.printStackTrace();  
20:          }  
21:            
22:      return bugID;  
23:      }  
24:  }  


ResultadoExecucao.java
Nesta classe foram feitas as seguintes alterações:
  • Linha 1: Foi adicionado um novo parâmetro para a utilização do método: Integer bugID. É esperado que seja passado o ID do bug cadastrado para fazer a associação com o Testlink, mas não é obrigatório
  • Linha 5: Um verificação é feita para ver se o ID do bug será passado. Se sim há uma séria de atributos que são obtidos para que o resultado de execução do caso de teste contenha o bug associado. Isso foi adicionado porque o método da API do Testlink tem uma assinatura (parâmetros) diferente do do método que não associa o bug
  • Linhas 7, 8, 9 e 10: Todos os atributos locais necessários para a associação do bug no resultado do caso de teste.
  • Linha 12: Envio dos dados de resultado do teste ao Testlink utilizando o ID do bug para associação.
  • Linhas 13 e 14: Se o bug não for passado (for null) o envio do resultado de execução para o Testlink utiliza outro método para esta tarefa.

1:  public static void reportTestCaseResult(String projetoTeste, String planoTeste, String casoTeste, String nomeBuild, String nota, String resultado, Integer bugID) throws TestLinkAPIException {  
2:        
3:    TestLinkAPIClient testlinkAPIClient = new TestLinkAPIClient(DEVKEY, URL);  
4:        
5:    if (bugID != null) {  
6:            
7:      Integer projectID = TestLinkAPIHelper.getProjectID(testlinkAPIClient, PROJETO_TESTLINK);  
8:      Integer testPlanID = TestLinkAPIHelper.getPlanID(testlinkAPIClient, projectID, PLANO);  
9:      Integer testCaseID = TestLinkAPIHelper.getTestCaseID(testlinkAPIClient, projectID, CASO_TESTE1);  
10:     Integer buildID = TestLinkAPIHelper.getBuildID(testlinkAPIClient, testPlanID, nomeBuild);  
11:    
12:     testlinkAPIClient.reportTestCaseResult(testPlanID, testCaseID, buildID, bugID, false, nota, resultado);          
13:    } else {  
14:        testlinkAPIClient.reportTestCaseResult(projetoTeste, planoTeste, casoTeste, nomeBuild, nota, resultado);  
15:    }  
16:  }  


CasoTeste.java
Esta classe é a mesma utilizado nos outros dois tutoriais, porém com nome diferente.
Basicamente foi alterado apenas o bloco finnally do script.
  • Linha 3: Foi adicionado o método para o report do bug, atribuindo para uma variável o ID do bug que foi adicionado.
  • Linha 5: Adicionado o novo método com o parâmetro do bugID, para que o bug seja associado ao resultado de execução do caso de teste.

PS: A classe abaixo está omitindo uma série de linhas de código, sendo apresentado apenas as mais relevantes perante as alterações.

1:  } finally {  
2:    if (erro) {  
3:      String bugID = MantisReport.reporIssue("Erro no Caso de Teste de Pesquisa de Livros", "Erro em alguma validacao ou validacao", "Automacao", msgErro, evidenciaErro, "CasoTesteMantisNOK");  
4:                    
5:      ResultadoExecucao.reportTestCaseResult(PROJETO_TESTLINK, PLANO, CASO_TESTE1, BUILD, msgErro, resultado, Integer.parseInt(bugID));      
6:            
7:      CasoTeste.fail(msgErro);  
8:    }  
9:  }  


3. Baixando o código-fonte
O projeto completo e funcional pode ser baixado no link abaixo (18 MB):

http://www.eliasnogueira.com/arquivos_blog/selenium/integracao/mantis_testlink/selenium-integration.zip


4. Verificando online o resultado de execução
Se você baixar o projeto e já executá-lo ( ) poderá ver que os resultados no Testlink e Mantis serão colocados em ambas aplicações que tenho online.

Para acessar ambos, utilize os seguintes dados de login:
  • Usuário: convidado
  • Senha: convidado
Dentro do Mantis, que está acessível pela URL abaixo, você verá que o bug será reportado contendo os dados que passamos para o método utilizado na classe CasoTeste.java. Atente-se para o ID do bug e o horário de criação:

http://www.eliasnogueira.com/arquivos_blog/mantisbt-1.2.3/


Agora no Testlink, que está acessível pela URL abaixo, veremos que o resultado reportado foi com falha, está dentro do mesmo horário de criação do bug e tem o bug associado, conforme figura.



Bom pessoal, por enquanto é isso! Abraço a todos!

2 comentários:

  1. Elias,

    Estou tentando realizar a integração entre as ferramentas "Testlink X Selenium X Mantis", gostaria de saber se poderia disponibilizar novamente o link para download do codigo fonte ou mesmo uma indicação de onde posso encontra-lo.

    Graças aos teus posts, consegui realizar as integrações entre "Testlink(1.9.2) X Mantis(1.2.8)" com sucesso, porem gostaria de implantar a solução completa integrando tambem o Selenium.

    Tenho algumas duvidas e sugestões quanto "Solução(T.M.S.)" e gostaria de compartilhar essas e tambem contar com vários "Helps"!rs

    Desde já agradeço a atenção.

    Thyago Borges

    ResponderExcluir
  2. Oi Thyago!
    Obrigado por alertar pelo link quebrado. Ele já está corrigido agora.

    Qualquer coisa manda as tuas duvidas ai. Podemos trocar varias figurinhas!

    Grande abraço!

    ResponderExcluir