> For the complete documentation index, see [llms.txt](https://cryptosaft.assoft.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cryptosaft.assoft.org/informacao-tecnica/incm/testar-webservice.md).

# Testar Webservice

Existem inúmeras ferramentas que possibilitam a integração com Webservices SOAP. A generalidade das tecnologias de desenvolvimento tem suporte de integração com webservices de forma nativa ou através de integração com outros serviços.

Estas são algumas das ferramentas disponíveis:

* [SoapUI (windows, linux, mac)](https://www.soapui.org/)
* [Microsoft Visual Studio](https://docs.microsoft.com/en-us/visualstudio/test/how-to-create-a-web-service-test?view=vs-2019#to-create-a-simple-web-service)
* [Postman](https://learning.postman.com/docs/sending-requests/supported-api-frameworks/making-soap-requests/)
* [Zeep: Python SOAP Client](https://docs.python-zeep.org/en/master/)
* [JAVA JAX-WS](https://javaee.github.io/metro-jax-ws/)
* [PHP](https://www.php.net/manual/en/book.soap.php)

## Testar com o SoapUI

Neste exemplo vamos demonstrar como realizar o teste com o webservice da INCM usando o SoapUI.

{% hint style="info" %}
O SoapUI é uma ferramenta open source para testes de API. É uma ferramenta amplamente usada por *developers*, *testers* e utilizadores finais, com suporte para a generalidade dos testes funcionais de Serviços Web SOAP e API REST. Para além dos testes funcionais o SoapUI também permite tarefas de análise, testes de segurança, de virtualização e de *mocking*.
{% endhint %}

### Criar Projeto SOAP a partir de um WSDL

1. No SoapUI crie um novo projeto através da menu **File > New SOAP Project**

   ![Criar Projeto SOAP a partir de um WSDL](/files/-MRaPSd6195ck7x0KH2c)<br>
2. Dê um **Nome** ao projeto e coloque seguinte URL no campo Initial URL:

   ```
    https://keys-tst.cryptosaft.incm.pt/service/public?wsdl
   ```
3. Pode deixar as restantes opções tal e qual como estão por defeito e clique em **OK**.

O SoapUI tratará de gerar o serviço e um conjunto de testes de simulação opcionais.

### Trabalhar com WSDL no SoapUI

{% hint style="info" %}
WSDL ou *Web Service Description Language* consiste numa linguagem baseada na definição de XML. É usada para descrever as funcionalidades do serviço SOAP podendo comparar-se com um schema de XML, embora para fins distintos. Os ficheiros WSDL são fundamentais para testar e usar corretamente webservices baseados em SOAP. Para saber mais pode visitar [**esta página**](https://www.w3.org/TR/2001/NOTE-wsdl-20010315).
{% endhint %}

Após a criação do projeto, as ligações do serviço serão carregadas no SoapUI.

![Ligações do serviço CryptoSAF-T](/files/-MRaPSd7Wvn2M_JFH2sG)

### Operações

O serviço de WSDL apresenta duas operações, `KeyRequestOperation` e `KeyRetrieveOperation`. Ambas com suporte às funções de pedido e de resposta a mensagens.

### Pedidos

Os pedidos são apresentados sob a forma de nós das operações. No SoapUI podem ser adicionados quantos pedidos quantos os necessários, mas, por defeito são sempre criados pedidos de exemplo.

### KeyRequestOperation

Para realizar este pedido, preencha os valores correspondentes a `FiscalYear` e `VatNumber` e clique em ![Run](/files/-MRaPSd81Go7IQjlO0DD).

![KeyRequestOperation](/files/-MRaPSd9wYu0FhR36mAJ)

A resposta a este pedido desencaderá o envio de uma mensagem para a caixa de correio [**viaCTT**](/informacao-tecnica/incm/pedido-de-chave.md).

### KeyRetrieveOperation

O código `RetrieveCode` que permite invocar a operação `KeyRetrieveOperation` é enviado para a caixa de correio viaCTT do utilizador.

Para invocar o segundo pedido, preencha os valores `FiscalYear`, `VatNumber` e `RetrieveCode` e clique em ![Run](/files/-MRaPSdGoy4OaqbttKuY).

![KeyRetrieveOperation](/files/-MRaPSdITQwweOW4hxwb)

A mensagem deste pedido contem os valores correspondentes à chave de cifra `Key` e o vetor de inicialização `IV` necessários para realizar o processo de cifra do ficheiro SAF-T (PT) da Contabilidade.
