Asserções em SoapUI: Tutorial de scripts, XQuery, tipos XPath
O que é uma afirmação?
Asserção significa ato de afirmar ou afirmar algo. Também pode ser interpretado como ponto de verificação ou ponto de validação.
Assim que uma solicitação é enviada a um servidor web, uma resposta é recebida. Precisamos validar se a resposta contém os dados que esperamos. Para validar a resposta, precisamos usar asserções.
Tipos de afirmação
Existem várias maneiras de afirmar uma resposta; no entanto, nos concentraremos nos tipos de asserções SoapUI comumente usados ao validar uma resposta. Abaixo estão os que estão disponíveis na versão Open Source do SoapUI.
- Conteúdo da Propriedade
- Padrão de status de conformidade
- Script
- SLA
- JMS
- Segurança
Além dos listados acima, a versão PRO também possui uma Asserção JDBC embutida, com a qual podemos afirmar se o serviço web atualizou o banco de dados corretamente.
CONTÉM Asserção
Pesquisa a existência da string especificada. Ele também oferece suporte a expressões regulares.
Continuaremos com o mesmo exemplo do tutorial anterior com solicitação WSDL como http://www.dneonline.com/calculator.asmx.
- Por padrão, não há afirmações.
- O número de asserções é mostrado na guia Asserções.
- Para adicionar uma nova asserção, clique no botão 'Adicionar nova asserção'.
- Agora,
- Selecione a categoria de afirmação.
- Selecione o tipo de declaração.
- Clique em 'Adicionar'
- Vamos validar se a string '46' existe na resposta. Clique OK'
Nota: Também podemos ignorar maiúsculas e minúsculas e adicionar expressões regulares.
- Ao adicioná-lo, imediatamente a asserção é executada e mostra se VALID ou INVALID.
- Agora digamos que alteramos o conteúdo de 'Contains Assertion in SoapUI' para '47' e vejamos o que acontece.
- A Asserção é executada e o resultado é lançado ao usuário. Como não temos a string '47' na resposta, a afirmação falhou.
NÃO CONTÉM Asserção
Pesquisa a inexistência da string especificada. Ele também oferece suporte a expressões regulares.
- Agora, depois de clicar no botão 'adicionar novas asserções',
- Selecione a categoria de afirmação.
- Selecione o tipo de declaração – neste caso 'NOT Contém'
- Clique em 'Adicionar'
- Vamos validar se a string 'intA' existe na resposta. Digite a string 'FromCurrency' e clique em 'OK'
- Assim que uma asserção é adicionada, ela é executada e exibe o resultado. Até agora, adicionamos duas asserções, portanto, ambas as asserções são executadas e o resultado é exibido.
- Agora vamos alterar o conteúdo da 'Asserção Não Contém' e ver o que acontece. Verificaremos a inexistência da string “AddResult”.
Passo 5: A string 'AddResult' está realmente presente na resposta, portanto a afirmação 'NOT Contém' falhará conforme mostrado abaixo.
Asserção de correspondência XPATH
Uso XPath expressão para selecionar o nó de destino e seus valores. XPath é uma linguagem de consulta XML para selecionar nós de um documento XML.
- Agora, depois de clicar no botão 'Adicionar novas asserções',
- Selecione a categoria de afirmação.
- Selecione o tipo de afirmação – neste caso 'XPath Match'
- Clique em 'Adicionar'
- A janela Adicionar XPath é aberta.
Antes de adicionar o SoapUI XPath, precisamos declarar o NameSpace. Um namespace XML é uma coleção de nomes, identificados por uma referência Uniform Resource Identifier (URI), que são usados em documentos XML como nomes de elementos e atributos. O mesmo é usado na asserção XPath da UI SOAP.
Para declarar o namespace XML, só precisamos clicar no botão 'Declarar', que faria o trabalho para nós, caso contrário, também podemos declarar manualmente um namespace.
Depois de declarar o namespace, precisamos referir o XPath usando o namespace criado.
Ao clicar no botão 'Declarar', dois namespaces aparecerão, pois temos dois URIs. Um deles é o URL do esquema e o outro corresponde ao URL real do serviço web. Precisamos usar o namespace real onde o serviço da web está localizado e NÃO o namespace do esquema ao fazer referência ao XPath.
declare o espaço para nome soap='http://schemas.xmlsoap.org/soap/envelope/';
declare o espaço para nome ns1='http://tempuri.org/';
- Agora precisamos inserir o XPath do nó XML que precisamos validar.
//ns1:AddResult nos dá o valor do nó entre & e ns1 corresponde ao namespace declarado que aponta para 'http://tempuri.org/'
Após inserir o XML, precisamos clicar em 'Selecionar do atual' para que o valor da resposta atual seja obtido para comparação daqui para frente.
- Até agora,
- Depois de declarar os namespaces, inserimos o XPath do nó XML que precisamos validar.
- Precisamos clicar em 'Selecionar do atual' para tornar o valor atual o valor esperado.
- O valor atual é mostrado ao usuário e podemos modificá-lo se necessário.
- Clique em 'Salvar'.
- A afirmação adicionada no SoapUI será exibida conforme mostrado abaixo.
Asserções de script
Esta técnica de asserção é a mais utilizada, pois é extremamente difícil gerenciar e manter centenas de asserções.
A UI SOAP usa Groovy Script ou JavaScript para asserções de script. A técnica de script é adotada para desenvolver um framework para teste de SOAP. Asserções de script são usadas nas seguintes circunstâncias.
O script permite que o usuário execute algumas operações antes e depois de executar um TestCase usando métodos de configuração e desmontagem, respectivamente. Configurar é um procedimento que é executado antes de executar um método específico (exemplo - Criação e inicialização de objeto), enquanto desmontar é um procedimento que é executado após a execução do método (por exemplo: Destruir objetos e limpar). Este recurso não está disponível em outros tipos de Asserção e só pode ser feito por meio de codificação.
Ele permite aos usuários abrir/fechar um projeto, para inicializar ou limpar as configurações relacionadas ao projeto e também trabalhar com variáveis ambientais, o que é muito útil durante a criação de scripts.
Isso nos ajuda a afirmar um conteúdo de resposta dinâmico.
Asserções de script são usadas para criar asserções definidas pelo usuário que NÃO são predefinidas pela UI SOAP.
Para Demonstrar asserção de Script no SoapUI, faremos uso da calculadora WSDL, o caso de teste 'Add' que criamos anteriormente.
- As etapas para adicionar um script bacana são as mesmas de outras asserções, exceto que a asserção não é predefinida. Em vez disso, é uma afirmação definida pelo usuário que oferece maior flexibilidade do que as inerentes.
Selecione a etapa de teste na qual a asserção deve ser adicionada.
Clique no botão 'Adicionar Asserção' conforme mostrado abaixo.
- Agora selecione a categoria Asserção.
- Neste caso é Script.
- Selecione SoapUI Script Assertion e não há subtipos associados a ele.
- Clique em 'Adicionar'.
- A caixa de diálogo Scripting é aberta, onde o usuário poderá escrever um script definido pelo usuário para validar o XML de resposta.
- Agora vamos escrever um script interessante para validar a taxa de conversão. O script está anexado abaixo com os comentários incorporados. Recomenda-se ter conhecimento sobre Java Roteiro ou Groovy Script antes de tentar escrever seu próprio script.
//Define Groovy Utils and holder for validating the XML reponse content def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) def holder = groovyUtils.getXmlHolder(messageExchange.responseContent) //Define the NameSpace holder.namespaces["ns1"] = "http://tempuri.org/" //Get the Value of the Node 'AddResult' and assign to a variable def addResult = holder.getNodeValue("//ns1:AddResult") //print the value of the result in the Output panel log.info "The result value for integers is " + addResult //Comparing the value to print 'Pass' or 'Fail' if(addResult=="46") { log.info "Pass" } else { log.info "fail"}
- Clique no botão 'Executar' para acionar a execução.
- A saída do Script é mostrada no painel Saída. Ele imprimiu tanto o valor de conversão quanto o resultado final (aprovado ou reprovado)
- As informações são exibidas como 'Asserção de script aprovada'. Clique OK.
Nota: O pop-up de informações final sempre será exibido com a mensagem 'Script Assertion Passed', desde que o script esteja sintaticamente correto. Não há correlação com sua afirmação no script.
clique em OK
- Agora a guia de asserção exibe todas as asserções que adicionamos para este conjunto de testes com o status de cada uma delas.
- Atual
- Selecione o Test Suite na árvore do Navigator
- Clique no botão 'Executar'
- Os resultados seriam exibidos para todo o conjunto de testes.
Asserção de correspondência Xquery
Ele usa uma expressão Xquery para selecionar o conteúdo da propriedade de destino. Precisamos de um XML de resposta muito maior para entender melhor a asserção XQuery no SoapUI. Vamos importar outro WSDL conforme mostrado abaixo: http://www.webservicex.net/medicareSupplier.asmx?WSDL
- Clique com o botão direito no projeto existente e selecione 'Adicionar WSDL'.
- Clique com o botão direito no projeto existente e selecione 'Adicionar WSDL'. Deixe as outras opções como padrão e clique no botão 'OK'.
- Todas as operações estão listadas conforme mostrado abaixo.
- Agora vamos adicionar um Caso de teste dentro do mesmo conjunto de testes que criamos para Ensaios o conversor de moeda.
- Digite o nome do caso de teste e clique no botão 'OK'
- O caso de teste é criado conforme mostrado abaixo.
- Adicione
uma nova etapa de teste do tipo 'Soap Test Request' conforme mostrado abaixo.
- Insira o nome da etapa de teste. Digamos – Fornecedor_por_Cidade que seria mais significativo Clique em 'OK'.
- Selecione os Operaque gostaríamos de validar. Neste caso é 'MedicareSupplierSoap -> GetSupplierByCity'. Clique em 'OK'.
- Insira o nome do caso de teste e clique em 'OK'.
- O esboço XML da solicitação seria exibido conforme mostrado abaixo.
- Agora vamos encontrar todas as informações de fornecedores da cidade de 'Nova York'.
Para fazer isso, adicione as seguintes linhas ao seu código.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL no URL abaixo – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
- Ao executar o teste, recebemos a resposta abaixo
- Digamos que precisamos validar todos os números do fornecedor. Não podemos usar asserção XPath porque precisamos ter centenas de asserções XPath. Portanto, o uso de XQuery é inevitável neste caso.
Asserção XQuery nos ajuda a validar um grupo de respostas XML que são de natureza repetitiva.
- Agora clique em 'Adicionar uma afirmação',
- Selecione a 'Categoria de Asserção' – Conteúdo da Propriedade neste caso.
- Selecione o tipo de declaração como 'Asserção XQuery'
- Clique em 'Adicionar'.
- Semelhante à afirmação XPath, precisamos declarar o namespace.
-
Clique no botão 'Declarar' para permitir automaticamente que a UI SOAP declare o namespace. Ao clicar no botão declarar, um 'POP up' com a mensagem 'declarar namespace do esquema' será exibido ao usuário. Clique em 'Sim' para prosseguir conforme mostrado abaixo.
Nota: Ao clicar no 'botão Declarar', você pode acabar com URLs diferentes como declaração de namespace; no entanto, o namespace real do local do serviço da Web é o que seria considerado para codificação.
- Para recuperar todos os Números do Fornecedor, precisamos escrever uma Consulta XPath e iremos colocá-la dentro de <NumberNumber> e Tag.
- Clique em 'Selecionar do atual' que será executado a partir da resposta atual.
- Ao clicar em 'Selecionar do atual', todos os números do fornecedor serão listados.
- Clique em 'Salvar'.
// Namespace declaration declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/'; declare namespace ns1='http://www.webservicex.net/'; declare namespace x = ''; // Placing the result in Myresult Tags{ // Iterating through all the supplier number for $x in //ns1:GetSupplierByCityResponse/ns1:SupplierDataLists/ns1:SupplierDatas/ns1:SupplierData //Return all the Supplier number within ‘SupplierNumber’ Tags. return {data($x/ns1:SupplierNumber)} }
- A Asserção XQuery é executada e exibe o resultado final no painel 'Asserção' conforme mostrado abaixo. Agora adicionamos com sucesso uma afirmação Xquery com a qual validamos todas as informações do número do fornecedor. O mesmo seria comparado com os reais, toda vez que a solicitação fosse enviada ao servidor web.
Nota: Os valores reais não serão exibidos. Se todos os valores reais forem iguais aos valores esperados, ele exibirá VALID, caso contrário, exibirá 'Falha'.
Quando usar asserção embutida?
- Quando uma resposta é curta, pode ser validada usando uma dessas asserções embutidas.
- Também podemos usar Inbuilt Assertion se a resposta enviada do servidor web for sempre de natureza estática. Se for dinâmico, não seremos capazes de afirmá-lo usando asserções embutidas.
- Quando o uso de asserções embutidas, como asserções de tempo limite e asserções de segurança, torna-se inevitável.
- Asserções embutidas funcionam muito bem para uso único, onde os testes não precisam ser repetidos.
Opções de asserções
As asserções criadas podem ser melhor controladas com a ajuda do painel de controle destacado abaixo.
As asserções criadas permitem que os testadores configurem os seguintes itens na caixa de ferramentas de asserções.
Opção | Descrição |
---|---|
|
A Asserção selecionada sobe na ordem. |
|
A Asserção selecionada desce na ordem. |
|
Remove a afirmação selecionada |
|
Reconfigure/edite a asserção selecionada. |
- Abaixo estão os recursos disponíveis exclusivamente na versão PRO do SOAP UI. A versão PRO também nos ajuda a agrupar asserções para que possamos adicionar mais uma camada de validação às asserções criadas.
- A versão Pro também permite Clonagem de Asserções: esta opção permite que os testadores copiem uma asserção para uma etapa de teste diferente no mesmo projeto ou em um projeto diferente.
- Desabilitar/Habilitar Asserções: Esta opção permite que qualquer asserção agrupada ou desagrupada seja desabilitada ou habilitada. Se uma asserção estiver desabilitada, ela ficará esmaecida e quando um Caso de Teste for executado, as asserções desabilitadas não serão executadas.
- Desagrupar Asserções: Quaisquer asserções agrupadas podem ser desagrupadas se os testadores decidirem fazê-lo.
E: Todas as asserções são avaliadas como asserções VÁLIDAS, o que resultará na condição de grupo PASSADA. OU: Pelo menos uma das asserções dentro do grupo deve ser VÁLIDA para declarar uma condição de grupo PASSADA.
Lista completa de métodos disponíveis em vários tipos de asserção
Mecanismo de afirmação |
Descrição |
CONTEÚDO DA PROPRIEDADE | |
contém | Pesquisa a existência da string especificada. Ele também oferece suporte a expressões regulares. |
Não contém | Pesquisa a inexistência da string especificada. Ele também oferece suporte a expressões regulares. |
Correspondência XPath | Usa a expressão XPath para selecionar o nó de destino e seus valores. |
Correspondência XQuery | Usa uma expressão Xquery para selecionar conteúdo da propriedade de destino. |
Conformidade, Status, Padrões | |
HTTP Baixar todos os recursos | Valida o documento HTML após o download e é válido para qualquer propriedade que contenha HTML. |
Códigos de status HTTP inválidos | Verifica se a resposta HTML contém um código de status que não está na lista de códigos definidos. |
Não é falha do SOAP | Verifica se a última mensagem recebida não é uma falha SOAP. É muito óbvio que é aplicável apenas para etapas de teste SOAP. |
Conformidade do esquema | Verifica se a última mensagem recebida é compatível com a definição de esquema padrão WSDL ou WADL. É válido para etapas de teste SOAP e REST. |
Falha de SOAP | Verifica se a última mensagem recebida é uma falha SOAP. É o inverso das asserções de falha 'NOT SOAP'. |
Resposta SOAP | Verifica se a última resposta recebida é uma resposta SOAP válida e é válida somente para etapas de solicitação de teste SOAP. |
Códigos de status HTTP válidos | Verifica se a resposta HTML contém um código de status que está na lista de códigos definidos. É o inverso da afirmação 'Códigos de status HTTP inválidos'. |
Solicitação de endereçamento WS | Verifica se a última solicitação recebida contém cabeçalhos WS-Addressing apropriados. |
Resposta de endereçamento WS | Verifica se a última resposta recebida contém cabeçalhos WS-Addressing apropriados. |
Status de segurança WS | Valida se a última mensagem recebida contém cabeçalhos WS-Security válidos e é válida apenas para solicitações SOAP. |
Script | |
Asserção de script | Permite que os usuários executem um script personalizado para realizar validações definidas pelo usuário. |
SLA | |
SLA de resposta | Valida se o tempo de resposta da última resposta recebida estava dentro do limite definido. |
JMS | |
Status JMS | Verifica se a solicitação JMS da Etapa de Teste foi executada com êxito e é válida para Etapas de Teste com um terminal JMS. |
Tempo limite do JMS | Verifica se a resposta JMS de uma etapa de teste não demorou mais que a duração especificada. |
Segurança | |
Exposição de informações confidenciais | Verifica se a mensagem de resposta não expõe informações confidenciais sobre o sistema de destino. Podemos usar esta afirmação para etapas de teste REST, SOAP e HTTP. |
BAIXE O PROJETO SOAPUI CONTENDO AS ASSERÇÕES ACIMA
Erros comuns e solução de problemas
Use o namespace correto. O Namespace deve ser a URL onde o serviço web está localizado.
Se ocorrer um erro durante o desenvolvimento de uma asserção de script, use 'log.info' para imprimir o conteúdo das variáveis
Se você não obteve a saída desejada, verifique se uma entrada válida foi passada na solicitação.
Por exemplo, no conversor de moeda, se você inserir 'intA' como 'x', que não é um número inteiro, a saída gera um código de falha como 'SOAP-Client', o que significa que o problema está no parâmetro que está sendo passado do lado do cliente.
Certifique-se de usar a sintaxe correta ao usar a asserção XPATH e XQuery. Você NÃO deve usar ponto(.) em vez de dois pontos(:) ao usar a afirmação acima. A sintaxe é //namespace:Tagname e NÃO //namespace.tagname. Ao fazer isso, você pode acabar recebendo uma mensagem 'NÃO corresponde à resposta atual', mesmo que o nome da tag esteja correto.