Pesquisar neste blog

quarta-feira, 7 de dezembro de 2011

Monitoramento de aplicações Web com Webinject

WebInject é uma ferramenta gratuita para testes automatizados de aplicações web e serviços web. Ele pode ser usado para testar componentes individuais do sistema que possuem interfaces HTTP (JSP, ASP, CGI, PHP, Servlets, Formulários HTML, XML / Web Services SOAP, etc), e pode ser usado como um equipamento de teste para criar um conjunto de [HTTP nível] funcional automatizado, aceitação e testes de regressão. Um equipamento de teste, também conhecido como piloto de testes ou um framework de teste, permite que você execute muitos casos de teste e coletar / relatório de seus resultados. WebInject oferece visualização em tempo real os resultados e pode também ser usado para monitorar o tempo de resposta do sistema.
WebInject usa uma API XML (interface) para a definição e carregamento de casos de teste. Você pode usar WebInject sem nunca ver a sua implementação interna.


Também pode ser implementado como um plugin do nagios.





1 - Pré-requisitos de instalação
Webinject é escrito em Perl, que tem, no entanto necessitam de módulos adicionais perl que não são instalados por padrão. 


~# cpan -i LWP HTTP::Cookies HTTP::Request::Common Time::HiRes Getopt::Long Error XML::Parser XML::Simple Crypt::SSLeay 


Em seguida, vamos baixar o script webinject: 

~# cd /tmp 
~# wget http://downloads.sourceforge.net/webinject/webinject-1.41.src.tar.gz 
~# tar xzvf webinject-1.41.src.tar.gz 
~# cd webinject 

Obs:
Para rodarmos o script ./webinject.pl, precisaremos criar dois arquivos adicionais:
 - Um com os parametros de configuração e;
 - Outro com os cases de teste. 
Os scripts em xml, podem ter qualquer nome, após criá-los, deverão ser chamados como parâmetros do arquivo ./webinject.pl para podermos rodar os testes nas aplicações web.



2 - Configurar o arquivo config.xml


O arquivo "config.xml" é usado para a configuração de seu projeto. 
Neste arquivo nós especificamos o caso de teste arquivo. Todos os parâmetros devem estar em suas próprias marcas.


As seguintes opções de configuração: 

proxy
Se você precisa especificar um endereço de proxy http 

<proxy>http://127.0.0.1:8080</proxy> 
Você pode adicionar as configurações de autenticação 

<proxy>http://username:password@127.0.0.1:8080</proxy>



useragent 
Esta opção permite que você especifique o User-agent. Por padrão, esse parâmetro é "Webinject". Isso ajuda a identificar as consultas no servidor web. 


<useragent>Minitux User Agent</useragent> 


httpauth 
Isso permite que as configurações de autenticação como especificação em uma autenticação http básica. Esta configuração leva cinco parâmetros: servername: port: nomréel: usuário: senha. 


<httpauth>www.fakedomain.com:80:my_realm:foo:welcome</httpauth> 
baseurl 
Criar a constante {} BaseURL que podem ser usados ​​no arquivo cenário. 


<baseurl>http://myserver</baseurl> 
baseurl1 
Criar a constante {} BASEURL1 como "baseurl". 


baseurl2 
Criar contanste BASEURL2 {} como "baseurl". 


globalhttplog 


Ativa logs pedidos HTTP / respostas para todos os testes. Eles serão gravados no arquivo http.log


<globalhttplog>yes</globalhttplog> 
Ou apenas em caso de erro 


<globalhttplog>onfail</globalhttplog> 
Esta opção é desabilitada quando rodando em modo de webinjecct plugin. 


how 


Permite-lhe colocar comentários no arquivo de configuração


<comment>Comentário</comment> 
tempo limite 


Especifica o tempo de resposta em segundos para cada teste. Se a resposta for maior do que o teste parâmetro será considerado fracassado. 
A configuração padrão é 180 segundos. 


<timeout>10</timeout> 
Essa configuração não funciona em SSL / HTTPS


ReportType 


Este parâmetro é usado para ativar a produção e torná-lo compatível com um programa. 


nagios - Compatível como um plugin nagios. 


<reporttype>nagios</reporttype> 
mrtg - Compatível com MRTG Plugin 


<reporttype>mrtg</reporttype> 
externo - Chamar um módulo perl externo. Você pode escrever um programa que vai ser chamado depois de ter terminado webinject tiro. 
Este programa terá acesso a webinject variável global. 


<reporttype>standard:Plugin.pm</reporttype> 
Plugin.pm exemplo - Enviar resultados por e-mail. 


