Testes de integracao entre mobile e servidor ?

Ola pessoal, eu tenho um projeto de mobile app que estou atualmente automatizando com Robotium e Cucumber-JVM.

Para os testes de integracao com o servidor, comecamos a mockear o servidor e mandar os requests para ele. So verificamos se o app esta se comportando como esperado de acordo com o cenario.

Porem agora temos o problema de fazer manutencao dos cenarios no projeto de mobile e do servidor. Duplicando os cenarios e aumentando o esforco de manutencao.

Para parar de mockear o servidor e mandar os requests direto para o servidor real, eu pensei em enviar o json request no Given step (json request previamente criado), mas meu gerente nao gostou da ideia de ter que manter os jsons sempre atualizados, porque iriamos gastar tempo com a manutencao deles, ele gostaria de ter algo onde so atualizasse em um local quando a API do servidor mudasse.

Alguem ja usou alguma ferramenta para fazer os testes de integracao entre mobile app e servidor mandando os requests para um servidor real ?

Olá, o que pode usar (por que acredito que esteja usando java) é utilizar o RestAssured:
Rest-Assured (Jayway)

O que já fiz foi criar uma parte da automação rodando todas as chamadas que precisava antes de executar algo de UI. Criei um package com os testes que precisava e caso algum falhasse nem me preocupava em rodar UI, algo iria “dar mierda”.

Não sei bem se é só o que precisa…Mas está ai.

Ola @Ramses-Saccol-de-Almeida eh exatamente isso !

Entao voce criou um package para rodar todos os requests primeiro antes da automacao UI. Assim, se um deles falhasse voce ja sabia que algo mudou no servidor dai nem rodava a UI ate atualizar o que precisava na parte do servidor ?

Obrigada !! Foi mais ou menos o que eu tinha em mente, rodar os requests antes da UI, mas para alguns cenarios eu tenho que atualizar em tempo real, como por exemplo atualizar um arquivo que esta instalado previamente no mobile. (Nesse caso, o request que vou mandar no comeco eh instalando o primeiro arquivo e depois no meio do teste teria que mandar outro atualizando esse arquivo e checar se foi instalado o segundo corretamente)

@Rafaela-Azevedo
Opa, beleza em tem ter ajudado. Sobre precisar de atualização/usar no meio de um teste de UI, não existe problema. Mas rodar tudo antes para ter certeza de nada estar quebrando ou o servidor tratando algo errado ajuda muito. Pois se no meio do teste isso ocorrer (e for devido a um problema na chamada) já tem alguns “pontos a ligar” sobre o problema.

Se precisar , só comentar por aqui.

@Ramses-Saccol-de-Almeida Opa brigadao pela ajuda :)

Oi Rafaela,
Eu não entendi muito bem o problema de manutenção dos json que tu teria, uma vez que com qualquer ferramenta para automação de API tu vais ter que gerenciar os dados da mesma forma. A manutenção, na minha visão, é a mesma.

Só acrescentando, para tu não acabar perdendo tempo nas execuções da automação na API tu podes criar duas suites para o RestAssured (ou qualquer outra ferramenta do gênero:

Abraço!

@Elias-Nogueira Oi Elias, entao o que eu preciso implementar aqui eh um teste de integracao entre o mobile app e o servidor. Meu lider tecnico gostaria de nao duplicar os testes, porque a manutencao sera maior (Concordo com ele, mas nao tem para onde fugir na minha opiniao). Vou detalhar aqui. Porque iria duplicar ?

  • Porque eu teria os mesmos cenarios na automacao do servidor e depois na automacao de integracao entre o mobile e o servidor.

Cenario atual: Nos testes de integracao do mobile estamos mockeando o servidor, porem nao foi a melhor ideia, porque agora toda regressao eu preciso testar manualmente esses cenarios de integracao entre o mobile e o servidor. Ja que o servidor eh soh uma simulacao e nao esta o atualizado com as features novas, porque nao ficamos fazendo manutencao nele tambem.

Estrutura: O mobile app recebe e envia configuracoes do/para o servidor, por exemplo:

  • Eu mando para o servidor um request para instalar uma aplicacao em um mobile
  • O servidor manda esse request de instacao para o mobile
  • O mobile recebe e mostra na UI que esta atualizando
  • Quando acaba ele marca a aplicacao como instalada e manda o status pro servidor

O que eu preciso fazer/verificar eh simples:

  • Mandar um json request para o servidor instalando esse app
  • Verificar na UI do app se a aplicacao esta com o status de instalada
  • Verificar se o app esta enviando o status de instalado para o servidor

Solucao ate agora:

Criar a automacao para criar e enviar os jsons que eu vou instalar/desinstalar/atualizar as aplicacoes e rodar antes de todos os cenarios que verificam a UI. Ou mesmo criar/enviar esses jsons no meio dos cenarios de automacao da UI e no Then verificar se esta ok.

Mas meu lider tecnico nao quer duplicar os cenarios de automacao do servidor e da automacao de integracao, por causa da manutencao que teremos que dar. Ele gostaria de testar tudo servidor + app sem duplicar os cenarios. Como por exemplo ter o projeto separado soh pra UI do app e outro soh pra testar esses jsons e dai o mobile chama o projeto de automacao do servidor roda aquele cenario e dai volta pra o projeto de automacao de UI do app. Assim evitaria fazer manutencao desses requests no projeto de integracao e no projeto do servidor.

Enfim, pelo que estou vendo nao da pra fazer isso, chamar uma automacao dentro da outra e apontar pra um cenario especifico. O melhor jeito eh testar cada ponta, por exemplo testar esses cenarios de integracao do servidor com o app e assim na autoamcao do servidor nao preciso testar esses mesmos cenarios, pois ja estaria testando eles no projeto de integracao.

Oi Rafaela,
Agora eu entendi… Na verdade a duplicação de cenários que tu estás falando é referente aos mocks, correto?

Bom, tu pudes ter um único projeto de teste com mais de uma ferramenta, nada te impede de fazer isso e separar os testes em dois pacotes diferentes…
Ou misturar os scripts: em um único script mandar o json request para o server e abrir a app para verificar o retorno da UI.

Se é isso que gera a maior duplicação não há problema nenhum em implementar desta maneira. O mais importante do que padrões que temos na automação é ter a automação atendendo nossas necessidades de negócio.
Várias vezes eu já “misturei” ferramentas diferentes no mesmo script para ter um resultado que agregasse valor ;)

