Jump to content

Boogerman

Membros
  • Content count

    22
  • Joined

  • Last visited

  • Days Won

    2

Boogerman last won the day on November 10 2017

Boogerman had the most liked content!

Community Reputation

3 Neutro

About Boogerman

  • Rank
    Membro

Profile Information

  • Location
    Palhoça
  1. Olá pessoas, Trabalho como testador e fiz alguns executáveis que rodam vários testes de um sistema que trabalho, rodos esses testes em um servido remoto via wts, porem, só consigo rodar se o wts estiver aberto e na tela, caso eu minimize a tela do wts o script continua rodando mas as validações não funcionam. As validações são simples, algumas se a tela esperada esta aberta, outras se imagem especifica aprece na tela (uso o imagesearch), Existe alguma forma de eu colocar para rodar e fechar ou minimizar o acesso e continuar rodando sem quebrar as validações? Segue exemplo de validações: ;-----Validação simples de tela de faturamento. ;---1º Verifica se tela de faturamento abre após pedido ---- Opt("WinTitleMatchMode", 2) ;Informar para que valide tela que nome contenha o texto - 1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase Local $tela = ("Faturamento") ; nome tela da ação WinWaitActive($tela, "", 5) ; tempo de espera pela tela If WinActivate($tela) Then ; caso tela aberta ControlClick($tela, "", "[CLASS:TcxCustomInnerTextEdit; INSTANCE:1]") ; clica no botão de faturar Else validatelaerros($tela, $linha) EndIf ;----2º Verifica se nota fiscal e apresentada pelo logo do cliente -------------- Global $y1 = 0, $x1 = 0 Global $imagem = _WaitForImageSearch('logocliente.bmp', 10, 0, $x1, $y1, 0) ; Valida se imagem do logo do cliente e apresentada na fatura If $imagem Then send ("{ESC}") Sleep (1000) Send("!+{F4}") ; Alt F4 para fechar danfe Else validatelaerros($tela, $linha) EndIf ;--------3º Informa no log que rodou sem erros ---------- rodou_sem_erros() ;--- funções (a do image search segue anexo com dll que tem de estar no windows) --- Func validatelaerros($tela, $linha) Global $caminhoprint = ("C:\Erros Automação\") _ScreenCapture_Capture($caminhoprint & @ScriptName & ".jpg") ProcessClose("sistema.exe") _FileWriteLog($caminhoprint & "log_de_erros.log", @ScriptName & $linha & $tela) Exit EndFunc ;==>validatelaerros Func rodou_sem_erros() Global $caminho = ("C:\Users\serverteste\Desktop\Rodou na automação\") _FileWriteLog($caminho & "\Rodou.log", @ScriptName & @CR & @HOUR & @MIN) Exit EndFunc ;==>rodou_sem_erros ImageSearchDLL.dll ImageSearch.au3
  2. Senhores, Depois de estudar muito a resposta do Manimal (uma verdadeira aula), consegui uma forma que atende o que preciso. Provavelmente para vcs pode ser uma coisa simples mas demorei entender, por isso estou feliz com o que consegui. Consegui a melhor solução? Consegui a mais pratica? A correta? Não para todas as repostas... Maaaaaasssss e funcional hehehe Obrigado novamente Manimal. Abraços
  3. Caro Manimal, Com a licença do trocadilho vc e realmente "ANIMAL" no melhor sentido da palavra, cara vc e demais. Esse relatório esta perfeito para rodar os executáveis e aprendi bastante com as explicações, Muito obrigado. Porem, contudo, todavia... não e exatamente o que preciso... alias, e mais não e. Deixa eu explicar melhor ver se novamente você pode me ajudar. O que estou fazendo não e um sistema em si e sim a automação de testes de um sistema. Para automação dos testes gerei um executável para cada validação que seja preciso fazer, por exemplo, vamos pensar no login desse sistema com 3 usuários diferentes. A unica coisa que altera nesses 3 casos seriam os usuários e as senhas, para isso criei a função login como variável apenas o usuário e as senhas. Func LOGINSISTEMA($usuario, $senha) ; Sem validação Run("C:\Arquivos de programas\Sistema\sistema.exe") ; abre o sistema Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase $telalogin = ("Login - Sig") ; define a tela que sera aberta no login do sistema $telabemvindo = ("Bem vindo") ; define a tela que sera aberta após login WinWaitActive($telalogin, "", 15) Then ; espera a tela do login abrir por até 15 segundos, se ela abrir segue ControlClick($telalogin, "", "[CLASS:TcxComboBox; INSTANCE:1]") ; Clica no input de usuario Send($usuario) ; Envia o usuario para o campo ControlClick($telalogin, "", "[CLASS:TcxCustomInnerTextEdit; INSTANCE:1]") ; Clica no input de senha Send($senha) Send("{ENTER}") WinWaitActive($telabemvindo, "", 15) Then ; espera a tela do de bem vindo por 15 segundos ControlClick($telabemvindo, "", "[CLASS:TmodButton; INSTANCE:1]") ; Clica no botão OK ProcessClose ("sistema.exe");Fecha o sistema após o login EndFunc ;==>LOGINSISTEMA Com essa função, criei um executável para cada usuário e coloquei em uma pasta. Exemplo: login usuario1.exe login usuario2.exe login usuario3.exe Pronto, no melhor dos mundos, rodava o relatório que vc fez só alterando o caminho da pasta para onde estão os relatórios e pronto. Só que e uma automação dos testes, cade a validação ai? Ele só fez rodar o que pedi e não validou nada em si. Por isso criei as validações como funções, fiz uma para cada tipo de situação ou validação. A mesma coisa fiz para validar se executável rodou sem problemas ou não, no final de cada script de executável ele alimenta um log de execução correta (que esse seria o relatório de execução da duvida inicial) Vamos ver o exemplo do mesmo login, só que agora validando a tela e alimentando o log quando finaliza. Func LOGINSISTEMA($usuario, $senha) ; Com validação Run("C:\Arquivos de programas\Sistema\sistema.exe") ; abre o sistema Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase $telalogin = ("Login - Sig") ; define a tela que sera aberta no login do sistema $telabemvindo = ("Bem vindo") ; define a tela que sera aberta após login If WinWaitActive($telalogin, "", 15) Then ; espera a tela do login abrir por até 15 segundos, se ela abrir segue ControlClick($telalogin, "", "[CLASS:TcxComboBox; INSTANCE:1]") ; Clica no input de usuario Send($usuario) ; Envia o usuario para o campo ControlClick($telalogin, "", "[CLASS:TcxCustomInnerTextEdit; INSTANCE:1]") ; Clica no input de senha Send($senha) Send("{ENTER}") Else validatela() ; Fecha tudo, tira print e manda para o log de erros. EndIf If WinWaitActive($telabemvindo, "", 15) Then ; espera a tela do de bem vindo por 15 segundos ControlClick($telabemvindo, "", "[CLASS:TmodButton; INSTANCE:1]") ; Clica no botão OK ProcessClose("sistema.exe") ;Fecha o sistema após o login Else validatela() ; Fecha tudo, tira print e manda para o log de erros. EndIf logsemerros(); informa para o log que não houve problemas no executavel, se chegou ate aqui e porque passou nas validações acima, logo, esta tudo ok EndFunc ;==>LOGINSISTEMA Func validatela() Global $caminhoerros = ("C:\Users\Pc Gamer\Documents\Erros\") _ScreenCapture_Capture($caminhoerros & @ScriptName & ".jpg") ; tira print da tela que deu erro ProcessClose("sistema.exe") ; fecha sistema _FileWriteLog($caminhoerros & "\log_de_erros.log", @ScriptName) ; Escreve no log de erro o nome do scrpt que deu erro. Exit EndFunc ;==>validatela Func logsemerros() _FileWriteLog("C:\Users\Pc Gamer\Documents\Pssaram\executaveis que rodaram.log", @ScriptName) EndFunc ;==>logsemerros Percebeu a minha dificuldade ai? Só e para ser apresentado no relatório de execução os que chegarem ate o final de cada executável, caso ele não seja executado ate o final ele vai para o log de erros, que seria o relatório dos executáveis que apresentaram erros (esse e outra coisa que uma listagem ja me basta, já tenho pronto). No exemplo que coloquei no vídeo da duvida, eu criei um head por isso, o inicio não muda, porem, ele vai alimentando o arquivo criado para relatório de execução, de acordo com os executáveis que vão passando ou não (no caso os que apresentarem erros nem entram nesse relatório pois não chega na parte que ele escreve no arquivo) Head() ; Faz aquele cabeçario basico sem fazer calculo nenhum; so informando o horário de inicio rodartodos(); função apenas para rodar todos os executáveis que estão dentro da pasta finalpassou() ; função para renomear o arquivo de log do que passou e escrever o horário que terminou de rodar todos os executáveis de pasta Func headpassou() Global $sIniFile = FileOpen("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2) ;=== some lines of text to test: For $i = 1 To 12 FileWriteLine($sIniFile, "") Next FileClose($sIniFile) ;---------------Head de relatorios que rodaram--------------------------- _FileWriteLog("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName, 1) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 1, "-------------------------------------------------------------------------------------------|", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2, "Relatorio de executaveis executados pela automação sem erros. |", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 3, "-------------------------------------------------------------------------------------------|", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 4, " |", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 5, "Inicio da execução: " & @HOUR & ":" & @MIN & ":" & @SEC & " |", True); horário que iniciou todas as execuções _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "") EndFunc ;==>headpassou func rodartodos() $rootFolder = "C:\Users\Pc Gamer\Desktop\Teste"; Psta onde estão os executaveis que serão rodados um a uma $fileArray = _FileListToArray($rootFolder, "*.exe", 1) For $X = 1 To $fileArray[0] RunWait($rootFolder & "\" & $fileArray[$X]) Next EndFunc Func finalpassou() _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "Fim da execução: " & @HOUR & ":" & @MIN & ":" & @SEC & " |", True) $sFileOld = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log" $sFileRenamed = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\Rodaram em " & @HOUR & "hora" & @MIN & "min" & @SEC & "sec.log" FileMove($sFileOld, $sFileRenamed) EndFunc ;==>finalpassou Por fim, o que preciso seria que. 1º O cabeçario do arquivo que vou usar de relatório fosse uma função separada, ele vai ser criado de todo jeito ja que leva o texto inicial, ele apenas seria o ponto de onde buscar o horário inicial da execução de todos os executáveis dentro da pasta. 2º Não e a função que roda todos da pasta que escreve no log. Cada executável dentro da pasta (que a função que roda todos usa), vai informar para o arquivo que foi criado no head seu tempo de inicio e seu tempo final de execução, porem, ele só vai escrever no arquivo no final do seu processo. Para esse caso teria que ser uma função de log no final de cada executável (se não chegar nela deu erro antes, logo nem vai para o relatório), essa função que teria que escrever no log de execução, por executável, a hora inicio, fim e total de cada um. 3º A função do final que também teria que ser separada que iria informar o tempo final de execução de todos os executáveis e o total da diferença do inicio da execução e do final. O total ai seria a difenreça do horário informado no head e o horário final que ela escreve. Com seu relatório e seus exemplos andei bastante mas não consigo fazer o bendito calculo de horário de inicio, fim e total ser por executável. Sem isso não tenho validação. Teria como fazer as funções da forma que explicitei acima? Novamente muito obrigado pela "aula" na resposta anterior. Abraços
  4. Senhores, Pensei em varias formas de como colocar minha necessidade em texto, nenhuma delas conseguiu demonstrar o total de minha necessidade, não quero abusar da boa vontade de vcs mas já abusando, coloquei minha duvida em vídeo... Vídeo com duvida Segue os scripts apresentados no vídeo: #include <File.au3> MsgBox (64,"executavel1","executavel1",3) escreverqueexecutol() func escreverqueexecutol() FileWriteLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName & " " & @hour & ":" & @min & ":" & @sec) EndFunc #include <File.au3> headpassou() rodartodos() finalpassou() Func headpassou() Global $sIniFile = FileOpen("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2) ;=== some lines of text to test: For $i = 1 To 12 FileWriteLine($sIniFile, "") Next FileClose($sIniFile) ;---------------Head de relatorios que rodaram--------------------------- _FileWriteLog("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName, 1) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 1, "-------------------------------------------------------------------------------------------|", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2, "Relatorio de executaveis executados pela automação sem erros. |", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 3, "-------------------------------------------------------------------------------------------|", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 4, " |", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 5, "Inicio da execução: " & @HOUR & ":" & @MIN & ":" & @SEC & " |", True) _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "") EndFunc ;==>headpassou Func finalpassou() _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "Fim da execução: " & @HOUR & ":" & @MIN & ":" & @SEC & " |", True) $sFileOld = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log" $sFileRenamed = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\Rodaram em " & @HOUR & "hora" & @MIN & "min" & @SEC & "sec.log" FileMove($sFileOld, $sFileRenamed) EndFunc ;==>finalpassou func rodartodos() $rootFolder = "C:\Users\Pc Gamer\Desktop\Teste"; PAsta onde estão os executaveis que serão rodados um a uma $fileArray = _FileListToArray($rootFolder, "*.exe", 1) For $X = 1 To $fileArray[0] RunWait($rootFolder & "\" & $fileArray[$X]) Next EndFunc func escreverqueexecutol() FileWriteLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName & " " & @hour & ":" & @min & ":" & @sec); pasta que sera criado o log EndFunc
  5. Perfeito, exatamente o que eu precisava, não fui claro mas realmente eu precisava que ele valida-se os arquivos dentro da pasta. Obrigado pessoal.
  6. Senhores, Preciso de uma função que o gatilho e que se a pasta não estiver vazia seja ativada, se estiver vazia não faça nada. Tentei usar o FileFindFirstFile e o FileExists e ambos não me atenderam. Não sei onde estou errando mas ambos os resultados apresentam a mesma resposta, existindo ou não o arquivo na pasta. ; Tentei das duas formas Func Exemplo() If FileFindFirstFile("C:\Users\Pc\Desktop\Teste") Then MsgBox(64, "", "Existe " ) Else MsgBox(64, "", "Não existe " ) EndIf EndFunc ;==>Example ; existindo ou não apresenta a mesma mensagem Func Exemplo() If FileExists ("C:\Users\Pc\Desktop\Teste") Then MsgBox(64, "", "Existe " ) Else MsgBox(64, "", "Não existe " ) EndIf EndFunc ;==>Example Estou usando a função correta? Qual seria a função ideal para essa verificação? Alguém poderia me dar um exemplo de código simples nesse sentido de validação?
  7. Valeu pessoal, mesmo com as alterações ainda não ficou exatamente como eu queria, porem, contudo, todavia... vai ficar assim mesmo. Obrigado.
  8. Senhores, acho que me expressei mal, fiz um curto vídeo para não ter duvidas de qual a minha necessidade. https://youtu.be/p0d4pbp78HU No vídeo coloquei a forma que estou buscando visualizar a seleção de pastas. Script que cito no vídeo para alteração caso alguém saiba como fazer da forma que preciso. #include <file.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### $Form1_1 = GUICreate("Rodar executaveis", 551, 172, 316, 323) $Group1 = GUICtrlCreateGroup("Seleção", 16, 0, 513, 153) $Label55 = GUICtrlCreateLabel("Pasta", 40, 40, 31, 17) $Input1 = GUICtrlCreateInput("C:\Users\Pc Gamer\Desktop\Teste", 80, 40, 241, 21) $Button1 = GUICtrlCreateButton("Procurar", 328, 40, 99, 25) $Button3 = GUICtrlCreateButton("Rodar exes", 40, 96, 75, 25) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $todos = FileSelectFolder("Procurando pasta 1.", "") If FileExists($todos) Then GUICtrlSetData($Input1, $todos) ; mostrar a pasta selecionada Case $Button3 $Input1 = $todos $rootFolder = $Input1 $fileArray = _FileListToArray($rootFolder, "*.exe", 1) For $X = 1 To $fileArray[0] RunWait($rootFolder & "\" & $fileArray[$X]) Next EndSwitch WEnd
  9. Senhores, tentei com a indicação do Manimal e não consegui. Na forma do post eu visualizei a outra tela, mas não apresenta todos os arquivos dentro da pasta. Algumas pastas coloquei na area de trabalho e essas nem consegui encontrar pelo script do post.
  10. Pessoas, Fiz o código abaixo para rodar vários executáveis que estiverem dentro de uma pasta que sera selecionada. #include <file.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### $Form1_1 = GUICreate("Rodar executaveis", 551, 172, 316, 323) $Group1 = GUICtrlCreateGroup("Seleção", 16, 0, 513, 153) $Label1 = GUICtrlCreateLabel("Pasta", 40, 40, 31, 17) $Input1 = GUICtrlCreateInput("", 80, 40, 241, 21) $Button1 = GUICtrlCreateButton("Procurar", 328, 40, 99, 25) $Button3 = GUICtrlCreateButton("Rodar exes", 40, 96, 75, 25) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $Label1 = FileSelectFolder("Procurando pasta 1.", "") If FileExists($Label1) Then GUICtrlSetData($Input1, $Label1) ; mostrar a pasta selecionada Case $Button3 $fileArray = _FileListToArray($Label1, "*.exe", 1) For $x = 1 To $fileArray[0] ShellExecuteWait($Label1 & "\" & $fileArray[$x]) Next EndSwitch WEnd O FileSelectFolder seleciona a pasta, mas na seleção não mostra o conteúdo da pasta, eu precisaria que na seleção apresenta-se o conteúdo da pasta , assim, sabendo o conteúdo da pasta que eu iria selecionar somente a pasta e rodar todos os executáveis que estiverem dentro dela. Tem como fazer com FileSelectFolder isso ou teria que usar outra coisa?
  11. Antes tarde do que nunca. Desculpem a demora mas segue os arquivos que usei. OBS: Em windows 64 bits tem de colocar para rodar como 64x, não roda direto do scite. ImageSearch.rar
  12. Olá amigos, Venho pedir ajuda de vocês em algo diferente, espero que possa usar esse espaço para esse tipo de duvida (caso não so exclui o post ai admins e desculpa qualquer coisa). Sou bacharel em administração mas sempre trabalhei na área de sistemas, como tester, suporte, consultor de implantação e analista de testes. Gosto muito da área de testes, vejo um constante crescimento e valorização da área de testes automatizados e gostaria de me tornar um especialista na área. Não tenho muito conhecimento em programação nem qualificação acadêmica de sistemas. Mas separei um dinheiro que gostaria de investir em minha qualificação. Inicialmente pensei em cursar uma segunda graduação voltada para área de sistemas, porem, não sei se e o caminho correto visto que o que quero não e ser um programador, sei que e necessário programar, mas não sei se seria necessário uma nova graduação ao invés de apenas um curso especifico para aprender o que preciso programar na área de automação. Diante do exposto, venho pedir a ajuda de vocês. Qual o caminho trilhar para me tornar um profissional na área de testes automatizado? Quais cursos devo fazer? Quais ferramentas conhecer/dominar? Quais certificados buscar para ter um diferencial no mercado? Essa área esta realmente boa pra seguir? caso não, qual outra poderia seguir ? Espero pode contar com as dicas de vocês.
  13. Pessoas vcs demais, Manimal obrigado pela "Aula", pq isso não foi resposta, foi uma aula mesmo. Muito obrigado mesmo. Abraços
  14. Olá pessoal, antes de qualquer coisa... Obrigado pela força. Vou tentar ser mais claro agora da minha necessidade. Fiz a automação de um sistema que gera um arquivo TXT (EFD contribuições). Ate a geração do arquivo consegui automatizar com o autoit, preciso de um script que compare um arquivo que sei que esta perfeito com o arquivo gerado pela minha automação. Os arquivos sendo iguais me indicaria que esta tudo bem com a nova versão do sistema (visto que o arquivo que ele compara esta com o resultado esperado ao que deve ser gerado). Preciso que seja verificado o conteúdo do arquivo. EX de diferença: Linha 1 arquivo "correto": [000]teste de validação Linha 1 arquivo "gerado": [000]teste de validaçao "Arquivos não são iguais" Não preciso que me mostre onde esta a diferença (isso trato manualmente), mas tem de identificar qualquer diferença e apresentar mensagem indicando a diferença, no caso acima a diferença foi o ~ Os códigos enviados pelo Orver e pelo Luigi mostram resultados iguais para arquivos com dados diferentes, ou me mostram que arquivos são iguais, mesmo com conteúdos diferentes ou que são diferentes mesmo com conteúdos iguais. Não sei se e possível um validador assim como preciso ... respondendo o Manimal @@Manimal, "Pelo que entendi, sua necessidade é apenas verificar se os arquivos são iguais ou não, independente de verificação do conteúdo interno, isso?" O que preciso validar e justamente o conteúdo interno do arquivo. Os arquivos vão sempre estar no mesmo formato, se validar somente o formato ele sempre vai dizer que esta igual. Obrigado pela força pessoal
  15. Mais ou menos, não precisa de um erro de comparação especificando onde esta errado, basta apresentar uma mensagem informado que tem algo errado, dai trato de outra forma. Como disse antes, tô começando na programação agora... como seria esse script conferindo linha a linha e apresentando a mensagem quando encontrar alguma linha diferente?
×