Publicado el :
Prueba CREACION_INTERNA

Prueba de servicio web con mx_testservice

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
El script inicializa el entorno para las pruebas de servicios web, mencionando la necesidad de definir `mcTestAppLoc` para SAS© Studio. Configura la salida de un servicio web mediante un bloque `parmcards4` y las macros `%webout`, incluyendo una macro `x` para gestionar la integración de tablas SAS© o archivos de entrada en la salida web. Se llama a la macro `%mx_createwebservice` para desplegar un servicio web `sendObj` en la ubicación `/services` bajo `&mcTestAppLoc`. Una aserción inicial a través de `%mp_assert` valida que la creación del servicio se realizó sin errores. Luego, se crean dos conjuntos de datos temporales (`work.somedata1`, `work.somedata2`) con valores específicos para servir como datos de entrada. La macro `%mx_testservice` se utiliza para invocar el servicio `sendObj` con estos conjuntos de datos, activando las opciones de depuración y dirigiendo los resultados a la biblioteca `testlib1`. Finalmente, dos `DATA STEP` de tipo `_NULL_` verifican el contenido de los conjuntos de datos resultantes en `testlib1` (`somedata1`, `somedata2`) para asegurarse de que los datos fueron procesados correctamente. Las macrovariables `test1` y `test2` se actualizan en consecuencia. Las aserciones finales `%mp_assert` registran los éxitos o fallos de estas verificaciones.
Análisis de datos

Type : CREACION_INTERNA


Los conjuntos de datos `work.somedata1` y `work.somedata2` se crean directamente en el script a través de un `DATA STEP` para fines de prueba. No se utilizan directamente datos externos no gestionados por el script para las pruebas.

1 Bloque de código
Macros Webout y Definición de Macro
Explicación :
Este bloque utiliza `parmcards4` para enviar un conjunto de comandos que configuran la salida de un servicio web. Las macros `%webout` gestionan la recuperación (`FETCH`), la apertura (`OPEN`), la creación de objetos (`OBJ`) y el cierre (`CLOSE`) de la salida web. Se define una macro interna `x` para iterar sobre tablas SAS o archivos de entrada (`_webin_file_count`) e incluirlos como objetos en la salida web, lo que prepara la estructura de datos intercambiada por el servicio.
¡Copiado!
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 Bloque de código
Macro mx_createwebservice
Explicación :
Este bloque llama a la macro `%mx_createwebservice` para crear o desplegar un servicio web llamado `sendObj` en la ubicación definida por `&mcTestAppLoc/services`. Inmediatamente después, la macro `%mp_assert` se utiliza para verificar que esta creación se realizó sin errores (código de retorno del sistema `&syscc=0`), registrando el resultado en `work.test_results`. Esto constituye un paso esencial de configuración y verificación del servicio.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este `DATA STEP` crea dos conjuntos de datos temporales, `work.somedata1` y `work.somedata2`. Cada uno contiene una observación única con las variables `x` (numérica), `y` (cadena de caracteres con espacios y comillas escapadas) y `z` (valor numérico faltante). La variable `x` recibe la etiqueta 'x factor'. Estos conjuntos de datos están diseñados para servir como datos de entrada para la prueba del servicio web.
¡Copiado!
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 Bloque de código
Macro mx_testservice
Explicación :
Este bloque ejecuta la macro `%mx_testservice` para probar el servicio web `sendObj`. Los conjuntos de datos `work.somedata1` y `work.somedata2` se pasan como entradas al servicio. Las opciones `debug=log` y `mdebug=1` activan una depuración detallada en el log de SAS. Los resultados procesados por el servicio se almacenan en la biblioteca `testlib1`.
¡Copiado!
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 Bloque de código
DATA STEP (verificación)
Explicación :
Este `DATA STEP` de tipo `_NULL_` es un paso de verificación. Lee el conjunto de datos `testlib1.somedata1`, que es el resultado del procesamiento del servicio web. La macrovariable `test1` se inicializa como `FAIL`. Si los valores de las variables `x`, `y` y `z` coinciden con las expectativas (con `z="Z"` para un valor faltante), `test1` se establece en `PASS`. `putlog (_all_)(=)` muestra el contenido de la observación en el log para facilitar la auditoría.
¡Copiado!
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 Bloque de código
DATA STEP (verificación)
Explicación :
Similar al bloque anterior, este `DATA STEP` verifica el contenido del conjunto de datos `testlib1.somedata2` después del procesamiento por el servicio web. La macrovariable `test2` se actualiza a `PASS` si los valores de las variables `x`, `y` y `z` son conformes a las expectativas, confirmando así que el servicio ha procesado correctamente este conjunto de datos.
¡Copiado!
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 Bloque de código
Macros mp_assert
Explicación :
Estas dos llamadas finales a la macro `%mp_assert` se utilizan para validar los resultados globales de la prueba. La primera verifica si `test1` es `PASS`, confirmando el procesamiento correcto de `somedata1`. La segunda hace lo mismo para `test2` y `somedata2`. Los resultados de estas aserciones se registran en el conjunto de datos `work.test_results`, centralizando el informe de prueba.
¡Copiado!
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)
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.