Partie 1 : Analyse du document WSDL

1. Vérification de l’existence du WSDL

Ouvrir dans un navigateur : http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl

Le document WSDL s’affiche correctement, confirmant que le service est accessible.

2. Analyse du document WSDL

a. Liste des opérations disponibles

Les principales opérations du service sont :

  • LatLonListZipCode : Conversion de codes postaux en coordonnées géographiques
  • NDFDgen : Prévisions météorologiques générales
  • NDFDgenByDay : Prévisions par jour
  • NDFDgenByDayLatLonList : Prévisions par jour pour plusieurs localisations
  • NDFDgenLatLonList : Prévisions pour une liste de coordonnées

b. Signature de l’opération NDFDgen

<operation name="NDFDgen">
    <input message="tns:NDFDgenRequest"/>
    <output message="tns:NDFDgenResponse"/>
</operation>

L’opération prend en entrée des paramètres de localisation (latitude, longitude), des dates et des paramètres météorologiques à récupérer, puis retourne un document XML contenant les prévisions.

c. Types compTypeType et unitType

  • compTypeType : Définit le type de comparaison ou de calcul à effectuer sur les données météorologiques
  • unitType : Spécifie l’unité de mesure (e = anglais avec Fahrenheit, m = métrique avec Celsius)

d. Adresse du service

Le service est disponible à l’adresse : http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl

e. Protocole réseau

Le service utilise le protocole SOAP over HTTP.

f. Patron de communication de NDFDgenLatLonList

Le patron de communication est Request-Response.

g. Style d’intéraction de ndfdXMLBinding

Le style d’intéraction est RPC.

h. Règles de codage

Les messages utilisent l’encodage SOAP encoded pour l’invocation et la réponse de l’opération NDFDgenLatLonList.

Partie 2 : Création du projet SOAP-UI

3. Création du projet

Démarrer SOAP-UI → File → New SOAP Project

  • Nom : SOA-TP1-NOAA
  • Initial WSDL : http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl

Le projet se crée avec l’ensemble des opérations disponibles.

4-6. Invocation de LatLonListZipCode

Double-cliquer sur Request 1 de l’opération LatLonListZipCode.

Dans le corps du message SOAP, saisir :

<zipCodeList>10001</zipCodeList>

Soumettre la requête → La réponse affiche :

<latLonList>40.7198,-73.993</latLonList>

Les coordonnées correspondent bien à New York.

7. Invocation de NDFDgenByDay

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soapenv:Body>
      <NDFDgenByDay xmlns="https://digital.weather.gov/xml/wsdl/ndfdXML.wsdl"
                    soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <latitude xsi:type="xsd:decimal">40.7198</latitude>
         <longitude xsi:type="xsd:decimal">-73.993</longitude>
         <startDate xsi:type="xsd:date">2021-12-10</startDate>
         <numDays xsi:type="xsd:integer">1</numDays>
         <Unit xsi:type="xsd:string">e</Unit>
         <format xsi:type="xsd:string">24 hourly</format>
         <XMLformat xsi:type="xsd:string">24 hourly</XMLformat>
      </NDFDgenByDay>
   </soapenv:Body>
</soapenv:Envelope>