$message = "Passed: $casepassedcount, Failed: $casefailedcount"; 
exec(qq ); 
Standard - Padrão de saída é o modo padrão. 


<reporttype>standard</reporttype> 


globaltimeout 


Este parâmetro é usado quando o modo é habilitado nagios. O valor será comparado com o tempo total que levou para realizar o teste. 


<globaltimeout>10</globaltimeout> 


gnuplot 


Define onde executável gnuplot está localizado em seu sistema. Isso só é necessário se você quiser webinject usa gnuplot para criar gráficos de tempo de resposta.


<gnuplot>/usr/bin/gnuplot</gnuplot> 


standaloneplot 


Vamos dizer que webinject para criar gráficos de tempo de resposta quando rodando em modo console (webinject.pl), caso contrário, é o modo apenas possível no modo GUI. Um PNG é gerado na pasta atual. 


<standaloneplot>on</standaloneplot> 



3 - Webinject no modo console

Webinject é destinado ao uso no console e pode receber parâmetros: 

webinject.pl [-c --config config_file] [-o| --output output_location] [-n| --no-output] [testcase_file [XPath]] 

As opções: 
-C ou - config: Especifique um arquivo de configuração alternativo. Padrão é webinject config.xml. 
Para especificar um arquivo de configuração em um diretório diferente você deve usar um caminho relativo para o arquivo executável webinject. 

-O ou - saída: Especifica o local para gravar a saída. 

-N ou - sem-saída: Apaga todo o caminho. 

-V ou - version Mostra a versão. 

Você também pode especificar o arquivo de cenário: 

~#perl webinject.pl mytests.xml 

Se não houver um arquivo especificado na linha de comando, webinject olhar no config.xml para encontrar a frase "testcasefile". Se não for especificado ele irá procurar o arquivo chamado "testcase.xml" diretório DNAS webinject. 

XPath / XNode 

Quando você coloca um cenário de arquivo webinject linha de comando, você pode adicionar o número do teste. 
Por exemplo, para executar apenas o número do teste 2: 

~#perl webinject.pl mytests.xml testcases/case 2 


4 - Configurando o Cenário


Os cenários são escritos em XML, existem muitos parâmetros que serão úteis em casos diferentes. Os dois únicos parâmetros essenciais são 'id' e 'url' e apenas o código de retorno http será estudado. 


<case 
id="1" 
url="http://myserver/test/test.html" 
/> 


Os vários parâmetros possíveis 


id 
O identificador do teste e para especificar a ordem. 


description1 
Descrição, úteis para relatórios 


description2 
Descrição, úteis para relatórios. 


method
HTTP método de solicitação, pegue post. O padrão é obter. 


url 
URL completa para o teste. É possível utilizar um endereço IP ou nome de domínio. 


posttype 
Este parâmetro especifica a codificação usada para enviar um formulário para o servidor. Ele é usado apenas durante um POST. 
Os diferentes valores são: 


"application/x-www-form-urlencoded" 
"multipart/form-data" 
"text/xml" 
"application/soap+xml" 
Padrão "application / x-www-form-urlencoded". 


postbody 
Estes são dados que serão enviados no pedido para o servidor. Ele é usado em um post HTTP. 


Se você enviar dados "application / x-www-form-urlencoded", este parâmetro irá conter a seqüência que você deseja enviar. 


Se você enviar dados "multipart / form-data", este parâmetro contém uma string que representa o código Perl utilizado para definir o "Conteúdo" âramètre do "POST". A string será avaliada por 'eval' o intérprete perl. 
Mais informações na documentação do Perl HTTP:: Request:: Common. 


Se você enviar "text / xml" ou "application / soap + xml", este parâmetro contém o arquivo que contém o xml que será enviado o pedido. 
exemple: postbody="file=>soap_payload.xml" 
verifyresponsecode 
Verificação de código de resposta http. 2chec se o código é diferente. 


verifypositive 
Verificar uma string na resposta. Ele pode trabalhar com expressões regulares. 


verifypositive1 
Verificação adicional. Funciona da mesma maneira que "verifypositive". 


verifypositive2 
Verificação adicional. Funciona da mesma maneira que "verifypositive". 


verifypositive3 
Verificação adicional. Funciona da mesma maneira que "verifypositive". 


verifynegative 
Verificação reverter uma string na resposta. Também trabalha com expressões regulares. 


verifynegative1 
Oposto verificação adicional. Funciona como "verifynegative '. 


verifynegative2 
Oposto verificação adicional. Funciona como "verifynegative '. 


verifynegative3 
Oposto verificação adicional. Funciona como "verifynegative '. 


__verifynextpositive - 
Verificando a seqüência na seguinte teste. 


