Mocking com soapUI

Nesse artigo vamos abordar a criação de mocking (simulação) de serviços utilizando soapUI. O soapUI é uma ferramenta muito boa de testes para arquiteturas orientadas à serviços (SOA). Para instalá-lo é só acessar o site: http://sourceforge.net/projects/soapui/files/ e descompactar ou baixar um instalador e seguir o passo a passo.

Pra que serve o mocking de serviços? Quando você não tem o serviço, ou porque ele está em desenvolvimento, ou por algum motivo de infra estrutura, você pode simular esse serviço. O soapUI faz isso de uma maneira bem simples, sendo necessário somente o WSDL. Se você não sabe o que é WSDL, dê uma olhada no tutorial da W3Schools. Utilizarei o seguinte WSDL para a criação do mocking:

<?xml version="1.0" encoding="UTF-8" ?>
<definitions targetNamespace="http://www.thiagovespa.com.br/"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:tns="http://www.thiagovespa.com.br/"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
             xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/">
  <types>
    <xsd:schema targetNamespace="http://www.thiagovespa.com.br/types"
                elementFormDefault="qualified"/>
  </types>
  <message name="blogServicesRequest">
    <part name="in" type="xsd:string"/>
  </message>
  <message name="blogServicesResponse">
    <part name="return" type="xsd:string"/>
  </message>
  <portType name="ThiagoVespaBlogServices">
    <operation name="GetBlogPost">
      <input message="tns:blogServicesRequest"/>
      <output message="tns:blogServicesResponse"/>
    </operation>
  </portType>
  <binding name="ThiagoVespaBlogServicesSOAP11Binding"
           type="tns:ThiagoVespaBlogServices">
    <soap:binding style="document"
                  transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetBlogPost">
      <soap:operation style="document"
                      soapAction="http://www.thiagovespa.com.br/getBlogPost"/>
      <input>
        <soap:body use="literal" parts="in"/>
      </input>
      <output>
        <soap:body use="literal" parts="return"/>
      </output>
    </operation>
  </binding>
</definitions>

O primeiro passo é abrir o soapUI e criar um novo projeto. Clique em File, New soapUI Project. Preencha o Project Name e a localização do WSDL e clique em OK.

New soapUI Project
New soapUI Project

Clique com o botão direito no binding (ThiagoVespaBlogServicesSOAP11Binding) e selecione Generate Mock Service. Informe o nome do seu MockService e pressione OK.

Add to MockService
Add to MockService

Pressione Yes para abrir o editor de MockResponse. No lugar do '?' insira a resposta do seu MockService. No meu caso eu inseri o seguinte:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <return>Retorno do GetBlogPost</return>
   </soapenv:Body>
</soapenv:Envelope>

Dê dois cliques no seu MockService (MockServiceBlogPost). Caso deseje alterar as configurações de path, porta e host, clique no ícone de ferramentas e especifique o valor desejado. No meu caso vou alterar a porta para 8085 e path para \getBlogPost.

MockService Options
MockService Options

Pressione OK e clique no ícone de play para colocar o serviço em execução.

soapUI 3.6.1
soapUI 3.6.1

Para verificar se o serviço está em execução, abra a URL do serviço no browser.

Mozilla Firefox
Mozilla Firefox

Agora você já está apto a utilizar esse serviço na sua aplicação. Caso queira verificar a execução, dê dois cliques no Response 1 do GetBlogPost contido no MockServiceBlogPost, clique no primeiro ícone do canto superior esquerdo escrito SOAP. No combo, clique em Create New e clique em OK.

Open Request
Open Request

Dê um nome e pressione OK. Informe a requisição e pressione play.

soapUI 3.6.1 - 3
soapUI 3.6.1 - 3

Pronto, serviço testado e validado. Isso é um mocking básico, mas com esse recurso não precisamos depender da implementação real do serviço e podemos agilizar o teste e desenvolvimento de softwares que utilizam arquitetura baseada em serviços.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6