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!
filename testref temp;
data _null_;
file testref;
put 'data;run;';
put 'endsas;';
run;
1
filename testref temp;
2
DATA _null_;
3
file testref;
4
put 'data;run;';
5
put 'endsas;';
6
RUN;
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.
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.
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!
data work.info;
set work.info;
where method='GET' and rel='state';
run;
1
DATA work.info;
2
SET work.info;
3
where method='GET' and rel='state';
4
RUN;
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.
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!
data _null_;
set work.jobstates;
call symputx('uri',uri);
run;
1
DATA _null_;
2
SET work.jobstates;
3
call symputx('uri',uri);
4
RUN;
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.
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!
/* ignore auto proc json vars */
%mp_assertscope(COMPARE
,ignorelist=MCLIB2_JADP2LEN MCLIB2_JADPNUM MCLIB2_JADVLEN
)
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!
data _null_;
infile mylog end=eof;
input;
putlog _infile_;
retain found 0;
if index(_infile_,'endsas;') then do;
found=1;
call symputx('found',found);
end;
else if eof and found ne 1 then call symputx('found',0);
run;
1
DATA _null_;
2
INFILE mylog END=eof;
3
INPUT;
4
putlog _infile_;
5
retain found 0;
6
IF index(_infile_,'endsas;') THENDO;
7
found=1;
8
call symputx('found',found);
9
END;
10
ELSEIF eof and found ne 1THEN call symputx('found',0);
11
RUN;
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!
%mp_assert(
iftrue=(%str(&found)=1),
desc=Check if the log was still fetched even though endsas was submitted
)
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.