Jump to content
richardwareal

Capturar erros (exceptions) de outras aplicações

Recommended Posts

Bom dia pessoal!

 

Estou trabalhando em um projeto de automação de testes de aplicações desktop. Todo o teste já está automatizado, porém, não sei como capturar o erro caso a aplicação testada falhe e apresente uma mensagem de erro inesperada.

 

Alguém consegue me ajudar?

 

Desde já agradeço.

 

Atenciosamente,

 

Ricardo Alves Oliveira.

Share this post


Link to post
Share on other sites

@richardwareal

bem vindo ao fórum!
Quando li o enunciado do seu post, a primeira coisa que me veio em mente foi o try catch do php, se você procura algo como isso no AutoIt, exatamente assim não vai encontrar, com uma forma um pouco diferente, logicamente, é uma linguagem diferente.
Outro ponto, o sistema de erros do AutoIt não é tão genérico quanto um try...catch, quero dizer, você vai ter que estudar a linguagem e aplicar as mensagens de erro meio que comando à comando, desanimou? Não desanime, é fácil.
Exemplo 1
Local $sVar = "teste"
ConsoleWrite("Escrever $sVar[ " & $sVar & " ]" & @LF)
If @error Then
    ConsoleWrite("houve erro" & @LF)
Else
    ConsoleWrite("sucesso" & @LF)
EndIf

De uma forma genérica, execute o comando e na próxima linha escreva um:

If @error then...

ou até um...

Switch @error
   case 1
   case 2
   case 3
   case else
EndSwitch

Dependendo do comando, o @error pode retornar diversos valores no @error, mas nem sempre a presença de um valor no @error é um erro.

Não sei demonstrar um exemplo neste momento.

 

Mas a regra geral é:

Se @error = 0 ou not @error, está tudo certo, não tem erro!

Se @error <> 0 ou @error, ops, tem erro!

Mas a análise do @error, tem que estar na linha subsequente ao comando.

 

Use o HELP do AutoIt, assim você percebe quais comandos retornam erro e quais os valores do @error.

[]'s

Share this post


Link to post
Share on other sites

@richardwareal

bem vindo ao fórum!
Quando li o enunciado do seu post, a primeira coisa que me veio em mente foi o try catch do php, se você procura algo como isso no AutoIt, exatamente assim não vai encontrar, com uma forma um pouco diferente, logicamente, é uma linguagem diferente.
Outro ponto, o sistema de erros do AutoIt não é tão genérico quanto um try...catch, quero dizer, você vai ter que estudar a linguagem e aplicar as mensagens de erro meio que comando à comando, desanimou? Não desanime, é fácil.
Exemplo 1
Local $sVar = "teste"
ConsoleWrite("Escrever $sVar[ " & $sVar & " ]" & @LF)
If @error Then
    ConsoleWrite("houve erro" & @LF)
Else
    ConsoleWrite("sucesso" & @LF)
EndIf

De uma forma genérica, execute o comando e na próxima linha escreva um:

If @error then...

ou até um...

Switch @error
   case 1
   case 2
   case 3
   case else
EndSwitch

Dependendo do comando, o @error pode retornar diversos valores no @error, mas nem sempre a presença de um valor no @error é um erro.

Não sei demonstrar um exemplo neste momento.

 

Mas a regra geral é:

Se @error = 0 ou not @error, está tudo certo, não tem erro!

Se @error <> 0 ou @error, ops, tem erro!

Mas a análise do @error, tem que estar na linha subsequente ao comando.

 

Use o HELP do AutoIt, assim você percebe quais comandos retornam erro e quais os valores do @error.

[]'s

 

Bom dia @Luigi!!! Muito obrigado pela atenção e pela rica informação.

 

Porém, na verdade meu problema é diferente. Eu estou construindo uma ferramenta para automatizar testes de uma aplicação de contabilidade. Por exemplo: Eu construí uma rotina em Autoit que lê um excel e faz cadastros automaticamente no outro sistema que foi desenvolvido em VB 6. Porém, eu preciso saber se a aplicação em VB 6 retornou algum erro para que eu possa gerar um relatório de erros no AutoIt informando o erro da aplicação VB 6 e até mesmo interromper o script no cadastro dos orçamentos.

 

Resumindo... preciso que minha aplicação AutoIt identifique erros apresentados pela aplicação VB6.

 

