Asserções em SoapUI: Scripts, XQuery, Tipos XPath
⚡ Resumo Inteligente
Asserções em SoapUI São os pontos de verificação que decidem se a resposta de um serviço web está correta, transformando uma solicitação que simplesmente é executada em um teste que de fato passa ou falha em conteúdo real e verificável.
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 requisição é enviada a um servidor web, uma resposta é recebida. Precisamos validar se a resposta contém os dados esperados. Para validar a resposta, precisamos usar asserções. Sem uma asserção, uma etapa de teste apenas prova que o serviço respondeu, não que respondeu corretamente, e é por isso que cada teste exige uma asserção. Teste de API deve levar pelo menos um.
Tipos de afirmação
Existem várias maneiras de apresentar uma resposta; no entanto, vamos nos concentrar nas mais comuns. SoapUI tipos de asserção ao validar uma resposta. Abaixo estão as categorias disponíveis na versão de código aberto de SoapUI.
- Conteúdo da Propriedade
- Padrão de status de conformidade
- Script
- SLA
- JMS
- Total
A caixa de diálogo agrupa todas as afirmações nessas categorias, como mostra a captura de tela abaixo.

Além das funcionalidades listadas acima, a versão Pro também possui uma Asserção JDBC integrada, que permite verificar se o serviço web atualizou o banco de dados corretamente.
Nota de versão: atual SoapUI A documentação também lista um JDBC categoria (Status JDBC e Tempo Limite JDBC) juntamente com as categorias acima, e um Conteúdo da mensagem asserção dentro do Conteúdo da Propriedade para uma comparação XML mais rica. A edição comercial aqui referida como “Pro” agora é vendida como ReadyAPI Por SmartBear, portanto, os rótulos dos menus em versões mais recentes podem ser diferentes, embora o comportamento da asserção permaneça o mesmo.
Contém afirmaçã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.asmxSe você ainda não construiu esse projeto, trabalhe nele. Criação de um projeto, conjunto de testes e caso de teste. em primeiro lugar.
Passo 1: Por padrão, não há asserçõ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'.
Etapa 2: agora,
- Selecione a categoria de afirmação.
- Selecione o tipo de declaração.
- Clique em 'Adicionar'
Passo 3: Vamos verificar se a string '46' existe na resposta. Clique em 'OK'.
Nota: Também podemos ignorar maiúsculas e minúsculas e adicionar expressões regulares.
Passo 4: Após a adição, a asserção é executada imediatamente e mostra se é VÁLIDA ou INVÁLIDA.
Passo 5: Agora, digamos que alteremos o conteúdo de 'Contém Asserção em SoapUI' para '47' e veja o que acontece.
Etapa 6: A asserção é executada e o resultado é apresentado ao usuário. Como não temos a string '47' na resposta, a asserção falhou.
Não contém afirmação
Sua contraparte funciona ao contrário. Busca pela não existência da string especificada. Também suporta expressões regulares.
Passo 1: Agora, após 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'
Passo 2: Vamos verificar se a string 'intA' existe na resposta. Digite a string 'FromCurrency' e clique em 'OK'.
Passo 3: Assim que uma asserção é adicionada, ela é executada e exibe o resultado. Até agora, adicionamos duas asserções; portanto, ambas foram executadas e exibiram o resultado.
Passo 4: Agora vamos alterar o conteúdo da 'Asserção Não Contém' e ver o que acontece. Vamos verificar a inexistência da string “AddResult”.
Etapa 5: A string 'AddResult' está de fato presente na resposta, portanto a asserção 'NOT Contains' falhará, conforme mostrado abaixo.
Asserção de correspondência XPath
A correspondência de strings é imprecisa, portanto, a próxima asserção visa um único nó. Usa uma expressão XPath para selecionar o nó alvo e seus valores. XPathXML é uma linguagem de consulta XML para selecionar nós de um documento XML.
Passo 1: Agora, após 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'
Passo 2: Adicionar XPath. A janela será aberta.
Antes de adicionar um SoapUI XPath, precisamos declarar o namespace. Um namespace XML é uma coleção de nomes, identificados por uma referência de Identificador Uniforme de Recursos (URI), que são usados em documentos XML como nomes de elementos e atributos. O mesmo é usado no SoapUI Asserção XPath.
Para declarar um namespace XML, basta clicar no botão "Declarar", que fará o trabalho automaticamente. Caso contrário, também podemos declarar um namespace manualmente.
Após declarar o namespace, precisamos referenciar o XPath usando o namespace criado.
Ao clicar no botão 'Declarar', dois namespaces serão exibidos, pois temos dois URIs. Um deles é o esquema. URL e o outro corresponde ao serviço web propriamente dito. URLPrecisamos usar o namespace real onde o serviço web está localizado e NÃO o namespace do esquema ao referenciar o XPath. As linhas declaradas aparecem na parte superior da caixa XPath, como mostrado abaixo.
declare o espaço para nome soap='http://schemas.xmlsoap.org/soap/envelope/';
declare o espaço para nome ns1='http://tempuri.org/';
Passo 3: 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.
Etapa 4: 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'.
Etapa 5: A asserção adicionada em SoapUI será exibido 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.
SoapUI usa qualquer um Groovy Script ou JavaScript para escrever scripts de asserções. A técnica de script é adotada para desenvolvimento.ping Uma estrutura para teste de SOAP. Asserções de script são usadas nas seguintes circunstâncias.
- A criação de scripts permite ao usuário executar algumas operações antes e depois da execução de um caso de teste, utilizando os métodos de configuração (setup) e finalização (teardown), respectivamente. A configuração é um procedimento executado antes da execução de um método específico (exemplo: criação e inicialização de objetos), enquanto a finalização é um procedimento executado após a execução do método (exemplo: destruição de objetos e limpeza). Esse recurso não está disponível em outros tipos de asserção e só pode ser implementado por meio de programação.
- Permite aos usuários abrir/fechar um projeto para inicializar ou limpar configurações relacionadas ao projeto, além de trabalhar com variáveis de ambiente, o que é muito útil durante a criação de scripts.
- Isso nos ajuda a afirmar um conteúdo de resposta dinâmico.
- As asserções de script são usadas para criar asserções definidas pelo usuário que NÃO são predefinidas por SoapUI.
Para demonstrar uma asserção de script em SoapUIVamos utilizar o WSDL da calculadora e o caso de teste 'Adicionar' que criamos anteriormente.
Passo 1: Os passos para adicionar um script Groovy são os mesmos que para outras asserções, exceto que a asserção não é predefinida. Em vez disso, é uma asserção definida pelo usuário, que oferece maior flexibilidade do que as asserções integradas.
Selecione a etapa de teste na qual a asserção deve ser adicionada.
Clique no botão 'Adicionar Asserção' conforme mostrado abaixo.
Passo 2: Agora selecione a categoria Asserção.
- Neste caso é Script.
- Selecionar SoapUI Asserção de script e não há subtipos associados a ela.
- Clique em 'Adicionar'.
Etapa 3: A caixa de diálogo de script é aberta, onde o usuário poderá escrever um script personalizado para validar o XML de resposta.
Passo 4: Agora vamos escrever um script Groovy 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
Etapa 5: Agora, a guia de asserções exibe todas as asserções que adicionamos para este conjunto de testes, com o status correspondente a cada uma delas.
Etapa 6: agora
- 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 conteúdo da propriedade de destino. Precisamos de um XML de resposta muito maior para entender melhor a asserção XQuery em SoapUIVamos importar outro WSDL, conforme mostrado abaixo: http://www.webservicex.net/medicareSupplier.asmx?WSDL
Observação: Os endpoints de demonstração públicos do webservicex.net usados neste passo a passo não estão mais acessíveis de forma confiável, portanto, as capturas de tela de solicitação e resposta abaixo são mantidas como exemplo de referência. Qualquer WSDL que retorne um conjunto de nós repetidos executará a asserção XQuery exatamente da mesma maneira.
Passo 1: Clique com o botão direito do mouse no projeto existente e selecione 'Adicionar WSDL'.
Passo 2: A caixa de diálogo Adicionar WSDL será aberta. Deixe as outras opções como padrão e clique no botão 'OK'.
Etapa 3: Todas as operações estão listadas conforme mostrado abaixo.
Passo 4: Agora vamos adicionar um Caso de teste dentro do mesmo conjunto de testes que criamos para Testes o conversor de moeda.
Passo 5: Insira o nome do caso de teste e clique no botão 'OK'.
Etapa 6: O caso de teste é criado conforme mostrado abaixo.
Etapa 7: Adicione uma nova etapa de teste do tipo 'Solicitação de teste SOAP', conforme mostrado abaixo.
Etapa 8: Insira o nome da etapa de teste. Digamos que seja "Fornecedor_por_Cidade", que seria mais significativo. Clique em "OK".
Etapa 9: selecione o Operaque gostaríamos de validar. Neste caso é 'MedicareSupplierSoap -> GetSupplierByCity'. Clique em 'OK'.
Passo 10: Insira o nome do caso de teste e clique em 'OK'.
Etapa 11: O esboço XML da solicitação será exibido conforme mostrado abaixo.
Passo 12: Agora vamos encontrar todas as informações dos fornecedores para a cidade de Nova Iorque.
Para fazer isso, adicione as seguintes linhas ao seu código.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL abaixo URL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Etapa 13: Após executar o teste, recebemos a seguinte resposta.
Etapa 14: Digamos que precisamos validar todos os números de fornecedores. Não podemos usar asserções XPath, pois precisaríamos de centenas delas. 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.
Passo 15: 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'.
Etapa 16: Semelhante à Asserção XPath, precisamos declarar o namespace.
- Clique no botão 'Declarar' para permitir automaticamente. SoapUI Para declarar o namespace, ao clicar no botão "Declarar", uma janela pop-up com a mensagem "Declare o namespace a partir do esquema" será exibida ao usuário. Clique em "Sim" para prosseguir, conforme mostrado abaixo.
- 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 entre os atuais', todos os números de fornecedor serão listados.
- Clique em 'Salvar'.
Observação: Ao clicar no botão 'Declarar', você poderá obter resultados diferentes. URLNo entanto, o namespace que deve ser considerado para a codificação é o do serviço web em si.
A expressão XQuery final, com suas declarações de namespace, fica assim.
// 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)} }
Etapa 17: A asserção XQuery é executada e exibe o resultado final no painel "Asserção", conforme mostrado abaixo. Agora, adicionamos com sucesso uma asserção XQuery que validou todas as informações do número do fornecedor. Essas informações serão comparadas com os valores reais sempre que uma solicitação for 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?
Com as opções de apontar e clicar e as opções com roteiro já abordadas, a questão prática é qual delas escolher.
- 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 de SoapUI, agora enviado como ReadyAPIA versão Pro também nos ajuda a agrupar asserções, permitindo adicionar mais uma camada de validação às asserções criadas.
- E: Todas as asserções são avaliadas como asserções VÁLIDAS, o que resultará na condição de grupo APROVADA.
- OU: Pelo menos uma das afirmações dentro do grupo deve ser VÁLIDA para que a condição de sucesso do grupo seja atingida.
- A versão Pro também permite Clonagem de AsserçõesEsta opção permite que os testadores copiem uma asserção para uma etapa de teste diferente, no mesmo projeto ou em um projeto diferente.
- Desativar/Ativar Asserções: Esta opção permite desativar ou ativar qualquer asserção, agrupada ou não. Se uma asserção estiver desativada, ela ficará acinzentada e, quando um caso de teste for executado, as asserções desativadas não serão executadas.
- Desagrupar asserções: Qualquer asserção agrupada pode ser desagrupada se os testadores assim o decidirem.
Lista completa de métodos disponíveis em vários tipos de asserção
A tabela abaixo reúne todas as afirmações discutidas acima, agrupadas pela categoria em que aparecem na caixa de diálogo Adicionar 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 | Utiliza 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. |
| Status HTTP inválido Codes | 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. |
| Status HTTP válido Codes | Verifica se a resposta HTML contém um código de status que está na lista de códigos definidos. É o inverso de 'Status HTTP inválido'. CodeAfirmação de s'. |
| 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. |
| Total | |
| 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
A maioria das falhas de asserção trace voltamos a um pequeno conjunto de erros, portanto, verifique-os antes de reescrever uma expressão.
- Use o namespace correto. O namespace deve ser o URL onde o serviço web está localizado.
- Se ocorrer um erro durante o desenvolvimentoping Para executar uma asserção em 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, em um conversor de moedas, se você inserir 'intA' como 'x', que não é um número inteiro, a saída exibirá um código de erro 'SOAP-Client', o que significa que o problema está no parâmetro que está sendo passado do lado do cliente. A solicitação que contém o valor inválido é exibida primeiro.
A resposta retorna o código de falha em vez de um resultado, conforme mostrado abaixo.
Certifique-se de usar a sintaxe correta ao utilizar asserções XPath e XQuery. Você NÃO deve usar ponto (.) em vez de dois pontos (:) ao usar a asserção acima. A sintaxe é //namespace:Tagname e NÃO //namespace.tagname. Caso contrário, você poderá receber a mensagem "Nenhuma correspondência na resposta atual", mesmo que o nome da tag esteja correto.














































