Veröffentlicht am :
Test. CREATION_INTERNE

Tests für SAS Viya Job-Ausführungs- und Verwaltungs-Makros.

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript beginnt mit der Erstellung einer temporären Datei (`testref`), die ein minimalistisches SAS©-Programm (`data;run; endsas;`) enthält. Dieses Programm wird dann vom Makro `%mv_createjob` verwendet, um einen neuen Job in SAS© Viya zu definieren. Sobald der Job erstellt wurde, wird das Makro `%mv_jobexecute` aufgerufen, um seine Ausführung zu starten. Das Skript filtert dann die Job-Statusinformationen und verwendet `%mv_jobwaitfor` um auf das Ende der Job-Ausführung zu warten. Die URI des Job-Protokolls wird extrahiert und von `%mv_getjoblog` verwendet, um den Inhalt des Protokolls abzurufen. Schließlich durchläuft ein `DATA _NULL_` Schritt das abgerufene Protokoll, um das Vorhandensein der Zeichenfolge 'endsas;' zu überprüfen, und das Makro `%mp_assert` wird verwendet, um zu bestätigen, dass das Protokoll korrekt abgerufen wurde und den erwarteten Marker enthält, wodurch die Fähigkeit zur Protokollwiederherstellung auch für rudimentäre Jobs validiert wird. Assertionsmakros (`%mp_assertscope`) werden für die Testverwaltung verwendet.
Datenanalyse

Type : CREATION_INTERNE


Das Skript generiert seine eigenen Testdaten: eine temporäre Datei (`testref`), die als Quellcode für den Job dient, und Datasets (`work.info`, `work.jobstates`), die von den SAS Viya Makros erzeugt werden. Der Inhalt des Job-Protokolls ist ebenfalls eine interne, durch die Job-Ausführung generierte Daten.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser Block erstellt einen temporären Fileref 'testref' und schreibt ein einfaches SAS-Programm (`data;run; endsas;`) hinein. Dieses minimalistische SAS-Programm wird dann als Quellcode für einen SAS Viya Job verwendet.
Kopiert!
1filename testref temp;
2DATA _null_;
3 file testref;
4 put 'data;run;';
5 put 'endsas;';
6RUN;
2 Codeblock
MACRO mv_createjob
Erklärung :
Aufruf des Makros `%mv_createjob` zur Definition eines neuen SAS Viya Jobs namens 'testjob' am durch die Makrovariable `&mcTestAppLoc/jobs/temp` angegebenen Speicherort. Der Quellcode des Jobs wird aus dem zuvor erstellten Fileref 'testref' gelesen.
Kopiert!
1%mv_createjob(
2 path=&mcTestAppLoc/jobs/temp,
3 code=testref,
4 name=testjob
5)
3 Codeblock
MACRO mv_jobexecute Data
Erklärung :
Führt den zuvor definierten Job 'testjob' aus. Detaillierte Informationen zur Job-Ausführung (URI, Status usw.) werden im Dataset `work.info` gespeichert.
Kopiert!
1%mv_jobexecute(
2 path=&mcTestAppLoc/jobs/temp,
3 name=testjob,
4 outds=work.info
5)
4 Codeblock
DATA STEP
Erklärung :
Filtert das Dataset `work.info`, um nur die relevanten Beobachtungen für die Job-Statusverfolgung zu behalten, insbesondere jene, bei denen `method` 'GET' und `rel` 'state' ist. Dies geschieht in Vorbereitung auf das Warten auf den endgültigen Job-Status.
Kopiert!
1DATA work.info;
2 SET work.info;
3 where method='GET' and rel='state';
4RUN;
5 Codeblock
MACRO mv_jobwaitfor Data
Erklärung :
Aufruf des Makros `%mv_jobwaitfor`, um zu warten, bis der Job, dessen Informationen in `work.info` enthalten sind, einen Endzustand (ALL) erreicht. Der detaillierte Endstatus wird im Dataset `work.jobstates` gespeichert.
Kopiert!
1%mv_jobwaitfor(ALL,inds=work.info,outds=work.jobstates)
6 Codeblock
DATA STEP
Erklärung :
Dieser `DATA _NULL_` Schritt liest das Dataset `work.jobstates` und extrahiert den Wert der Variable `uri` (den Uniform Resource Identifier des Job-Protokolls), um ihn in der Makrovariable `uri` zu speichern. Diese Makrovariable ist essenziell für das Abrufen des Job-Protokolls.
Kopiert!
1DATA _null_;
2 SET work.jobstates;
3 call symputx('uri',uri);
4RUN;
7 Codeblock
MACRO mv_getjoblog
Erklärung :
Das Makro `%mp_assertscope(SNAPSHOT)` wird verwendet, um den aktuellen Zustand der Makrovariablen zu erfassen, was für Testvergleiche nützlich ist. Anschließend wird das Makro `%mv_getjoblog` aufgerufen, um das Job-Protokoll unter Verwendung der zuvor extrahierten URI abzurufen. Der Inhalt des Protokolls wird im Fileref `mylog` mit aktiviertem Debugging (`mdebug=1`) gespeichert.
Kopiert!
1%mp_assertscope(SNAPSHOT)
2%mv_getjoblog(uri=%str(&uri),outref=mylog,mdebug=1)
8 Codeblock
MACRO mp_assertscope
Erklärung :
Dieses Makro `%mp_assertscope(COMPARE...)` wird im Rahmen eines Unit-Tests verwendet, um den aktuellen Zustand der Makrovariablen mit einem früheren 'Snapshot' zu vergleichen, wobei bestimmte Makrovariablen (`MCLIB2_JADP2LEN`, `MCLIB2_JADPNUM`, `MCLIB2_JADVLEN`) ignoriert werden, die wahrscheinlich automatisch generierte interne Variablen sind und für die Assertion nicht relevant sind.
Kopiert!
1/* ignore auto proc json vars */
2%mp_assertscope(COMPARE
3 ,ignorelist=MCLIB2_JADP2LEN MCLIB2_JADPNUM MCLIB2_JADVLEN
4)
9 Codeblock
DATA STEP
Erklärung :
Dieser `DATA _NULL_` Schritt liest den Inhalt des Job-Protokolls (`mylog`) Zeile für Zeile. Er sucht nach der Zeichenfolge 'endsas;'. Wenn sie gefunden wird, wird die Makrovariable `found` auf 1 gesetzt. Wenn das Ende der Datei erreicht wird, ohne die Zeichenfolge zu finden, wird `found` auf 0 gesetzt. Der Inhalt des Protokolls wird auch über `putlog _infile_` in das aktuelle SAS-Protokoll geschrieben, um das Debugging zu erleichtern.
Kopiert!
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 Codeblock
MACRO mp_assert
Erklärung :
Die Makro `%mp_assert` wird verwendet, um eine Testbedingung zu überprüfen. Hier wird geprüft, ob die Makrovariable `found` gleich 1 ist, was bestätigt, dass die Zeichenfolge 'endsas;' im Job-Protokoll gefunden wurde. Die Testbeschreibung weist darauf hin, dass überprüft wird, ob das Protokoll trotz der Einfachheit des übermittelten Jobs korrekt abgerufen wurde.
Kopiert!
1%mp_assert(
2 iftrue=(%str(&found)=1),
3 desc=Check IF the log was still fetched even though endsas was submitted
4)
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.