November 8, 2023 | IBM Z

Simplify JCL Testing with JCLplus-as-code


In today’s dynamic world of DevOps and agile software development, the need for continuous, end-to-end automation is more crucial than ever. Modern applications and services combine legacy and recent technologies, with Mainframes continuing to play a central role in many organization’s core operations. Integrating Mainframe legacy systems into this modern DevOps landscape becomes necessary as businesses try to accelerate their software delivery pipelines and embrace continuous integration and deployment (CI/CD) practices. 


IBM Z Mainframe’s batch processing has been, and still is, the backbone that supports mission-critical applications. However, aligning the iterative, file-centric nature of Mainframe operations with DevOps’s agility and automation goals can be a challenge. Traditional Batch Job testing methods often involve extensive scripting and programming efforts and coding file transfer mechanisms to invoke the JCL validation to the legacy stack. This is where the concept of ’JCLplus-as-code’ using SEA JCLplus+ validation/run-time simulation framework comes into play.  

The JCLPlus-as-Code Solution 

At the heart of JCLplus-as-codeis the SEA JCLplus+ for DevOps Architecture that enables JCLplus+ testing services integration from any IDe and from other services such as REST API, Java Client CLI, and others (see Figure 1). 

Figure 1 – JCLplus+ DevOps Architecture

JCLplus-as-code enhanced the versatile Java Command Line Client to automate JCL validation and run-time simulation using JCLplus+ Legacy as a backbone serviceSEA JCLplus-as-code facilitates the automation and deployment of automated testing processes via YAML declarative language. The CLI Java Client’s ability to accept YAML commands via the -tasks (-a) command line option makes this function even more powerful. The YAML language is a human-readable data serialization format that simplifies structuring declarative instructions for JCL testing (see Figure 2).  

Figure 2 – JCLplus-as-code

This approach allows quality and development test staff to declare different test JCLplus+ scenarios without designing, coding, and maintaining complex scripts for each specific testing need. Furthermore, this offers a level of abstraction to write and run different JCL testing policies without modifying or adding complex logic to the existing testing scripts. 

A simple YAML task file looks like this: 

In this example, we have several top-level elements: 

  • Connection: specifies the JRemote manager’s DNS name and port. This is the z/OS image where your JCL testing will be performed. 
  • Target: specifies the target logical system name on which you want to perform a JCL validation. 
  • Tasks: this is where you specify the list of operations to perform. 

Operation Elements 

We have operation elements under the task’s element: check, edit, and reformat. These operations allow you to define different types of JCL testing and can contain multiple bundles, allowing you to work with various files and datasets. For instance, the check operation within the sample tasks file has one bundle, which specifies a set of JCL files to operate on. In this case, a single JCL file is located on the local system. 


Another typical testing situation is crafting a test case using cataloged procedures modified during a change request. With JClplus-as-code, we can transfer those procedures wherever they are stored, bundle them with the execution Jobs, and run a test for this specific scenario. The following testing policy depicts the situation below. 


This article emphasizes the increasing importance of achieving end-to-end automation in modern DevOps and agile software development, particularly when integrating Mainframe batch-testing into the DevOps scene. Mainframes remain vital for mission-critical operations in many organizations, but their traditional batch-processing methods often clash with DevOps practice’s automated nature.


In order to address this challenge, SEA introduces the concept of JCLplus-as-code’ using the SEA JCLplus+ validation and run-time simulation framework. This approach offers an architecture integrating JCLplus+ testing services from various IDEs and services, including REST APIs. Enhancing the Java Command Line Client enables the automation of JCL validation and run-time simulation through YAML declarative language, allowing users to declare test scenarios without complex scripting creation or modification.