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
//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
//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
//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
//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
//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
//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
//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
//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
//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
//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
//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
//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>"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.
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
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
<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
cvar="+I"
hvar=c2x(cvar)
<INPUT>0000004
<THINK>00.26.871 AT 00:00:29.011
<HEX>"F94EF2114CD2A84040114CF9A311" /**/
<HEX>hvar /**/
<HEX>"A597" /**/