3270 Unattended Playback, Dubbing and Comparison Sample JCL (VTAM)


The following examples show sample JCL for 3270 testing. The first example is followed by increasingly complex scenarios.

Example 1: Play Back a Single Script, Single Terminal

In the following figure, Performance Test will run a script named DBCLOSE in a CICS region named CICS41A. The script is contained in the data set ESA1.RECBIG.DATA. A transaction journal is created in SYSOUT class A, used on the JOURNAL parameter on the GROUP statement.

JCL to Play Back Single Script, Single Terminal

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K  
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA1.RECBIG.DATA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 GROUP CICS41A  JOURNAL(A)
   SCRIPT(DBCLOSE)

Example 2: Play Back Multiple Scripts, Single Terminal

In the following figure, Performance Test will run a script named IMSLOGON in an IMS/DC region named ICR1. When IMSLOGON is finished, the script IMSEXER runs. Finally, the script IMSOFF runs. The scripts are contained in the data sets RPN1.IMS.RECORD and SYS2.RECORD.DATA.

JCL to Play Back Multiple Scripts, Single Terminal

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K  
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=RPN1.IMS.RECORD,DISP=SHR
//         DD DSN=SYS2.RECORD.DATA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 GROUP ICR1
   SCRIPT(IMSLOGON)
   SCRIPT(IMSEXER)
   SCRIPT(IMSOFF)

Example 3: Play Back Multiple Scripts, Multiple Terminals

In the following figure, Performance Test will run three scripts using 10 terminals logged on to CICS region CICSPROD. CICSEXER, set on the second SCRIPT statement, runs 20 times on each terminal. In addition, each terminal reconnects and plays back the scripts five times.

JCL to Play Back Multiple Scripts, Multiple Terminals

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA1.RECBIG.DATA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 GROUP CICSPROD TERM(10) REPEAT(5)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER) REPEAT(20)
   SCRIPT(CICSOFF)

Example 4: Play Back Multiple Scripts, Multiple Terminals, and Multiple Domain Destinations

In the following figure, Performance Test is used for stress testing. A number of scripts are run simultaneously in CICS on 20 different terminals and IMS/DC on 40 terminals. In addition, the region CICS41A runs multiple different scripts simultaneously on different terminals. To do this, establish two terminal groups — both running against CICS41A but defining different scripts.

JCL to Play Back Multiple Scripts, Terminals, and Transaction Processing

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA1.RECBIG.DATA,DISP=SHR
//         DD DSN=SYS2.IMS.RECORDS,DISP=SHR
//         DD DSN=SYS2.CICS.RECORDS,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN    DD *
CONTROL PREFIX(DHPR)
COMPANY *** YOUR NAME HERE ***
 GROUP CICS41A TERM(10)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER) REPEAT(20)
   SCRIPT(CICSOFF)
 GROUP CICS41A TERM(10)
   SCRIPT(CICSON)
   SCRIPT(OLTEST) REPEAT(20)
   SCRIPT(CICSOFF)
GROUP IMSREG1 TERM(40)
   SCRIPT(IMSON)
   SCRIPT(GLTEST1) REPEAT(10)
   SCRIPT(GLTEST2) REPEAT(50)
   SCRIPT(GLTEST3) REPEAT(20)
   SCRIPT(IMSOFF)

Example 5: Play Back and Compare All Scripts in a Group

In the following figure, all of the scripts in a single group are played back. The results are stored in the exception log (XLOG).

JCL to Play Back and Compare Scripts

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA.RECBIG.DATA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 GROUP   CICSPROD COPT(1) XLOG(*)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF)

Example 6: Dub All Scripts in a Group

In the following figure, all scripts in a single group are dubbed. The dubbed scripts will be stored in data set ESA.RECBIG.DATA2. A log of the dubbed scripts will be stored in DLOGnnnn.

JCL to Dub All Scripts in a Group

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA.RECBIG.DATA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 GROUP   CICSPROD COPT(1) XLOG(*)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF)

Example 7: Exclude Scripts from Dubbing

