> 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](https://1522967966-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDw8TTZd2CGPYQ2qaoE%2Fsync%2Ff031180069c3039f836ee0735a3ff27719be8015.png?generation=1611257223144078\&alt=media)<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](https://1522967966-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDw8TTZd2CGPYQ2qaoE%2Fsync%2Fa7c05cc59754ab2e9012388fce423bba6a5b15e8.png?generation=1611257208715391\&alt=media)

### 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](https://1522967966-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDw8TTZd2CGPYQ2qaoE%2Fsync%2F6b65ca0e790da1a29f3eefb4439a0a6d66a84fac.png?generation=1611257208590279\&alt=media).

![KeyRequestOperation](https://1522967966-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDw8TTZd2CGPYQ2qaoE%2Fsync%2F16381f7ab4be6f06849bc9d584df3c8e8115165c.png?generation=1611257217841781\&alt=media)

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](https://1522967966-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDw8TTZd2CGPYQ2qaoE%2Fsync%2F6b65ca0e790da1a29f3eefb4439a0a6d66a84fac.png?generation=1611257209037978\&alt=media).

![KeyRetrieveOperation](https://1522967966-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDw8TTZd2CGPYQ2qaoE%2Fsync%2Fa198a7371dcee1b0a4eadca86a19b7f06b416e8d.png?generation=1611257209332859\&alt=media)

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.