a. Réponse

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <ns1:NDFDgenByDayResponse xmlns:ns1="https://digital.weather.gov/xml/wsdl/ndfdXML.wsdl">
         <XMLByDayOut xsi:type="xsd:string"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<dwml version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://digital.weather.gov/xml/schema/DWML.xsd">
  <head>
    <product srsName="WGS 1984" concise-name="dwmlByDay" operational-mode="official">
      <title>NOAA's National Weather Service Forecast by 24 Hour Period</title>
      <field>meteorological</field>
      <category>forecast</category>
      <creation-date refresh-frequency="PT30M">2025-12-03T16:19:32Z</creation-date>
    </product>
    <source>
      <more-information>https://digital.weather.gov/xml/</more-information>
      <production-center>Meteorological Development Laboratory<sub-center>Weather Information Applications Division</sub-center></production-center>
      <disclaimer>http://www.nws.noaa.gov/disclaimer.html</disclaimer>
      <credit>https://www.weather.gov/</credit>
      <credit-logo>https://www.weather.gov/logorequest</credit-logo>
      <feedback>https://www.weather.gov/contact</feedback>
    </source>
  </head>
  <data>
    <location>
      <location-key>point1</location-key>
      <point latitude="40.72" longitude="-73.99"/>
    </location>
    <moreWeatherInformation applicable-location="point1">http://forecast.weather.gov/MapClick.php?textField1=40.72&amp;textField2=-73.99</moreWeatherInformation>
    <time-layout time-coordinate="local" summarization="24hourly">
      <layout-key>k-p24h-n1-1</layout-key>
      <start-valid-time>2025-12-03T06:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-04T06:00:00-05:00</end-valid-time>
    </time-layout>
    <time-layout time-coordinate="local" summarization="12hourly">
      <layout-key>k-p12h-n2-2</layout-key>
      <start-valid-time>2025-12-03T06:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-03T18:00:00-05:00</end-valid-time>
      <start-valid-time>2025-12-03T18:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-04T06:00:00-05:00</end-valid-time>
    </time-layout>
    <time-layout time-coordinate="local" summarization="24hourly">
      <layout-key>k-p1d-n1-3</layout-key>
      <start-valid-time>2025-12-03T06:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-04T06:00:00-05:00</end-valid-time>
    </time-layout>
    <parameters applicable-location="point1">
      <temperature type="maximum" units="Fahrenheit" time-layout="k-p24h-n1-1">
        <name>Daily Maximum Temperature</name>
        <value>41</value>
      </temperature>
      <temperature type="minimum" units="Fahrenheit" time-layout="k-p24h-n1-1">
        <name>Daily Minimum Temperature</name>
        <value>32</value>
      </temperature>
      <probability-of-precipitation type="12 hour" units="percent" time-layout="k-p12h-n2-2">
        <name>12 Hourly Probability of Precipitation</name>
        <value>0</value>
        <value>2</value>
      </probability-of-precipitation>
      <weather time-layout="k-p24h-n1-1">
        <name>Weather Type, Coverage, and Intensity</name>
        <weather-conditions weather-summary="Mostly Sunny"/>
      </weather>
      <conditions-icon type="forecast-NWS" time-layout="k-p24h-n1-1">
        <name>Conditions Icons</name>
        <icon-link>http://forecast.weather.gov/images/wtf/few.jpg</icon-link>
      </conditions-icon>
      <hazards time-layout="k-p1d-n1-3">
        <name>Watches, Warnings, and Advisories</name>
        <hazard-conditions xsi:nil="true"/>
      </hazards>
    </parameters>
  </data>
</dwml>]]></XMLByDayOut>
      </ns1:NDFDgenByDayResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

b. Format de la réponse

Le format de réponse est XML. La mention <![CDATA[ indique que le contenu est traité comme du texte brut (Character Data) et non comme du XML à parser. Cela permet d’inclure des balises XML dans la réponse sans qu’elles soient interprétées.

c. Réponse avec startDate = 01/12/2021

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <ns1:NDFDgenByDayLatLonListResponse xmlns:ns1="https://digital.weather.gov/xml/wsdl/ndfdXML.wsdl">
         <XMLByDayOut xsi:type="xsd:string"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<dwml version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://digital.weather.gov/xml/schema/DWML.xsd">
  <head>
    <product srsName="WGS 1984" concise-name="dwmlByDay" operational-mode="official">
      <title>NOAA's National Weather Service Forecast by 24 Hour Period</title>
      <field>meteorological</field>
      <category>forecast</category>
      <creation-date refresh-frequency="PT30M">2025-12-03T16:31:39Z</creation-date>
    </product>
    <source>
      <more-information>https://digital.weather.gov/xml/</more-information>
      <production-center>Meteorological Development Laboratory<sub-center>Weather Information Applications Division</sub-center></production-center>
      <disclaimer>http://www.nws.noaa.gov/disclaimer.html</disclaimer>
      <credit>https://www.weather.gov/</credit>
      <credit-logo>https://www.weather.gov/logorequest</credit-logo>
      <feedback>https://www.weather.gov/contact</feedback>
    </source>
  </head>
  <data>
    <location>
      <location-key>point1</location-key>
      <point latitude="40.72" longitude="-73.99"/>
    </location>
    <moreWeatherInformation applicable-location="point1">http://forecast.weather.gov/MapClick.php?textField1=40.72&amp;textField2=-73.99</moreWeatherInformation>
    <time-layout time-coordinate="local" summarization="24hourly">
      <layout-key>k-p24h-n1-1</layout-key>
      <start-valid-time>2025-12-03T06:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-04T06:00:00-05:00</end-valid-time>
    </time-layout>
    <time-layout time-coordinate="local" summarization="12hourly">
      <layout-key>k-p12h-n2-2</layout-key>
      <start-valid-time>2025-12-03T06:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-03T18:00:00-05:00</end-valid-time>
      <start-valid-time>2025-12-03T18:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-04T06:00:00-05:00</end-valid-time>
    </time-layout>
    <time-layout time-coordinate="local" summarization="24hourly">
      <layout-key>k-p1d-n1-3</layout-key>
      <start-valid-time>2025-12-03T06:00:00-05:00</start-valid-time>
      <end-valid-time>2025-12-04T06:00:00-05:00</end-valid-time>
    </time-layout>
    <parameters applicable-location="point1">
      <temperature type="maximum" units="Fahrenheit" time-layout="k-p24h-n1-1">
        <name>Daily Maximum Temperature</name>
        <value>41</value>
      </temperature>
      <temperature type="minimum" units="Fahrenheit" time-layout="k-p24h-n1-1">
        <name>Daily Minimum Temperature</name>
        <value>32</value>
      </temperature>
      <probability-of-precipitation type="12 hour" units="percent" time-layout="k-p12h-n2-2">
        <name>12 Hourly Probability of Precipitation</name>
        <value>0</value>
        <value>2</value>
      </probability-of-precipitation>
      <weather time-layout="k-p24h-n1-1">
        <name>Weather Type, Coverage, and Intensity</name>
        <weather-conditions weather-summary="Mostly Sunny"/>
      </weather>
      <conditions-icon type="forecast-NWS" time-layout="k-p24h-n1-1">
        <name>Conditions Icons</name>
        <icon-link>http://forecast.weather.gov/images/wtf/few.jpg</icon-link>
      </conditions-icon>
      <hazards time-layout="k-p1d-n1-3">
        <name>Watches, Warnings, and Advisories</name>
        <hazard-conditions xsi:nil="true"/>
      </hazards>
    </parameters>
  </data>
</dwml>]]></XMLByDayOut>
      </ns1:NDFDgenByDayLatLonListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

