Testes falham no jenkins mas passam localmente

Olá pessoal,

Atualmente nossa suite de teste é composta por java + cucumber + selenium rodando no jenkins. Diariamente quando a suite roda de madrugada nós temos problemas como descrito no título. Temos essa intermitência com alguns scripts, as vezes passa no jenkins também em um dia, mas no outro falha.

Alguem sabe se existe como melhorar isso? Pensei talvez que fosse problema no servidor rodando muita coisa, mas na análise do DEVOPS não tem nada ocorrendo com o server.

Isso cheira a estrutura do teste. Deve estar “cravando” tempo de espera ou pegando algo no modo “xpath”, o qual pode deixar um teste com esse nivel de “flakiness”.
Quando se refere aos testes, chegaram a executar eles separados, a noite, para ver se existe um padrão?

Isso é bem comum aqui no meu ambiente: local tá biito, mas com o runner quer usamos (e que roda TODOS os testes) não…

Algumas perguntas que eu uso para obter mais dados sobre o problema seguem abaixo. Ajudam de alguma forma ?

  • O que os logs de teste apontam ?
  • Que tipo de falha é ? Temporização, seletor não encontrado ?
  • Tem como instrumentar a aplicação com logs customizados sobre o que tá acontecendo ? O que eles dizem ?
  • Snapshot da tela no momento do erro aponta o que ?
  • Se fizer um job só com aquele teste e rodar a noite, o teste passa ?
  • Se tu disparar o job manualmente, o teste passa ?
  • Qual teste roda antes dele ? O que aquele teste faz ? Será que alguma sujeira de ambiente/variáveis-de-teste podem estar sendo deixadas lá ?
  • Rodando N testes, se um deles falha, a aplicação abre e fecha o browser para “limpar” tudo ?

Uma estratégia que você pode tomar é separar os testes intermitentes em uma outra suíte de quarentena pra poder analisar melhor (as perguntas do @Gabriel-Oliveira são muito válidas). O bom de isolar isso é que sua suíte principal vai continuar confiável já que nesse cenário de intermitência, as pessoas começam a “desconfiar” da validade dos testes (já que ficam quebrando aleatoriamente) e podem começar a não ligar muito pra isso mais.

Separa uma suíte de quarentena e para pra analisar o problema.

Samy

Olá pessoal, desculpa a demora.

O que os logs de teste apontam ? Normalmente são erros em localizadores, não acha localizador quando rodado no jenkins mas quando rodado local é executado normalmente
Que tipo de falha é ? Temporização, seletor não encontrado ? Seletor não encontrado
Tem como instrumentar a aplicação com logs customizados sobre o que tá acontecendo ? O que eles dizem ? Nunca ouvi falar sobre. Alguma ideia?
Snapshot da tela no momento do erro aponta o que ? Não temos
Se fizer um job só com aquele teste e rodar a noite, o teste passa ? Quando um teste da suíte falha, nós isolamos este script para rodar em um job separado, e ele passa. Quando é rodado a bateria de teste ele falha, ou passa, entende? É muito intermitente
Se tu disparar o job manualmente, o teste passa ? Isso é indiferente
Qual teste roda antes dele ? O que aquele teste faz ? Será que alguma sujeira de ambiente/variáveis-de-teste podem estar sendo deixadas lá ? Acredito que não porque todos os testes são isolados.
Rodando N testes, se um deles falha, a aplicação abre e fecha o browser para “limpar” tudo ? Sim, cada script abre seu driver do FF.

@Samanta-Cicilia Estamos fazendo isso de isolar os testes, mas não está mudando muita coisa.

@Rafa disse em Testes falham no jenkins mas passam localmente:

Olá pessoal, desculpa a demora.

O que os logs de teste apontam ? Normalmente são erros em localizadores, não acha localizador quando rodado no jenkins mas quando rodado local é executado normalmente
Que tipo de falha é ? Temporização, seletor não encontrado ? Seletor não encontrado
Snapshot da tela no momento do erro aponta o que ? Não temos

Seguinte, tenho uma pergunta:

  1. Nesses seletores não encontrados, ele tem algum tempo “cravado” rodando ou tu espera até o elemento estar visível?

  2. Teus testes envolvem tu sempre abrir o webdriver e fechar a cada teste ou tu mantém ele “aberto” até toda suite rodar? (ou todos os testes)

  3. Esses seletores precisam de ações antes para ficarem visíveis? (ou chamada a algum serviço e bla bla bla?)

@Rafa, muito obrigado pelas respostas :) ! Tá massa o tópico!

Adicionalmente as perguntas do @Ramses-Saccol-de-Almeida, tenho algumas outras que surgiram das tuas respostas.

  • Se os seletores são XPath, há garantia de que parte dele funciona (se teu seletor for algo tipo “\tr[32]\td[2]\a”, teu teste garante que “\tr[32]” exista e que “\tr[32]\td[2]” exista) ?

  • Não sendo Xpath (yey!), quando o seletor não é encontrado, vocês chegam a gravar mais alguma informação ? Sei lá, elementos retornados pela query, Data/Hora, HTML da página, usuário de teste sendo usado, etc ?

  • Quando o job do jenkins roda com todos os testes, se tu manualmente interagir com a mesma aplicação (no mesmo servidor) e executar localmente teu teste intermitente, o que acontece ? Isso pode te ajudar a detectar problemas de performance e entender melhor como isso pode afetar teus testes.

  • Ao subir e descer o driver, talvez o browser limpe cache, certo ? Ao fazer isso, todo teste terá que ir no servidor e requisitar SEMPRE todos os resources estáticos. Isso pode levar algum tempo. Tem como pegar um desenvolvedor pelo braço pra ele te ensinar como olhar os logs do Backend da aplicação afim de tu conseguir saber o que está sendo requisitado ?

  • “nós isolamos este script para rodar em um job separado” significa que vocês fazem 1 job com 1 teste, correto ? Se tu for adicionando testes a esse job aos poucos, todos sempre continuam passando ? Quando esse “sempre” falha ?

  • O que você quer dizer com “todos os testes são isolados.” ? Por “isolamento” vc quis dizer que ( a ) o script de 2 testes não são dependentes e os scripts podem ser rodados em qualquer ordem e o ambiente (software under test) se mantém o mesmo sempre ou ( b ) o ambiente (software under test) é recriado a cada teste ou ( c ) o banco é recriado a cada teste ? Talvez o “isolamento” que tu tem na tua máquina não seja o mesmo que tens na hora de rodar o Jenkins ? Quais as diferenças ?

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.