Mit ICETOOL Datensätze in Dateien zählen

Im Rahmen von Testaktivitäten ist immer wieder Vollständigkeit von Datensätzen in Datasets zu überprüfen. Mit dem DFSORT-Tool ICETOOL lassen sich auf einfache Art und Weise eine große Anzahlen von Dateien zählen. Mit der folgenden JCL kann dies in einem JOB auf bis 255 Dateien erweitert werden:

//NZSCNTAU JOB (666045,BA),                     
//         'MOELLER',                           
//         CLASS=K,                             
//         NOTIFY=&SYSUID,                      
//         MSGCLASS=T                           
//RESTART EXEC PGM=IEFBR14                      
//ALT     DD DSN=&SYSUID..NZSCOUNT.AUSUEB,      
//           DISP=(MOD,DELETE,DELETE)           
//        SET VAR1='$150529'                    
//ICETOOL EXEC PGM=ICETOOL                      
//TOOLMSG DD SYSOUT=*                           
//DFSMSG  DD SYSOUT=*                           
//IN001   DD DSN=BAT.PO.&VAR1..ZH.AL.GDG.AUSUEB,
//           DISP=SHR                           
//OUT001  DD DSN=&SYSUID..NZSCOUNT.TMPAU,       
//           DISP=(MOD,CATLG,DELETE),           
//           RECFM=FB,                          
//           LRECL=80,                              
//           BLKSIZE=800,                           
//           SPACE=(80,(1,10000),RLSE)              
//TOOLIN  DD *                                      
COUNT FROM(IN001) WRITE(OUT001) -                   
TEXT('BAT.PO.&VAR1..ZH.AL.GDG.AUSUEB,            :')
/*                                                  
//ICETOOL EXEC PGM=ICETOOL                
//TOOLMSG DD SYSOUT=*                     
//DFSMSG  DD SYSOUT=*                     
//IN001   DD DSN=&SYSUID..NZSCOUNT.TMPAU, 
//           DISP=SHR                     
//OUT001  DD DSN=&SYSUID..NZSCOUNT.AUSUEB,
//           DISP=(MOD,CATLG,DELETE),     
//           RECFM=FB,                    
//           LRECL=80,                    
//           BLKSIZE=800,                 
//           SPACE=(80,(1,10000),RLSE)    
//TOOLIN  DD *                            
  DISPLAY FROM(IN001) LIST(OUT001) -      
  HEADER('DATEINAME') ON(1,35,CH) -       
  HEADER('ANZAHL RECORDS') ON(45,15,UFF) -
  TOTAL('SUMME AUSUEB: ')                 
/*                                        
//RESTART EXEC PGM=IEFBR14                
//ALT     DD DSN=&SYSUID..NZSCOUNT.TMPAU, 
//           DISP=(MOD,DELETE,DELETE)    )

Beschreibung der einzelnen Zeilen:

Zeile 01: Aufruf des Programmes ICETOOL

Zeile 02 und 03: Umleitung an die Standard-Ausgabe der Meldungen die durch das Programm ICETOOL und DFSORT erzeugt werden

Zeile 04 und 05: Einzulesende Datei (mit Variablennamen für das Fachbestandsdatum), DISP=SHR beschreibt lesenden Zugriff

Zeile 06 bis 11: Auszugebende Datei (mit System-Variablennamen für die User-ID), DISP=(MOD,CATLG,DELETE) beschreibt den schreibenden Zugriff auf eine bereits vorhandene Datei. Jede Ergebniszeile wird an die vorhandene Datei unten angehängt. Achtung: Die erzeugte Datei ist eine temporäre Datei, die im letzten Step des Jobs wieder gelöscht wird. Im letzten Step des Jobs wird aus jeder temporären Datei die Summe je Entität berechnet und in die endgültige Ausgabedatei geschrieben.

Zeile 12 bis 14: Hierbei handelt es sich um die Eingabeparameter für das Programm ICETOOL. COUNT zählt aus der und IN001 angegebenen Datei und schreibt unter die mit OUT001 benannte Datei. Das Minuszeichen am Ende der Zeile ist der Identifikator für eine weitere Parameter-Zeile. TEXT gibt einen konstanten String aus (in diesem Fall den Namen der einzulesenden Datei)

Beschreibung des Outputs

Je Job/Entität wird unter der eigenen User-ID eine Ausgabedatei erzeugt. Jedes Ausgabedatei enthält zwei Spalten (Spalte 1 = Dateiname, Spalte 2 = Anzahl der Zeilen je Datei) und eine Summenzeile.

Beispiel (Auszug):

DATEINAME                             ANZAHL RECORDS
---------------------------------   ----------------
BAT.PO.&VAR1..ZH.AL.GDG.AUSUEB,     +000000000000000
BAT.PO.&VAR1..ZH.A2.GDG.AUSUEB,     +000000000007468
BAT.PO.&VAR1..ZH.BL.GDG.AUSUEB,     +000000000000000
BAT.PO.&VAR1..ZH.DR.GDG.AUSUEB,     +000000000027352
…
SUMME AUSUEB:                       +000000000161479

smart querying mit Atlassian JIRA

Im Suchfeld von JIRA kann man seit der Version 5.0 das so genannte smart querying verwenden. Mit Hilfe des smart queryings kann man auf sehr einfache und schnelle Weise nach Vorgängen suchen.

In der folgenden Tabelle sind einige nützliche Suchbegriffe aufgeführt:

Suchbegriff

Beispiel

Beschreibung

my XYZ my open issues Finde mir zugewiesene offene Vorgänge im Projekt XYZ
r: r:me Finde alle Vorgänge deren Autor ich bin
created: created:-24h Finde alle Vorgänge die in den letzten 24 Stunden erzeugt wurden
c: c:DIM_GP Finde alle Vorgänge die die Komponente DIM_GP betreffen

 

Detaillierte Informationen zum smart querying in JIRA findet man auf der Homepage von Atlassian unter folgendem Link JIRA smart querying

Testautomatisierung in TOSCA mit dem SAS Enterprise Guide (4.3)

Der Hersteller der TOSCA Testsuite bietet standardmäßig Schnittstellenprogramme (so genannte Engines) zu diversen namhaften Datenbanksystemen (wie z.B. DB2 oder Oracle) an – nicht jedoch für SAS. Aufgrund dieser standardmäßig fehlenden Engine-Unterstützung von TOSCA zu SAS, schafft das unten beschriebene Framework eine Möglichkeit, Unterstützung für teil- und vollautomatisierte Tests in TOSCA (in Kombination mit dem SAS Enterprise Guide Version 4.3) durchzuführen und die Testausführung in TOSCA zu dokumentieren. Die Anwendung des Frameworks erfordert keinerlei VBSript-Kenntnisse, die Verwendung von SAS-EG Projekten ist in TOSCA über Parameter steuerbar. Für weitergehende SAS-EG Funktionalitäten sind fundierte SAS Base Kenntnisse nötig.

Basis für die Verbindung von TOSCA mit dem SAS Enterprise Guide ist der Artikel von Chris Hemedinger in seinem Blog-Artikel Doing more with SAS Enteprise Guide automation

Merkmale des Frameworks

  • Automatisierte Ausführung von SAS-EG Projekten via TOSCA
  • Verwendung von individuellen SAS-EG Verbindungsprofilen
  • Auswertung von SAS-EG Projekt-Log-Dateien in TOSCA
  • Individuelle Behandlung von SAS-EG Projekt-Log WARNINGS in TOSCA
  • Übergabe von beliebigem SAS Code via TOSCA an ein SAS EG Projekt

Hinweis: Das Framework wurde auf Basis der SAS Enterprise-Guide Version 4.3 erstellt und verwendet. Ein Test des Frameworks mit älteren SAS-EG Versionen ist nicht erfolgt, sollte jedoch grundsätzlich mit allen Versionen möglich sein, welche die SAS Automation API bereitstellen.

Anwendungskommunikation

In der folgenden Übersicht ist grob vereinfacht die Verbindung der Anwendungen TOSCA, SAS und JIRA dargestellt. JIRA wird nur deswegen in der Grafik dargestellt, da JIRA standardmäßig über eine  API aus TOSCA heraus angesprochen werden kann um damit das Fehlertracking durchzuführen):

sas_eg_tosca_testautomatisierung_1

Die Kommunikation zwischen TOSCA und dem SAS-EG wird über den TOSCA-SAS-EG Connector – dem in TOSCA bereitgestellten Modul Start SAS-EG-Projekt – hergestellt. Das mit diesem Modul verbundene Visual Basic Script BLB_RunEGP.vbs ist das Bindeglied zwischen der TOSCA Testsuite und dem Objektmodell des SAS Enterprise Guide bzw. der darunter liegenden SAS Business Intelligence Plattform.

Modul Start SAS-EG-Projekt

Das Modul Start SAS-EG-Projekt ist in TOSCA im KEPLA-Workspace → Projektordner Module abgelegt. Das Modul kann in TOSCA Testfällen verwendet, gemäß eigenen Anforderungen parametrisiert und eingebunden werden.

sas_eg_tosca_testautomatisierung_2

Verwendung des Moduls

Zur Verwendung des Moduls muss dieses via drag-and-drop in einen Testfall gezogen werden. Dadurch wird ein Link vom Testfall zum Modulobjekt Start SAS-EG-Projekt in TOSCA hergestellt. Anschließend können die verpflichtenden und optionalen Parameter gefüllt werden und der Testfall (z.B. im Scratchbook, in Ausführungslisten oder Testaufträgen) ausgeführt werden. Die Testfallausführung erfolgt in TOSCA über die Funktionstaste F6 (Achtung: nicht „als manuellen Testfall ausführen“) oder vollautomatisiert über die TOSCA-Shell.

Das Modul Start SAS-EG-Projekt verfügt über folgende Parameter:

Name Datentyp Art Beschreibung
SAS EG Projektdatei String Pflicht Physikalischer Pfad und Name der SAS-EG-Projektdatei
SAS EG Verbindungsprofil String Pflicht Name des SAS-EG-Verbindungsprofils
Im Parameter SAS EG Verbindungsprofil ist der Name des Verbindungsprofils mit dem dieses SAS EG-Projekt ausgeführt werden soll, angegeben. Im Verbindungsprofil ist die jeweilige Umgebung, der Benutzername und das Passwort hinterlegt.
Warnungen als Fehler Boolean Pflicht 1 wenn WARNINGs wie ERRORs behandelt werden sollen, sonst 0
Über das Modul besteht die Möglichkeit, die im SAS EG Projektlog enthaltenen WARNINGS (siehe Kapitel Fehler! Verweisquelle konnte nicht gefunden werden.) wie ERRORS – über die Steuerung des Parameters Warnungen als Fehler – zu behandeln. Wird dieser Parameter auf 1 (TRUE) gesetzt, so werden WARNINGs wie ERRORs behandelt und der Testfall bei vorhandenen WARNINGs als fehlerhaft gekennzeichnet.
Fachbestandsdatum Date Optional Fachbestandsdatums im SAS-Format z.B. 19APR2012
Über den Parameter Fachbestandsdatum kann, sofern dieses Datum im SAS-EG-Projekt berücksichtigt wird, ein Datum im SAS-Format TTMMMJJJJ mitgegeben werden
SAS Code zur Initialisierung String Optional Beliebiger SAS-Code bspw. um SAS-EG Eingabeparameter zu initialisieren
Darüber kann dem SAS-EG-Projekt beliebiger SAS-Code im Parameter SAS Code zur Initialisierung mitgegeben werden. Hierbei muss berücksichtigt werden, dass der SAS-Code syntaktisch korrekt im TOSCA-Testfall eingegeben werden muss. Sinnvoll kann dies sein, wenn das aufzurufende SAS-EG-Projekt selbst über Eingabeparameter verfügt (diese müssen über den SAS-EG Eingabeaufforderungsmanager erstellt werden – im SAS-EG über „EigenschaftenàEingabeaufforderungen“) und diese nicht via Defaults im SAS-EG Projekt gefüllt werden.

 

In der folgenden Abbildung ist beispielhaft ein Testfall mit den gefüllten Parametern abgebildet:

sas_eg_tosca_testautomatisierung_3

Hinter dem Modul „Start SAS-EG-Projekt“ steckt ein VB-Script mit dem Namen BLB_RunEGP.vbs, welches in TOSCA Keyword genannt wird. Keywords werden an fest definierten Ablageorten abgespeichert (z.B. O:\Prj\Blb\T\TOSCA\ToscaCommander\Keywords), dieser Ablageort ist auch in den TOSCA-Einstellungen hinterlegt (siehe folgende Abbildung)

Keyword BLB_RunEGP.vbs

Die Verbindung von Modul und Keyword wird in den Eigenschaften des Moduls festgelegt. Dabei wird auf den Namen des Keywords verwiesen (ohne Pfadangabe und ohne .vbs-Suffix).

Hinter dem Modul „Start SAS-EG-Projekt“ steckt ein VB-Script mit dem Namen BLB_RunEGP.vbs, welches in TOSCA Keyword genannt wird. Keywords werden an fest definierten Ablageorten abgespeichert (z.B. O:\Prj\Blb\T\TOSCA\ToscaCommander\Keywords), dieser Ablageort ist auch in den TOSCA-Einstellungen hinterlegt (siehe folgende Abbildung):

sas_eg_tosca_testautomatisierung_4

Die Verbindung von Modul und Keyword wird in den Eigenschaften des Moduls festgelegt. Dabei wird auf den Namen des Keywords verwiesen (ohne Pfadangabe und ohne .vbs-Suffix). Das VB-Script enthält die im Modul Start SAS-EG-Projekt abstrahierte Programmlogik und erfordert entsprechendes VB-Script und SAS-EG Automatisierung API Know How.

' ----------------------------------------------------
' Programmname: BLB_RunEGP.vbs

'

' Dieses Script führt aus TOSCA heraus ein SAS Enterprise Guide Projekt aus. Es durchsucht
' die SAS EG Logdatei nach Warnungen oder Fehler und übergibt diese an TOSCA zurück.
' Zur Benutzung dieses Skriptes muss in TOSCA das KEPLA-Modul "Start SAS-EG-Projekt"
' in einen Testfall eingebunden werden.
'
' Diesem Script werden folgende Parameter übergeben, welche bei der Verwendung
' des Moduls in TOSCA angegeben werden müssen:
' Name des Parameters             Datentyp     Pflicht/Optional    Beschreibung
' ----------------------------------------------------------------------------------------
' SAS EG Projektdatei             String       Pflicht             Pfad und Name der SAS-EG-Projektdatei
' SAS EG Verbindungsprofil        String       Pflicht             Name des SAS-EG-Verbindungsprofils
' Warnungen als Fehler            Boolean      Pflicht             1 wenn Warnungen wie Fehler behandelt werden sollen, sonst 0
' Fachbestandsdatum               Date         Optional            Fachbestandsdatums im SAS-Format z.B. 19APR2012
' SAS Code zur Initialisierung    String       Optional            Beliebiger SAS-Code bspw. um SAS-EG Eingabeparameter zu initialisieren

' ----------------------------------------------------

Option Explicit
Dim allErrorsAndWarnings
Dim errorCounter
Sub Main(testAction)
    Dim oParamAction    'As Engine.clsParamAction
    Dim oProcess        'As WScript.Shell
    Dim sEGPFile        'As String
    Dim sEGProfile      'As String
    Dim sWarnings       'As String
    Dim sFBDatum        'As String
    Dim sCode           'As String
    Dim sTarget         'As String
       allErrorsAndWarnings = ""
       errorCounter = 0
    For Each oParamAction In testAction.ParameterActions
        If Not (oParamAction Is Nothing) Then
            Select Case LCase(oParamAction.name)
                Case "sas eg projektdatei"
                    sEGPFile = oParamAction.inputView.Value
                Case "sas eg verbindungsprofil"
                    sEGProfile = oParamAction.inputView.Value
                Case "warnungen als fehler"
                    sWarnings = oParamAction.inputView.Value
                           Case "fachbestandsdatum"
                                  sFBDatum = oParamAction.inputView.Value
                           Case "sas code zur initialisierung"
                                  sCode = oParamAction.inputView.Value
            End Select
        End If
    Next
       ToscaWrapper sEGPFile, sEGProfile, sWarnings, sFBDatum, sCode

 

       If allErrorsAndWarnings <> "" Then oExecLib.raiseException objServer.GetExceptionString(1), allErrorsAndWarnings
End Sub
Sub ToscaWrapper(sEGPFile, sEGProfile, sWarnings, sFBDatum, sCode)
' ------------------------------------------------
' TOSCAWrapper.vbs
' Uses SAS Enterprise Guide automation to read and run
' an EGP file, then check its logs and explicit result
' files (those with a name starting w/ "TOSCA") for
' emptiness.
'
' Non-empty result files and "WARNING" and "ERROR" lines
' in logs will result in a failed test result.
'
'
' USAGE:
'   cscript.exe TOSCAWrapper.vbs <path-to-EGP-file>
' EXAMPLE:
'   cscript.exe TOSCAWrapper.vbs c:\projects\TestOne.egp
'
' NOTE: use proper version of CSCRIPT.exe for your SAS Enterprise Guide
' version.  For 32-bit EG on 64-bit Windows, use
'      c:\Windows\SysWOW64\cscript.exe
' ------------------------------------------------
' force declaration of variables in VB Script
Dim Application
Dim Project
Dim sasProgram
Dim item
Dim flow
Dim errLabel
Dim strmsg
Dim errNum
' enumeration of project item types
Const egLog = 0
Const egCode = 1
Const egData = 2
Const egQuery = 3
Const egContainer = 4
Const egDocBuilder = 5
Const egNote = 6
Const egResult = 7
Const egTask = 8
Const egTaskCode = 9
Const egProjectParameter = 10
Const egOutputData = 11
Const egStoredProcess = 12
Const egStoredProcessParameter = 13
Const egPublishAction = 14
Const egCube = 15
Const egReport = 18
Const egReportSnapshot = 19
Const egOrderedList = 20
Const egSchedule = 21
Const egLink = 22
Const egFile = 23
Const egIntrNetApp = 24
Const egInformationMap = 25
' Simple error check - looking for a project file
On Error Resume Next
Do
' Create a new SAS Enterprise Guide automation session
Set Application = CreateObject("SASEGObjectModel.Application.4.3")
errLabel = "Konnte SAS-EG nicht öffnen."
If Err.Number <> 0 Then Exit Do
' Open the EGP file with the Application
Set Project = Application.Open(sEGPFile,"")
errLabel = "Konnte EGP-Datei " & chr(34) & sEGPFile & chr(34) & " nicht öffnen."
If Err.Number <> 0 Then Exit Do
' Set active profile
Application.SetActiveProfile(sEGProfile)
errLabel = "Profil " & chr(34) & sEGProfile & chr(34) & " konnte nicht gesetzt werden."
If Err.Number <> 0 Then Exit Do
' First add a new code object to the project
Set sasProgram = Project.CodeCollection.Add
' set the results types, overriding app defaults
sasProgram.UseApplicationOptions = False
sasProgram.GenListing = True
sasProgram.GenSasReport = False
' Set the server (by Name) and text for the code
sasProgram.Server = "SASApp"
If sFBDatum <> "" Then
       sasProgram.Text = "%let tosca_run = 1;" & vbCrLf & "%let fbdatum = " & sFBDatum & ";" & vbCrLf & sCode
Else
       sasProgram.Text = "%let tosca_run = 1;" & vbCrLf & sCode
End if
' Run the code
sasProgram.Run
errLabel = "Code konnte nicht ausgeführt werden."
If Err.Number <> 0 Then Exit Do
' Check code and exit if problems occurred
checkLogForError sasProgram.Log.Text, "SAS Code zur Initialisierung", sWarnings
If allErrorsAndWarnings <> "" Then Exit Sub
' Run the entire project file
Project.Run
errLabel = "EGP-Datei konnte nicht ausgeführt werden."
If Err.Number <> 0 Then Exit Do
' Navigate the process flows in the Project object
For Each flow In Project.ContainerCollection
  ' ProcessFlow is ContainerType of 0
  If flow.ContainerType = 0 Then
       ' Navigate the items in each process flow
       For Each item in flow.Items
         if errorCounter = 100 then
           Project.Close
             Application.Quit
           exit sub
         end if
         Select Case item.Type
         Case egCode
             If (Not item.Log Is Nothing) Then checkLogForError item.Log.Text, flow.Name & "\" & item.Name, sWarnings
         Case egData
             Dim task
             If (IsArray(item.Tasks)) Then
               For Each task in item.Tasks
                 If (Not task.Log is Nothing) Then checkLogForError task.Log.Text, flow.Name & "\" & task.Name, sWarnings
               Next
             End If
         Case egTask
             If (Not item.Log is Nothing) Then checkLogForError  item.Log.Text, flow.Name & "\" & item.Name, sWarnings
         Case egQuery
             If (Not item.Log is Nothing) Then checkLogForError item.Log.Text, flow.Name & "\" & item.Name, sWarnings
         End Select
       Next
  End If
Next
errLabel = "Fehler bei Prüfung der Logs."
If Err.Number <> 0 Then Exit Do
' Close the project
Project.Close
errLabel = "Konnte EGP-Datei nicht schließen."
If Err.Number <> 0 Then Exit Do
' Quit/close the Application object
Application.Quit
errLabel = "Konnte SAS-EG nicht schließen."
If Err.Number <> 0 Then Exit Do
Exit Sub
Loop Until True
' Check last function call for errors and write to output
If Err.Number <> 0 Then
       strmsg = "Error #" & Hex(Err.Number) & vbCrLf & errLabel & vbCrLf & Err.Description
       oExecLib.raiseException objServer.GetExceptionString(1), strmsg
End If
End Sub
' --- Helper function ----------------
' Check if a log text contains "WARNING" and "ERROR" and "Segmentation Violation"
Function checkLogForError(text, name, warn)
       Dim rgxp_w, rgxp_e, rgxp_s, arrLines, line
       Set rgxp_w = new regexp
       Set rgxp_e = new regexp
       Set rgxp_s = new regexp
       rgxp_w.Pattern = "^WARNING:"
       rgxp_w.IgnoreCase = true
       rgxp_w.Global = true
       rgxp_e.Pattern = "^ERROR:"
       rgxp_e.IgnoreCase = true
       rgxp_e.Global = true
       rgxp_s.Pattern = "^Segmentation Violation In Task"
       rgxp_s.IgnoreCase = true
       rgxp_s.Global = true
       arrLines = Split(text,vbCrLf)
       For Each line In arrLines
             if ((rgxp_w.Test(line) and warn = "1") or rgxp_s.Test(line) or rgxp_e.Test(line) ) and errorCounter < 100 then
                    allErrorsAndWarnings = allErrorsAndWarnings & "In " & name & ": " & line & vbCrLf
                    errorCounter = errorCounter + 1
                    if errorCounter = 100 then
                           allErrorsAndWarnings = "Mehr als 100 Fehler gefunden, die ersten 100 sind im Log enthalten:" & vbCrLf & allErrorsAndWarnings
                    end if
             end if
       Next
End Function

Formale Anforderungen an SAS-EG Projekte

Die teil- und vollautomatisierte Testfallausführungen von TOSCA Testfällen mit eingebundenen SAS-EG Projekten muss folgenden formalen Anforderungen genügen:

Anforderung 1 – technisch fehlerloses EG-Projekt

Das EG-Projekt darf keine Fehler – die mit dem eigentlichen (fachlichen/technischen) Test nichts zu tun haben – enthalten!

Diese Anforderung kann in einem Selbsttest wie folgt überprüft werden:

  1. Neue SAS-EG Instanz starten
  2. Projekt öffnen
  3. Prozessfluss über „Datei–>Projektname ausführen“ starten
  4. Das Ergebnis muss ein fehlerloser Durchlauf sein! (Hinweis: Drücken der Funktionstaste F8 reicht nicht aus, da dies nur einen Prozessfluss startet. Die Ausführung eines SAS-EG Projektes in TOSCA führt immer alle Prozessflüsse aus – eine Einschränkung ist nicht vorgesehen).

Anforderung 2 – Eingabeparameter im EG-Projekt

Verfügt ein EG-Projekt über Eingabeparameter so sind diese in TOSCA über den (optionalen) Modulparameter „SAS Code zur Initialisierung“ mitzugeben. Alternativ kann das zentrale Makro init_param.sas verwendet werden.

/* Makro: init_param.sas */
%macro init_param(param_name, param_type);
   %if not %symexist(tosca_run) or not %symexist(&param_name.) %then %do;
      %global &param_name.;
      %if &param_type. = DT %then %do;
         %let &param_name. = "&&input_&param_name."dt;
      %end;
      %else %if &param_type. = D %then %do;
         %let &param_name. = "&&input_&param_name."d;
      %end;
      %else %if &param_type. = S %then %do;
         %let &param_name. = "&&input_&param_name.";
      %end;
      %else %do;
         %let &param_name. = &&input_&param_name.;
      %end;
   %end;
   %put DEBUG: &param_name. = &&&param_name.;