8-9. Invocation de NDFDgenByDayLatLonList

Paramètres :

  • Liste de coordonnées : 40.7198,-73.993
  • startDate : 2020-12-01
  • numDays : 1
  • format : 24 hourly

La réponse affiche les informations météorologiques pour New York.

10. Assertion SLA

Le test échoue car eduroam

Partie 3 : Modification du WSDL

11-12. Modification du fichier WSDL

<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

13-14. Création du projet avec WSDL modifié

a. Comparaison des messages d’invocation

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soapenv:Body>
      <NDFDgenByDay xmlns="https://digital.weather.gov/xml/wsdl/ndfdXML.wsdl"
                    soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <latitude xsi:type="xsd:decimal">40.7198</latitude>
         <longitude xsi:type="xsd:decimal">-73.993</longitude>
         <startDate xsi:type="xsd:date">2021-12-10</startDate>
         <numDays xsi:type="xsd:integer">1</numDays>
         <Unit xsi:type="xsd:string">e</Unit>
         <format xsi:type="xsd:string">24 hourly</format>
      </NDFDgenByDay>
   </soapenv:Body>
</soapenv:Envelope>

b. Message renvoyé

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:ndf="https://digital.weather.gov/xml/wsdl/ndfdXML.wsdl">
   <soapenv:Header/>
   <soapenv:Body>
      <ndf:NDFDgenByDay>
         <ndf:latitude>40.7198</ndf:latitude>
         <ndf:longitude>-73.993</ndf:longitude>
         <ndf:startDate>2021-12-10</ndf:startDate>
         <ndf:numDays>1</ndf:numDays>
         <ndf:Unit>e</ndf:Unit>
         <ndf:format>24 hourly</ndf:format>
         <ndf:XMLformat>24 hourly</ndf:XMLformat>
      </ndf:NDFDgenByDay>
   </soapenv:Body>
</soapenv:Envelope>

Partie 2 : Suite de tests

1-7. Création de la TestSuite

Clic droit sur le projet SOA-TP1-NOAA → New TestSuite → Nom : SimpleTestSuite

Ajouter les trois opérations précédentes en tant que TestCase :

  • LatLonListZipCode Test Case
  • NDFDgenByDay Test Case
  • NDFDgenByDayLatLonList Test Case

Exécuter la suite → Les trois tests passent avec succès.

8-12. Ajout d’assertions

Double-cliquer sur LatLonListZipCode Test Case → Ouvrir la requête.

Cliquer sur Assertions → Add → Contains

  • Content : 40.7198,-73.993

Modifier le code postal dans la requête : 20001 (Washington DC)

Exécuter la suite → Le test LatLonListZipCode Test Case échoue car l’assertion attend les coordonnées de New York mais reçoit celles de Washington.

13. Load Testing

a. Qu’est-ce que le Load Testing ?

Le Load Testing permet de simuler un grand nombre de requêtes simultanées vers le service web pour évaluer ses performances sous charge. SOAP-UI propose plusieurs stratégies de test de charge (Simple, Burst, Thread, etc.).

b. Tests réalisés et conclusions

Clic droit sur le TestCase Add new load test

Configuration du test :

  • Stratégie : Simple
  • Threads : 10 utilisateurs simultanés
  • Durée : 60 secondes
  • Delay : 1000 ms entre requêtes

Résultats observés :

  • Temps de réponse moyen : entre 150 et 300 ms
  • Taux de réussite : 100%
  • Le service gère correctement 10 requêtes simultanées

Partie 3 : Création d’un Mock

Configuration du Mock :

  • Port : 8088
  • Path : /noaa-mock

Définir une réponse simulée pour LatLonListZipCode :

<latLonList>48.8566,2.3522</latLonList>

Démarrer le Mock Le service simulé répond sur http://localhost:8088/noaa-mock

Le Mock permet de tester l’application cliente sans dépendre du service réel, utile pour les tests hors ligne ou lorsque le service est indisponible.