In the following figure, the script CICSEXER is dubbed. The dubbed scripts will be stored in data set ESA.RECBIG.DATA2. A log of the dubbed scripts will be stored in DLOGnnnn.

JCL to Exclude Scripts from Dubbing

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA.RECBIG.DATA,DISP=SHR
//DUBLIB   DD DSN=ESA.RECBIG.DATA2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 CONTROL DUB
 GROUP   CICSPROD
   SCRIPT(CICSON) NODUB
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF) NODUB

Example 8: Dub and Combine Scripts, Single Group

In the following figure, all of the scripts in a single group are dubbed. All of the scripts for this group will be stored in data set member COMBINED of ESA.RECBIG.DATA2. A log of the dubbed scripts will be stored in DLOGnnnn.

JCL to Dub and Combine Scripts

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA.RECBIG.DATA,DISP=SHR
//DUBLIB   DD DSN=ESA.RECBIG.DATA2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 GROUP   CICSPROD DUB(DUBLIB,,COMBINED)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF)

Example 9: Dub Multiple Groups

In the following figure, all of the groups are dubbed except the first group. All dubbed scripts in the third group will be stored in data set ESA.RECBIG.DATA2. The other groups will be stored in SYS2.RECORD.DATA2. A log is created in data sets ESA.RECBIG.DATA2 and SYS2.RECORD.DATA2 with the name DLOGnnnn.

JCL to Dub Multiple Groups

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA1.RECBIG.DATA,DISP=SHR
//         DD DSN=RPN1.IMS.RECORD,DISP=SHR
//         DD DSN=SYS2.RECORD.DATA,DISP=SHR
//         DD DSN=ESA.RECBIG.DATA,DISP=SHR
//DUBLIB   DD DSN=SYS2.RECORD.DATA2,DISP=SHR
//DUBLIB2  DD DSN=ESA.RECBIG.DATA2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 CONTROL DUB
 GROUP   CICS41A NODUB
   SCRIPT(DBCLOSE)
 GROUP   ICR1
   SCRIPT(IMSLOGON) NODUB
   SCRIPT(IMSEXER)
   SCRIPT(IMSOFF) NODUB
 GROUP   CICSPROD DUB(DUBLIB2)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF)
 GROUP   ICR1
   SCRIPT(IMSLOGON) NODUB
   SCRIPT(IMSEXER2)
   SCRIPT(IMSOFF) NODUB

Example 10: Compare All Specified Scripts in a Group

In the following figure, all of the scripts in a single group are compared to previously dubbed scripts of the same name located in data set ESA.RECBIG.DATA2.

JCL to Compare All Specified Scripts in a Group

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA.RECBIG.DATA,DISP=SHR
//DUBLIB   DD DSN=ESA.RECBIG.DATA2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 COMPARE COPT(1) XLOG(*)
 GROUP   CICSPROD
   SCRIPT(CICSON)
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF)

Example 11: Compare Multiple Groups

In the following figure, all of the scripts in each group are compared to previously dubbed scripts of the same name. The scripts in the third group are compared to the same-name scripts located in data set ESA.RECBIG.DATA2, while the scripts in the other groups are compared to the scripts in SYS2.RECORD.DATA2.

JCL to Compare Multiple Groups

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=ESA1.RECBIG.DATA,DISP=SHR
//         DD DSN=RPN1.IMS.RECORD,DISP=SHR
//         DD DSN=SYS2.RECORD.DATA,DISP=SHR
//         DD DSN=ESA.RECBIG.DATA,DISP=SHR
//DUBLIB   DD DSN=SYS2.RECORD.DATA2,DISP=SHR
//DUBLIB2  DD DSN=ESA.RECBIG.DATA2,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 COMPARE COPT(1) XLOG(*)
 GROUP   CICS41A
   SCRIPT(DBCLOSE)
 GROUP   ICR1
   SCRIPT(IMSLOGON)
   SCRIPT(IMSEXER)
   SCRIPT(IMSOFF)
 GROUP   CICSPROD DUB(DUBLIB2)
   SCRIPT(CICSON)
   SCRIPT(CICSEXER)
   SCRIPT(CICSOFF)
 GROUP   ICR1
   SCRIPT(IMSLOGON)
   SCRIPT(IMSEXER2)
   SCRIPT(IMSOFF)

