Publicado el :
Prueba CREATION_INTERNE

Prueba de las macros de ejecución y gestión de trabajos de SAS Viya

Este código también está disponible en: Deutsch English Français
En espera de validación
El script comienza creando un archivo temporal (`testref`) que contiene un programa SAS© minimalista (`data;run; endsas;`). Este programa es luego utilizado por la macro `%mv_createjob` para definir un nuevo trabajo en SAS© Viya. Una vez creado el trabajo, se llama a la macro `%mv_jobexecute` para iniciar su ejecución. El script luego filtra la información de estado del trabajo y utiliza `%mv_jobwaitfor` para esperar la finalización de la ejecución del trabajo. La URI del log del trabajo se extrae y se utiliza con `%mv_getjoblog` para recuperar el contenido del log. Finalmente, un paso `DATA _NULL_` recorre el log recuperado para verificar la presencia de la cadena 'endsas;', y la macro `%mp_assert` se utiliza para confirmar que el log ha sido recuperado correctamente y contiene el marcador esperado, validando así la capacidad de recuperar los logs incluso para trabajos rudimentarios. Las macros de aserción (`%mp_assertscope`) se utilizan para la gestión de pruebas.
Análisis de datos

Type : CREATION_INTERNE


El script genera sus propios datos de prueba: un archivo temporal (`testref`) que sirve como código fuente para el trabajo, y conjuntos de datos (`work.info`, `work.jobstates`) producidos por las macros de SAS Viya. El contenido del log del trabajo también es un dato interno generado por la ejecución del trabajo.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea un fileref temporal 'testref' y escribe en él un programa SAS simple (`data;run; endsas;`). Este programa SAS minimalista se utilizará posteriormente como código fuente para un trabajo de SAS Viya.
¡Copiado!
1filename testref temp;
2DATA _null_;
3 file testref;
4 put 'data;run;';
5 put 'endsas;';
6RUN;
2 Bloque de código
MACRO mv_createjob
Explicación :
Llamada a la macro `%mv_createjob` para definir un nuevo trabajo de SAS Viya llamado 'testjob' en la ubicación especificada por la macro-variable `&mcTestAppLoc/jobs/temp`. El código fuente del trabajo se lee desde el fileref 'testref' creado previamente.
¡Copiado!
1%mv_createjob(
2 path=&mcTestAppLoc/jobs/temp,
3 code=testref,
4 name=testjob
5)
3 Bloque de código
MACRO mv_jobexecute Data
Explicación :
Ejecuta el trabajo 'testjob' definido anteriormente. La información detallada de la ejecución del trabajo (URI, estado, etc.) se guarda en el conjunto de datos `work.info`.
¡Copiado!
1%mv_jobexecute(
2 path=&mcTestAppLoc/jobs/temp,
3 name=testjob,
4 outds=work.info
5)
4 Bloque de código
DATA STEP
Explicación :
Filtra el conjunto de datos `work.info` para conservar solo las observaciones relevantes para el seguimiento del estado del trabajo, específicamente aquellas donde `method` es 'GET' y `rel` es 'state'. Esto se hace en preparación para la espera del estado final del trabajo.
¡Copiado!
1DATA work.info;
2 SET work.info;
3 where method='GET' and rel='state';
4RUN;
5 Bloque de código
MACRO mv_jobwaitfor Data
Explicación :
Llamada a la macro `%mv_jobwaitfor` para esperar que el trabajo, cuya información está contenida en `work.info`, alcance un estado final (ALL). El estado final detallado se registra en el conjunto de datos `work.jobstates`.
¡Copiado!
1%mv_jobwaitfor(ALL,inds=work.info,outds=work.jobstates)
6 Bloque de código
DATA STEP
Explicación :
Este paso `DATA _NULL_` lee el conjunto de datos `work.jobstates` y extrae el valor de la variable `uri` (el Identificador Uniforme de Recursos del log del trabajo) para almacenarlo en la macro-variable `uri`. Esta macro-variable es esencial para recuperar el log del trabajo.
¡Copiado!
1DATA _null_;
2 SET work.jobstates;
3 call symputx('uri',uri);
4RUN;
7 Bloque de código
MACRO mv_getjoblog
Explicación :
La macro `%mp_assertscope(SNAPSHOT)` se utiliza para capturar el estado actual de las macro-variables, útil para las comparaciones de pruebas. Luego, se llama a la macro `%mv_getjoblog` para recuperar el log del trabajo utilizando la URI extraída previamente. El contenido del log se guarda en el fileref `mylog` con la depuración activada (`mdebug=1`).
¡Copiado!
1%mp_assertscope(SNAPSHOT)
2%mv_getjoblog(uri=%str(&uri),outref=mylog,mdebug=1)
8 Bloque de código
MACRO mp_assertscope
Explicación :
Esta macro `%mp_assertscope(COMPARE...)` se utiliza en el contexto de una prueba unitaria para comparar el estado actual de las macro-variables con un 'snapshot' anterior, ignorando ciertas macro-variables (`MCLIB2_JADP2LEN`, `MCLIB2_JADPNUM`, `MCLIB2_JADVLEN`) que probablemente son variables internas generadas automáticamente y no relevantes para la aserción.
¡Copiado!
1/* ignore auto proc json vars */
2%mp_assertscope(COMPARE
3 ,ignorelist=MCLIB2_JADP2LEN MCLIB2_JADPNUM MCLIB2_JADVLEN
4)
9 Bloque de código
DATA STEP
Explicación :
Este paso `DATA _NULL_` lee el contenido del log del trabajo (`mylog`) línea por línea. Busca la cadena 'endsas;'. Si se encuentra, la macro-variable `found` se establece en 1. Si se alcanza el final del archivo sin encontrar la cadena, `found` se establece en 0. El contenido del log también se escribe en el log SAS actual a través de `putlog _infile_` para facilitar la depuración.
¡Copiado!
1DATA _null_;
2 INFILE mylog END=eof;
3 INPUT;
4 putlog _infile_;
5 retain found 0;
6 IF index(_infile_,'endsas;') THEN DO;
7 found=1;
8 call symputx('found',found);
9 END;
10 ELSE IF eof and found ne 1 THEN call symputx('found',0);
11RUN;
10 Bloque de código
MACRO mp_assert
Explicación :
La macro `%mp_assert` se utiliza para verificar una condición de prueba. Aquí, verifica si la macro-variable `found` es igual a 1, lo que confirma que la cadena 'endsas;' se ha encontrado en el log del trabajo. La descripción de la prueba indica que se trata de verificar si el log se ha recuperado correctamente a pesar de la simplicidad del trabajo enviado.
¡Copiado!
1%mp_assert(
2 iftrue=(%str(&found)=1),
3 desc=Check IF the log was still fetched even though endsas was submitted
4)
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.