how handle exception soapui groovy scripts soapui tutorial 11
Neste tutorial de SoapUI, veremos o tratamento de exceções usando scripts Groovy. O tratamento de exceções de tempo de execução no groovy é semelhante ao Java, pois as bibliotecas Java são integradas. No entanto, discutiremos os conceitos básicos em SoapUI e nos aprofundaremos no tratamento de exceções em Java.
Isto é tutorial # 11 na série de tutoriais SoapUI . Este é o último tutorial para a versão gratuita do SoapUI. Há mais alguns tópicos restantes nesta série que são sobre recursos do SoapUI pro, serviços REST e SOAP e testes orientados a dados no SoapUI.
Vamos começar com uma breve introdução a uma exceção:
O que é uma exceção?
A exceção é um erro encontrado durante a execução de um programa. Isso pode acontecer por vários motivos, como dados inválidos, perda de conexão de rede, tentativa de abrir arquivos que não estão disponíveis, acesso de classe inválida, vazamento de memória, ou seja, forçar o sistema a trabalhar com uma grande quantidade de dados, servidor de banco de dados sem resposta etc. Esses erros pode ser por causa de usuários, desenvolvedores ou recursos de hardware.
Internamente, quando uma exceção é encontrada durante a execução, SoapUI tentará encontrar o manipulador. Handler é o bloco que contém o código para capturar a exceção.
As exceções são categorizadas em dois tipos:
- Exceção de tempo de execução
- Exceção de tempo de compilação - não aplicável a SoapUI, pois não tem um compilador explícito
Observe a captura de tela a seguir, que nos mostra uma exceção de tempo de execução para código inválido. No script a seguir, tentamos dividir um inteiro por 0. Na caixa de diálogo de erro, pode-se ver que a exceção é gerada a partir de bibliotecas java e a mensagem de erro é Divisão por zero .
Podemos capturar essa exceção durante a execução e tratá-la programaticamente. Antes disso, veremos algumas das palavras-chave importantes que são usadas nos conceitos de exceção do java. Algumas das palavras-chave também podem ser usadas no script bacana. Eles estão:
- Lançar - Esta palavra-chave nos ajuda a lançar uma exceção manualmente, ou seja, lançar exceções definidas pelo usuário
- Lança - É usado para chamar as exceções pré-definidas da definição do método. Portanto, ele capturará a exceção se houver algum erro de tempo de execução encontrado durante a execução.
- Tentar e Pegar - a palavra-chave “try” é usada com a palavra-chave “catch”. Se pudermos prever a parte do programa onde a exceção pode surgir durante a execução, podemos usar o bloco “try” nesse lugar. No final do bloco “try”, o bloco “catch” deve começar a capturar uma exceção. Dentro do bloco catch, temos que escrever o manipulador para tratar a exceção.
- Finalmente - Este é o bloco padrão e opcional na estrutura de exceção. Se precisarmos que alguma instrução seja executada no final do programa, como limpar objetos não usados, fechar conexões, etc., isso pode ser feito dentro deste bloco.
A seguir está a estrutura geral de uma exceção:
tentar
{
}
catch
{
}
finally
{
}
Now let us implement the exception handler in the sample code which we have already seen in the screenshot.
Add new test suite under the GlobalWeather project. Then add a test case and groovy script test step under the test step. In the script editor, enter the following script.
// initializing the variables int a = 10; int b = 0; // try, catch block try { // Dividing a number by zero int c = a/b; log.info('Result :' + c); } catch(Exception expObj) { // Exception Handler log.info('You are trying to divide ' + a + ' by ' + b + '. This is not possible actually!'); }
O script acima produz o seguinte resultado, conforme mostrado na imagem.
Como discutimos anteriormente, tentamos dividir “A” “B” que é zero. Assim, o bloco ‘catch’ é executado e mostra a mensagem definida pelo usuário no log. Veja que na declaração 'catch', usamos Exceção classe que é a superclasse em Java para todas as exceções integradas. Todas as classes de exceção predefinidas são herdadas de Exceção aula. Para lidar com exceções de tempo de execução imprevisíveis, podemos usar Exceção classe no bloco “catch”.
Vamos agora modificar o script acima para obter o resultado desejado. Veja a seguinte captura de tela:
Vamos agora tentar isso em nossos testes regulares de serviços da web. No script a seguir, não usamos o bloco try-catch, portanto, obteremos a exceção de tempo de execução.
// Initializing array with 5 elements String() countryNames = new String(5); // Assigning values to the array countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; // Iterate the array elements and assign value to the global property for(int idx=0; idx<=5; idx++) { com.eviware.soapui.SoapUI.globalProperties.setPropertyValue( 'CountryName', countryNames(idx)); def testStep = testRunner.testCase.testSteps('GetCitiesByCountry'); testStep.run(testRunner,context); log.info('Executed at ' + idx + ' times!'); }
O script acima irá lançar uma exceção chamada Índice de matriz fora dos limites de exceção porque o script está tentando acessar um índice de array inválido, ou seja, 5 que não está disponível.
(Clique na imagem para ver ampliada)
Como você pode ver no script acima, inicializamos o array “countryNames” com o tamanho de cinco. Ele aceita apenas cinco valores de string, ou seja, nomes de países. Dentro das declarações iterativas, verificamos como idx<= 5 . Portanto, o loop estará iterando até 6 vezes e tentará pesquisar 6ºelemento na matriz. Como o valor não estará lá, ele lança uma exceção de tempo de execução.