Abraço!

Não sei se ajuda, mas é legal mencionar:

Ao invés de chamar algum arquivo pronto de JSON, tu pode usar o GSON para criar uma classe que cria os JSon’s e pode usar sem ter tanta coisa para refazer.

Eu já usei criando uma (ou duas) classes com vários exemplos (listas simples encadeadas, duplamente encadeadas, bla bla bla) e na hora de chamar no RestAssured, eu pegava esse objeto e usava. Vale a leitura.

@Elias-Nogueira Oi Elias, sim ! Eu iria ter o mesmo cenario no projeto que o mobile app mockeia o servidor e no projeto que mockeia o mobile app por exemplo.

Porque assim eu testo os dois lados: A saida do app para o servidor mockeado e a entrada do app mockeada no servidor.

O que meu chefe gostaria era de mandar o request direto pro servidor sem mockear ele, assim so testariamos uma vez o mesmo cenario e dariamos manutencao so no teste de integracao.

OBrigada Elias, ja me ajudou bastante :)

@Ramses-Saccol-de-Almeida Voce ja me ajudou bastante com a dica do RestAssured, obrigadao Ramses !!

Gente so pra atualizar vcs !! Meu chefe encontrou outra maneira aqui que eh inclusive o que o Google usa, vamos tentar implementar:

http://googletesting.blogspot.co.uk/2012/10/hermetic-servers.html

http://googletesting.blogspot.co.uk/2013/08/how-google-team-tests-mobile-apps.html

http://googletesting.blogspot.co.uk/2015/03/android-ui-automated-testing.html

Achei bem interessante, mas so serve para quem tem acesso ao codigo fonte do app. Bom, so para atualizar aqui caso alguem tambem tenha a mesma duvida que eu, mais uma opcao para fazer esse tipo de teste.

@Rafaela-Azevedo disse:

Gente so pra atualizar vcs !! Meu chefe encontrou outra maneira aqui que eh inclusive o que o Google usa, vamos tentar implementar:

http://googletesting.blogspot.co.uk/2012/10/hermetic-servers.html

http://googletesting.blogspot.co.uk/2013/08/how-google-team-tests-mobile-apps.html

http://googletesting.blogspot.co.uk/2015/03/android-ui-automated-testing.html

Achei bem interessante, mas so serve para quem tem acesso ao codigo fonte do app. Bom, so para atualizar aqui caso alguem tambem tenha a mesma duvida que eu, mais uma opcao para fazer esse tipo de teste.

@Ramses-Saccol-de-Almeida e @Elias-Nogueira

@Rafaela-Azevedo disse:

Gente so pra atualizar vcs !! Meu chefe encontrou outra maneira aqui que eh inclusive o que o Google usa, vamos tentar implementar:

Não é bem uma outra maneira. São outras ferramentas para fazer , basicamente, o que já está fazendo com robotium. Tu poderia usar appium, espresso, até a infame IBM RTW. A questão é que os pilares que os links falaram são os mesmo que muita gente já faz com testes. Divisão de unitários, integração e UI. Até o Elias andou falando sobre isso no TDC de 2015 [TDC-2015] Trilha Android

Como o tópico aqui foi mais uma pergunta de como fazer os testes de integração, achei que estava só preocupada com a parte do meio da piramide
Mas bons links. Valem como aprendizado.
Bons testes!

Log in to reply

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