%mend;

Anforderung 3 – WARNING wie ERROR handhaben

Jeder fachliche Abweichung muß in einem der SAS-EG Logfiles als ERROR oder WARNING vermerkt werden.

Das Makro „assert_table_empty.sas“ kann als Hilfestellung in ein SAS-EG-Projekt eingebunden werden. Dieses Makro untersucht eine zu benennende Tabelle und meldet ERROR oder WARNING, wenn diese Datenzeilen enthält. Achtung: Dieses Makro funktioniert nicht mit VIEWS, da in diesem Makro lediglich Meta-Informationen abgefragt werden – ein Zugriff auf die Daten erfolgt nicht.

/* MAKRO: ASSERT_TABLE_EMPTY.SAS */
%MACRO ASSERT_TABLE_EMPTY(TABLENAME, LEVEL);
    %LET DSID = %SYSFUNC(OPEN(&TABLENAME, IN));
    %LET NOBS = %SYSFUNC(ATTRN(&DSID, NOBS));
    %IF &DSID > 0 %THEN %LET RC = %SYSFUNC(CLOSE(&DSID));
    %IF &NOBS > 0 %THEN %PUT &LEVEL: &NOBS Fehler gefunden in &TABLENAME!;
%MEND ASSERT_TABLE_EMPTY;

Anforderung 4 – Einheitliche Verbindungsprofile

Die Testfälle in TOSCA werden über das Modul Start SAS-EG-Projekt mit einem Verbindungsprofil parametrisiert. Da eine Testfallausführung von unterschiedlichen Personen durchgeführt werden kann, ist es sinnvoll die im SAS-EG hinterlegten Verbindungsprofile gruppenweit (Projektmitglieder, Teammitglieder etc.) gleich zu benennen.