Agradeço imensamente o apoio desde já.

 

Qualquer dúvida estou à disposição.

Share this post


Link to post
Share on other sites

A parte de identificar erros no VB6, você não tinha dito anteriormente, essa, por hora, não tenho ideia de como te ajudar...

Não sei como o AutoIt está tratando esta parte.

 

Sorry.

Share this post


Link to post
Share on other sites

A parte de identificar erros no VB6, você não tinha dito anteriormente, essa, por hora, não tenho ideia de como te ajudar...

Não sei como o AutoIt está tratando esta parte.

 

Sorry.

 

Mais uma vez obrigado pela atenção @Luigi. Realmente o meu post ficou pobre de informações.

 

Muito obrigado pelo apoio.

 

Vou continuar pesquisando, caso encontre a solução posto aqui.

 

Valeu!

Share this post


Link to post
Share on other sites

Boa tarde,

 

Pelo o que eu entendi, não parece algo muito difícil... Se a aplicação em VB6 exibir uma janela quando o erro ocorre, você pode usar o script em autoit para monitorar o aparecimento da janela.... Algum loop ou checks no seu script usando um "WinExists" deve resolver.... Inclusive existem comandos para ler o conteúdo da janela, o próprio "WinExists" pode ser usado dessa forma...

 

Att,

Antony Gabarron

Share this post


Link to post
Share on other sites

Boa tarde pessoal!

 

Boa tarde @antony-ag. Acabei encontrando uma solução bem parecida com o que você sugeriu!

 

Talvez não seja a melhor solução, mas atende o que preciso. Eu coloquei neste exemplo só um tipo de erro que fico monitorando, porém no meu programa coloquei todos os possíveis erros retornados por uma aplicação construída em VB6. Segue exemplo...

 


#include <MsgBoxConstants.au3>
 
Global $sTexto
 
MsgBox(0,"", "Iniciar?")
 
While 1
CapturaErro()
WEnd
 
Func CapturaErro()
 
$sTexto = WinGetText("[ACTIVE]")
 
$iPosicao = StringInStr($sTexto, "MSRDO")
 
if $iPosicao > 1 Then
MsgBox($MB_ICONERROR, "Erro durante o teste", "Erro detectado na aplicação testada! O teste será interrompido e um relatório será gerado!")
Sleep(500)
 
Exit
EndIf
 
EndFunc

Muito obrigado a todos pela atenção.
  • Like 1

Share this post


Link to post
Share on other sites

Bom dia richardwareal, estou trabalhando em uma situação igual a sua, testando aplicação vb6, e para resolver essa questão eu fiz assim:

 

Eu coloquei vários Case informando os erros esperados dentro da aplicação,então quando esse erro acontece eu adiciono um novo case. Ainda estou apanhando um pouco, mas está indo.

 Case (StringInStr(StringIsUpper($sTexto), StringIsUpper("MSRDO"))) > 1 ;' erro 1
            $QuantidadeErros = $QuantidadeErros + 1
			_CapituraInformacaoErro($evento & String( @CRLF)  &  "  maior que suportado." & String( @CRLF)  &  WinGetText("[ACTIVE]") )
			Send("{ENTER}")
			PreencheErroQuantErroVezes(1,"  maior que suportado.")
		    $EnterropeExecucaoTeste  =  "S"

Abraço!

  • Like 1

Share this post


Link to post
Share on other sites

Boa tarde pessoal!

 

Tenho desenvolvido scripts de testes automatizados também, mesma situação em que vcs se encontram, sendo que minha aplicação é desenvolvida em Delphi.

Pelo que eu entendi nos post vcs não utilizam da função @error ou @extended (para maior detalhamento), como o Luigi explicou, acho muito interessante a função.

O problema é que deverá ser tratado em toda e após a função executada, onde no meu caso é muita coisa pois possuo formulários com muitos campos que habilitam e desabilitam conforme as regras de negócio.

Aqui eu faço todo o disparo de exceção (no caso erro) para um arquivo de LOG.

 

Acho interessante trocarmos umas idéias pois ferramentas de automação são poucas free para aplicações desktops e no caso do autoit é muito interessante pois depende de vc (desenvolver) e não te limita como outras ferramentas pagas que possuem valor exorbitante.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×