verifynextnegative 
Verificação reverter uma string no seguinte teste. 


logrequest 
Registros escritos http.log no pedido http para o teste atual. Os logs são desativadas se o parâmetro não é sim. 


logresponse 
Registros escritos http.log na resposta HTTP para o teste atual. Os logs são desativadas se o parâmetro não é sim. 


parseresponse 
Analisar uma seqüência na resposta HTTP para uso posterior. O mais comum é o ID da sessão. 


parseresponse1 
Parâmetro adicional para analisar a resposta. 


parseresponse2 
Parâmetro adicional para analisar a resposta. 


parseresponse3 
Parâmetro adicional para analisar a resposta. 


parseresponse4 
Parâmetro adicional para analisar a resposta. 


parseresponse5 
Parâmetro adicional para analisar a resposta. 


sleep
Número de segundos para fazer uma pausa após o teste. Isto é útil para adicionar espaços entre as diferentes consultas. 


errormessage 
Se o teste falhar, você pode especificar uma mensagem de erro personalizada. Isto pode ser útil para entender por que o teste falhou. 


AddHeader 
Usado para adicionar um cabeçalho adicional na solicitação HTTP. 
exemple: addheader="SOAPAction: urn:example-org:demos#Method" 
Você pode adicionar vários cabeçalhos separados por um tubo. 



5 - Exemplos

<case 
id="1" 
description1="short description" 
description2="long description" 
method="post" 
url="http://myserver/test/login.jsp" 
postbody="username=corey&password=welcome" 
verifypositive="verify this string exists" 
verifynegative="verify this string does not exist" 
logrequest="yes" 
logresponse="yes" 
sleep="3" 
/> 


<case 
id="2" 
description1="short description" 
description2="long description" 
method="get" 
url="http://myserver/test/send.jsp?value={TIMESTAMP}" 
verifypositive="verify this string exists" 
verifynextpositive="{TIMESTAMP}" 
/> 

Aqui está outro exemplo de arquivo codificado upload "multipart / form-data" 

<case 
id="1" 
description1="sample test case - POST" 
description2="verify file upload" 
method="post" 
url="http://cgi-lib.berkeley.edu/ex/fup.cgi" 
postbody="( upfile => ['config.xml'], note => 'MYCOMMENT' )" 
posttype="multipart/form-data" 
logrequest="yes" 
logresponse="yes" 
verifypositive="MYCOMMENT" 
/> 


O caso de teste várias são numerados com o "id" parâmetro. Eles serão executados na ordem de ID de um após o outro. 

Por exemplo: 
<testcases> 
.... 
</testcases>

Você também pode adicionar o atributo "repeat" para repetir um determinado número de vezes que o teste. 
<testcases repeat="5"> 

6 - Variáveis ​​e Constantes

Algumas constantes e variáveis ​​podem ser passadas para o seu teste webinject. 

{TIMESTAMP}: O timestamp atual 
{} PARSEDRESULT: O resultado da resposta analisada a partir de 'parseresponse' parâmetro do teste. 
{} PARSEDRESULT1: O resultado da resposta analisada a partir de 'parseresponse' parâmetro do teste. 
{} PARSEDRESULT2: O resultado da resposta analisada a partir de 'parseresponse' parâmetro do teste. 
{} PARSEDRESULT3: O resultado da resposta analisada a partir de 'parseresponse' parâmetro do teste. 

BaseURL {}: Valor do "baseurl" especificado no arquivo de configuração 
BASEURL1 {}: Valor do 'baseurl1' especificado no arquivo de configuração 
BASEURL2 {}: Valor do 'baseurl2' especificado no arquivo de configuração 

exemplo: 

Se você tem um teste que usa o parâmetro: 
url="http://myserver/test/login.jsp" 
Você pode criar uma linha no arquivo config.xml: 
<baseurl>http://myserver</baseurl> 
Podemos então reescrever o parâmetro do teste: 
url="{BASEURL}/test/login.jsp" 
Aqui está outro exemplo: 

<testcases repeat="1"> 

<testvar varname="LOGIN_URL">http://myserver/login.php</testvar> 
<testvar varname="LOGIN1">bob</testvar> 
<testvar varname="PASSWD1">sponge</testvar> 
<testvar varname="SUCCESSFULL_TEST_TEXT">Welcome Bob</testvar> 

<case 
id="1" 
description1="login test case" 
description2="verify string login" 
method="post" 
url="${LOGIN_URL}" 
postbody="login=${LOGIN1}&passwd=${PASSWD1}" 
verifypositive="${SUCCESSFULL_TEST_TEXT}" 
/> 

</testcases> 

7 - Link

O documento original Webinject 


Nenhum comentário: