(Como) você executa testes “funcionais” em seus serviços automaticamente?

6

Considere uma máquina simples do FreeBSD executando um servidor SMTP - como posso verificar automaticamente se está fazendo a coisa certa (por exemplo, aceitar conexões SMTP de entrada para certos destinatários e soltar as mensagens em algum Maildir)?

Já usamos software de monitoramento de servidores (neste caso, o Nagios) e, claro, fazemos testes manuais, mas fiquei me perguntando: existe alguma maneira comum de executar testes funcionais automáticos em serviços de servidor?

Um exemplo do que estou pensando: ao reconfigurar nosso servidor (o que geralmente acontece dentro de uma VM para fins de teste), estou pensando em

  1. Canalize algumas sessões SMTP criadas manualmente para o netcat, que se conecta à porta SMTP do nosso servidor e, em seguida,
  2. Execute algum tipo de script 'verfication' no servidor, garantindo que as declarações esperadas sejam mantidas (como: novos arquivos com conteúdo esperado aparecem no servidor, entradas de log foram criadas, etc.).

Eu imagino que ser capaz de executar uma série de testes para outros serviços (por exemplo, testes que os backups podem ser criados, testar se o servidor IMAP aceita conexões para certos usuários e que ele lista o email correto) pode ser útil para testar configurações alterações ou para verificar se os backups restaurados do sistema funcionam conforme o esperado.

    
por Frerich Raabe 18.02.2013 / 09:48

3 respostas

3

Você pode esperar que interaja com o serviço, por exemplo

#!/usr/bin/expect -f
set timeout 1
spawn telnet localhost 25
expect "220 *"
send -- "helo localhost\n"
expect -- "250*Hello\ localhost*"
send -- "mail from: root@localhost\n"
expect -- "250\ OK"
send -- "rcpt to: root@localhost\n"
expect -- "250\ Accepted"
send -- "data\n"
expect -- "354*"
send -- "functional test\n.\n"
expect -- "250\ OK*"
send -- "quit\n"
expect "221*closing\ connection"

ligue para o anterior como assim

/path/to/expect.script | grep -q "250 OK"
if [ $? = 0 ]
then
    echo "Message queued successfully"
else
    echo "Message Failed to queue"

Você pode então verificar se a mensagem foi entregue corretamente no mailpool ou Maildir ou o que quer que seja. Você pode alterar o host local para o host remoto de sua escolha, embora isso complique a verificação de entrega, mas você sempre pode usar esperar para efetuar login - é uma ferramenta muito poderosa.

    
por 18.02.2013 / 11:34
4

Esse tipo de teste pode ser mais ou menos facilmente escrito como um teste do Nagios (a facilidade depende do serviço em questão). Lembre-se, um teste Nagios é uma coisa simples , pelo menos a interface com o Nagios, é apenas um programa ou script de shell retornando uma resposta bem definida (um código de retorno e algum texto informativo).

Além disso, existem muitos módulos já disponíveis para todos os tipos de serviços, verifique a troca Nagios . Uma solução para o seu exemplo de e-mail é this .

    
por 18.02.2013 / 10:03
2

Eu uso o NAGIOS.

Se estou interessado em testar uma função individual, que forma uma etapa em uma cadeia que fornece algum serviço de negócios, testo: para testar um servidor SMTP, usarei o plug-in SMTP que se conecta à porta 25 e procura um banner adequado; idem um servidor IMAP; e assim por diante.

Se eu estiver interessado em testar uma seqüência de ponta a ponta, o sucesso ou a falha de toda a cadeia, verificarei se ela foi concluída com êxito. Para testar uma cadeia como você descreve, eu poderia muito bem ter um cron job que envia e-mails contendo uma certa string de teste a cada 30 minutos para um determinado endereço, e eu terei um plug-in NAGIOS que procure na caixa de correio do destinatário por essa string e verifica se está sendo atualizado regularmente.

Geralmente, farei as duas coisas, portanto, se o teste de ponta a ponta entrar no estado ALERTA, espero ver que uma ou mais das etapas intermediárias também entraram em alerta - talvez o receptor SMTP esteja inativo, ou o link de rede entre os dois falhou, ou o disco foi preenchido no receptor - e isso me dará uma primeira pista para investigar a falha de ponta a ponta. Muitas vezes, agrupo os testes de etapas individuais e o teste de ponta a ponta em um único grupo de serviços, para uma visualização rápida e fácil dos componentes com falha.

Mas acredito que os plug-ins individuais do NAGIOS devem ser sempre pequenos e leves . Portanto, observe como o teste de ponta a ponta acima testa apenas o sucesso ou o fracasso final da cadeia; Não faz nada para testar os passos da cadeia. Quanto mais complexidade houver em um plug-in individual, mais se trata de falhar de formas inesperadas, e é mais provável que eu obtenha falsos positivos (ou pior, falsos negativos) do meu sistema de monitoramento.

    
por 18.02.2013 / 11:44

Tags