Example 12: LU0 Script

In the following figure, Performance Test replays one LU0 script. The script (HPLU0001) was recorded using Global Record because LU0 scripts cannot be recorded using the Performance Test online recording features. Performance Test waits 15 seconds after receiving data from the application before responding. The Keyboard Restore flag is not used by this application to signal an end to sending, so the KBIGNORE parameter is used.

This site has defined LU0 virtual terminals using prefix EHLU0.

JCL to Compare Multiple Groups

//HIPER  EXEC PGM=EHSBATCH,REGION=4096K
//STEPLIB  DD DSN=HIPER.LOAD,DISP=SHR
//SYSLIB   DD DSN=GLOBAL.RECORD.SCRIPTS,DISP=SHR
//SYSIN    DD *
 CONTROL KEYU(1500) PREFIX(EHLU0) SUFFIX(3)
 GROUP   LU0APPL  -
         KBIGNORE     -
         LOGMODE(IBM3600)
   SCRIPT(HPLU0001)

Replacing Data with Unformatted Scripts

Since LU0 scripts are unformatted, all inputs and outputs are recorded in <HEX> format. What you see in the script is actually a character representation of the hex string in quotes, followed by a comment containing the character string itself. A sample follows:

Character Representation of Hex String

<HEX>"D8C7F3F0F0F2F1F9F2F1D6F0F0D501C1"    /*QG30021921O00N.A*/
<HEX>"D7F4F5F5F2F6FCC1D3C3C1D4C9D9C242"    /*P45526.ALTAMIRB.*/
<HEX>"F0F0F0F102F0F0F5F9"                  /*0001.0059       */

Performance Test facilities, like compare, dub, and message filtering, all support unformatted scripts. REXX commands can be added to these scripts, and it is possible to edit and place a variable in these strings.

Warning

Important

Unattended playback will give unexpected results if the comment block is removed.

Method 1:

The sample above contains a transaction code (QG30), a userid (AP45526) and a password (ALTAMIRB). The following approach can be used to replace a userid and password with REXX variables using the Performance Test EXECUTE statement and the REXX C2X (character-to-hex) function. Note that an empty comment block is concatenated to the end of VarHex1 and VarHex2. The first two <HEX> lines are deleted and replaced with two <EXECUTE> lines.

Method 1 Sample

UserChar = 'AP45526'
PwdChar  = 'ALTAMIRB'
UserChar.Pre = SUBSTR(UserChar,1,1)
UserChar.Suf = SUBSTR(UserChar,2,6)
*
VarHex1 = D8C7F3F0F0F2F1F9F2F1D6F0F0D501||C2X(UserChar.Pre)||' /* */'
VarHex2 = C2X(UserChar.Suf)||FC||C2X(PwdChar)||42||' /* */'

<EXECUTE>"<HEX>"||VarHex1
<EXECUTE>"<HEX>"||VarHex2
<HEX>"F0F0F0F102F0F0F5F9"                  /*0001.0059       */

Method 2:

Method 2 - First Sample

<INPUT>0000004
<THINK>00.26.871 AT 00:00:29.011
<HEX>"F94EF2114CD2A84040114CF9A3114EC9"    /*9+2.<Ky  .<9t.+I*/
<HEX>"A597"                                /*vp              */
</INPUT>

A simpler approach is to “break up” a <HEX> line into smaller lines in order to isolate a variable from the string. In this example, the input sequence above is identical to the sequence below. Remember that the comment block is always required. Experience shows that it should start at column 44.

Method 2 - Second Sample

COLS> ----+----1----+----2----+----3----+----4----+----5----+----6---

      cvar="+I"
      hvar=c2x(cvar)
      <INPUT>0000004
      <THINK>00.26.871 AT 00:00:29.011
      <HEX>"F94EF2114CD2A84040114CF9A311"        /**/
      <HEX>hvar                                  /**/
      <HEX>"A597"                                /**/

 

 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*

BMC AMI DevX Performance Test 17.02