Publié le :
Test CREATION_INTERNE

Test de service web avec mx_testservice

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script initialise l'environnement pour les tests de services web, mentionnant la nécessité de définir `mcTestAppLoc` pour SAS© Studio. Il configure la sortie d'un service web à l'aide d'un bloc `parmcards4` et des macros `%webout`, incluant une macro `x` pour gérer l'intégration des tables SAS© ou des fichiers d'entrée dans la sortie web. La macro `%mx_createwebservice` est appelée pour déployer un service web `sendObj` à l'emplacement `/services` sous `&mcTestAppLoc`. Une assertion initiale via `%mp_assert` valide que la création du service s'est effectuée sans erreur. Ensuite, deux jeux de données temporaires (`work.somedata1`, `work.somedata2`) sont créés avec des valeurs spécifiques pour servir de données d'entrée. La macro `%mx_testservice` est utilisée pour invoquer le service `sendObj` avec ces jeux de données, en activant les options de débogage et en dirigeant les résultats vers la bibliothèque `testlib1`. Enfin, deux `DATA STEP` de type `_NULL_` vérifient le contenu des jeux de données résultants dans `testlib1` (`somedata1`, `somedata2`) pour s'assurer que les données ont été correctement traitées. Les macro-variables `test1` et `test2` sont mises à jour en conséquence. Des assertions finales `%mp_assert` enregistrent les succès ou échecs de ces vérifications.
Analyse des données

Type : CREATION_INTERNE


Les jeux de données `work.somedata1` et `work.somedata2` sont créés directement dans le script via un `DATA STEP` à des fins de test. Aucune donnée externe non gérée par le script n'est utilisée directement pour les tests.

1 Bloc de code
Macros Webout et Macro Définition
Explication :
Ce bloc utilise `parmcards4` pour soumettre un ensemble de commandes qui configurent la sortie d'un service web. Les macros `%webout` gèrent la récupération (`FETCH`), l'ouverture (`OPEN`), la création d'objets (`OBJ`) et la fermeture (`CLOSE`) de la sortie web. Une macro interne `x` est définie pour itérer sur des tables SAS ou des fichiers d'entrée (`_webin_file_count`) et les inclure comme objets dans la sortie web, ce qui prépare la structure de données échangée par le service.
Copié !
1filename ft15f001 temp;
2parmcards4;
3 %put Initialising sendObj: ;
4 %put _all_;
5 %webout(FETCH)
6 %webout(OPEN)
7 %macro x();
8 %IF %symexist(sasjs_tables) %THEN %DO i=1 %to %sysfunc(countw(&sasjs_tables));
9 %let TABLE=%scan(&sasjs_tables,&i);
10 %webout(OBJ,&TABLE,missing=STRING)
11 %END;
12 %ELSE %DO i=1 %to &_webin_file_count;
13 %webout(OBJ,&&_webin_name&i,missing=STRING)
14 %END;
15 %mend x; %x()
16 %webout(CLOSE)
17;;;;
2 Bloc de code
Macro mx_createwebservice
Explication :
Ce bloc appelle la macro `%mx_createwebservice` pour créer ou déployer un service web nommé `sendObj` à l'emplacement défini par `&mcTestAppLoc/services`. Immédiatement après, la macro `%mp_assert` est utilisée pour vérifier que cette création s'est déroulée sans erreur (code de retour système `&syscc=0`), enregistrant le résultat dans `work.test_results`. Cela constitue une étape de configuration et de vérification essentielle du service.
Copié !
1%mx_createwebservice(path=&mcTestAppLoc/services,name=sendObj)
2 
3%mp_assert(
4 iftrue=(&syscc=0),
5 desc=No errors after service creation,
6 outds=work.test_results
7)
3 Bloc de code
DATA STEP Data
Explication :
Ce `DATA STEP` crée deux jeux de données temporaires, `work.somedata1` et `work.somedata2`. Chacun contient une observation unique avec les variables `x` (numérique), `y` (chaîne de caractères avec des espaces et des guillemets échappés) et `z` (valeur numérique manquante). La variable `x` reçoit le label 'x factor'. Ces jeux de données sont conçus pour servir de données d'entrée pour le test du service web.
Copié !
1DATA work.somedata1 work.somedata2;
2 x=1;
3 y=' t"w"o';
4 z=.z;
5 label x='x factor';
6 OUTPUT;
7RUN;
4 Bloc de code
Macro mx_testservice
Explication :
Ce bloc exécute la macro `%mx_testservice` pour tester le service web `sendObj`. Les jeux de données `work.somedata1` et `work.somedata2` sont passés comme entrées au service. Les options `debug=log` et `mdebug=1` activent un débogage détaillé dans le log SAS. Les résultats traités par le service sont stockés dans la bibliothèque `testlib1`.
Copié !
1%mx_testservice(&mcTestAppLoc/services/sendObj,
2 inputdatasets=work.somedata1 work.somedata2,
3 debug=log,
4 mdebug=1,
5 outlib=testlib1,
6 outref=test1
7)
5 Bloc de code
DATA STEP (vérification)
Explication :
Ce `DATA STEP` de type `_NULL_` est une étape de vérification. Il lit le jeu de données `testlib1.somedata1`, qui est le résultat du traitement du service web. La macro-variable `test1` est initialisée à `FAIL`. Si les valeurs des variables `x`, `y` et `z` correspondent aux attentes (avec `z="Z"` pour une valeur manquante), `test1` est mise à `PASS`. `putlog (_all_)(=)` affiche le contenu de l'observation dans le log pour faciliter l'audit.
Copié !
1%let test1=FAIL;
2DATA _null_;
3 SET testlib1.somedata1;
4 IF x=1 and y=' t"w"o' and z="Z" THEN call symputx('test1','PASS');
5 putlog (_all_)(=);
6RUN;
6 Bloc de code
DATA STEP (vérification)
Explication :
Similaire au bloc précédent, ce `DATA STEP` vérifie le contenu du jeu de données `testlib1.somedata2` après traitement par le service web. La macro-variable `test2` est mise à jour en `PASS` si les valeurs des variables `x`, `y` et `z` sont conformes aux attentes, confirmant ainsi que le service a correctement traité ce jeu de données.
Copié !
1%let test2=FAIL;
2DATA _null_;
3 SET testlib1.somedata2;
4 IF x=1 and y=' t"w"o' and z="Z" THEN call symputx('test2','PASS');
5 putlog (_all_)(=);
6RUN;
7 Bloc de code
Macros mp_assert
Explication :
Ces deux appels finaux à la macro `%mp_assert` sont utilisés pour valider les résultats globaux du test. Le premier vérifie si `test1` est `PASS`, confirmant le traitement correct de `somedata1`. Le second fait de même pour `test2` et `somedata2`. Les résultats de ces assertions sont enregistrés dans le jeu de données `work.test_results`, centralisant le rapport de test.
Copié !
1%mp_assert(
2 iftrue=(&test1=PASS),
3 desc=somedata1 created correctly,
4 outds=work.test_results
5)
6%mp_assert(
7 iftrue=(&test2=PASS),
8 desc=somedata2 created correctly,
9 outds=work.test_results
10)
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.