Best practice for structuring a Katalon automation repository

I am new to katalon tool and Automation. What is the best practice for structuring a Katalon automation repository in Katalon studio, when working with multiple applications (e.g., Hospital Registration, Covenant Compliance, Edible, and Dale)?

Specifically:

  • How should the Katalon project structure be designed to support multiple applications within a single repository?
  • What is the recommended Azure DevOps repository and pipeline structure to support CI/CD for these applications?
  • How should the setup accommodate a team of 3 QA engineers working collaboratively, potentially on the same or different applications?
  • Could you provide a diagram or visual representation of the proposed architecture?

Based on Katalon best practices and Azure DevOps integration guidelines, here’s the recommended structure for your multi-application automation repository:

1. Katalon Project Structure (Single Repository)

For multiple applications (Hospital Registration, Covenant Compliance, Edible, Dale), use application-scoped folders within one Katalon project:


**`KatalonAutomationRepo.prj`
`β”œβ”€β”€ Test Cases`
`β”‚   β”œβ”€β”€ Hospital Registration`
`β”‚   β”‚   β”œβ”€β”€ Login`
`β”‚   β”‚   β”œβ”€β”€ Patient Registration`
`β”‚   β”‚   └── Billing`
`β”‚   β”œβ”€β”€ Covenant Compliance`
`β”‚   β”‚   β”œβ”€β”€ Login`
`β”‚   β”‚   β”œβ”€β”€ Report Generation`
`β”‚   β”‚   └── Data Submission`
`β”‚   β”œβ”€β”€ Edible`
`β”‚   β”‚   β”œβ”€β”€ Login`
`β”‚   β”‚   └── Inventory Management`
`β”‚   └── Dale`
`β”‚       β”œβ”€β”€ Login`
`β”‚       └── Dashboard`
`β”œβ”€β”€ Object Repository`
`β”‚   β”œβ”€β”€ Hospital Registration    (mirror Test Cases structure)`
`β”‚   β”‚   β”œβ”€β”€ UI Elements`
`β”‚   β”‚   └── WS Objects`
`β”‚   β”œβ”€β”€ Covenant Compliance`
`β”‚   β”‚   β”œβ”€β”€ UI Elements`
`β”‚   β”‚   └── WS Objects`
`β”‚   β”œβ”€β”€ Edible`
`β”‚   └── Dale`
`β”œβ”€β”€ Test Suites`
`β”‚   β”œβ”€β”€ Hospital Registration TSuite`
`β”‚   β”œβ”€β”€ Covenant Compliance TSuite`
`β”‚   β”œβ”€β”€ Edible TSuite`
`β”‚   β”œβ”€β”€ Dale TSuite`
`β”‚   └── Cross-App Regression TSuite (combines all)`
`β”œβ”€β”€ Data Files`
`β”‚   β”œβ”€β”€ Hospital Registration`
`β”‚   β”œβ”€β”€ Covenant Compliance`
`β”‚   β”œβ”€β”€ Edible`
`β”‚   └── Dale`
`β”œβ”€β”€ Profiles                     (environment configs)`
`β”‚   β”œβ”€β”€ Dev`
`β”‚   β”œβ”€β”€ QA`
`β”‚   └── Production`
`└── Global Test Listeners        (shared utilities)`**

**Key principles:**

* Create folders matching application modules for easier navigation

* Mirror Object Repository structure with Test Cases for consistency

* Use relative data file paths stored in project directory

## **2. Azure DevOps Repository & Pipeline Structure**


**`Azure DevOps Repository`
`β”œβ”€β”€ /katalon-automation               (main repo)`
`β”‚   β”œβ”€β”€ KatalonAutomationRepo.prj`
`β”‚   β”œβ”€β”€ Dockerfile                    (optional custom image)`
`β”‚   └── azure-pipelines.yml`
`β”œβ”€β”€ /pipelines`
`β”‚   β”œβ”€β”€ hospital-registration-pipeline.yml`
`β”‚   β”œβ”€β”€ covenant-compliance-pipeline.yml`
`β”‚   β”œβ”€β”€ edible-pipeline.yml`
`β”‚   β”œβ”€β”€ dale-pipeline.yml`
`β”‚   └── cross-app-regression-pipeline.yml`
`└── /agent-config`
`    β”œβ”€β”€ config.cmd`
`    └── run.cmd`**

**Pipeline example (YAML):**


**`trigger:`
`  - main`

`pool:`
`  name: Default`
`  demands:`
`    - agent.name -equals katalonagent`

`steps:`
`  - script: katalonc -noSplash -runMode=console -projectPath="KatalonAutomationRepo.prj" -testSuitePath="Test Suites/Hospital Registration TSuite" browserType="Chrome" -executionProfile="QA" -apiKey="YOUR_API_KEY"`
`    displayName: 'Run Hospital Registration Tests'`**

**CI/CD setup:**

1. Commit Katalon project to Git repository accessible by Azure DevOps

2. Create pipeline in Azure DevOps β†’ Pipelines

3. Configure Katalon agent (download, configure, run)

4. Ensure project includes test cases, test suites, and components

## **3. Team Collaboration Setup (3 QA Engineers)**

| **Role/Task** | **Strategy** |
|:---|:---|
| **Branching** | Use Git branches per application: `feature/hospital-registration`, `feature/covenant-compliance` |
| **Code conflicts** | QA engineers work on different application folders; use Git branch protection for main |
| **Shared utilities** | Keep Global Test Listeners & Profiles in `/shared` folder accessible to all |
| **Test execution** | Run per-application test suites via separate pipelines; cross-app regression runs nightly |
| **Object Repository** | Each QA owns their application's Object Repository folder to prevent duplication  |

**Collaboration workflow:**

* QA Engineer 1 β†’ Hospital Registration

* QA Engineer 2 β†’ Covenant Compliance

* QA Engineer 3 β†’ Edible + Dale

* All β†’ Cross-App Regression TSuite (shared)

## **4. Architecture Diagram**


**`β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”`
`β”‚           Azure DevOps Repository (Git)                     β”‚`
`β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚`
`β”‚  β”‚         KatalonAutomationRepo.prj                      β”‚  β”‚`
`β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚  β”‚`
`β”‚  β”‚  β”‚Hospital β”‚ β”‚Covenant β”‚ β”‚ Edible  β”‚ β”‚  Dale   β”‚     β”‚  β”‚`
`β”‚  β”‚  β”‚Reg TCs  β”‚ β”‚Comp TCs β”‚ β”‚  TCs    β”‚ β”‚  TCs    β”‚     β”‚  β”‚`
`β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  β”‚`
`β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚`
`β”‚  β”‚  β”‚         Test Suites (per app + cross-regression)β”‚  β”‚  β”‚`
`β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚`
`β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚  β”‚`
`β”‚  β”‚  β”‚Hospital β”‚ β”‚Covenant β”‚ β”‚ Edible  β”‚ β”‚  Dale   β”‚     β”‚  β”‚`
`β”‚  β”‚  β”‚Obj Repo β”‚ β”‚Obj Repo β”‚ β”‚Obj Repo β”‚ β”‚Obj Repo β”‚     β”‚  β”‚`
`β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  β”‚`
`β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚`
`β”‚                                                             β”‚`
`β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚`
`β”‚  β”‚           Azure Pipelines (CI/CD)                      β”‚  β”‚`
`β”‚  β”‚  [App 1 Pipeline] [App 2 Pipeline] [Regression]       β”‚  β”‚`
`β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚`
`β”‚                                                             β”‚`
`β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚`
`β”‚  β”‚           Katalon Agent Pool                           β”‚  β”‚`
`β”‚  β”‚  [Windows Agent with Katalon Studio + Chrome]         β”‚  β”‚`
`β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚`
`β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜`
`                              ↓`
`β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”`
`β”‚              QA Engineers (3)                                β”‚`
`β”‚  [QA1: Hospital]  [QA2: Covenant]  [QA3: Edible+Dale]       β”‚`
`β”‚         ↓                ↓                  ↓                β”‚`
`β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚`
`β”‚  β”‚         Git Branches + Merge to Main                 β”‚  β”‚`
`β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚`
`β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜`**

This structure ensures:

* **Scalability**: Add new applications as new folders without breaking existing tests

* **Maintainability**: Object Repository mirrors Test Cases

* **Collaboration**: Clear ownership per application prevents conflicts

* **CI/CD**: Separate pipelines per app + nightly cross-app regression

HI @olagoke.alli
My recommendation is to design the repository as if it will support multiple applications, multiple QA engineers, and future growth, even if the team is small today.

You have multiple applications:

  • Hospital Registration
  • Covenant Compliance
  • Edible
  • Dale

And a team of 3 QA engineers.

The biggest mistake beginners make is creating separate Katalon projects for every application and then struggling to maintain common code, utilities, test data, and CI/CD pipelines.

A better approach is to create one centralized automation repository with a clear application-wise structure.

Automation-Framework
β”‚
β”œβ”€β”€ Test Cases
β”‚ β”œβ”€β”€ HospitalRegistration
β”‚ β”‚ β”œβ”€β”€ Smoke
β”‚ β”‚ β”œβ”€β”€ Regression
β”‚ β”‚ └── Integration
β”‚ β”‚
β”‚ β”œβ”€β”€ CovenantCompliance
β”‚ β”‚ β”œβ”€β”€ Smoke
β”‚ β”‚ β”œβ”€β”€ Regression
β”‚ β”‚ └── Integration
β”‚ β”‚
β”‚ β”œβ”€β”€ Edible
β”‚ β”‚ β”œβ”€β”€ Smoke
β”‚ β”‚ └── Regression
β”‚ β”‚
β”‚ └── Dale
β”‚ β”œβ”€β”€ Smoke
β”‚ └── Regression
β”‚
β”œβ”€β”€ Object Repository
β”‚ β”œβ”€β”€ HospitalRegistration
β”‚ β”œβ”€β”€ CovenantCompliance
β”‚ β”œβ”€β”€ Edible
β”‚ └── Dale
β”‚
β”œβ”€β”€ Test Data
β”‚ β”œβ”€β”€ HospitalRegistration
β”‚ β”œβ”€β”€ CovenantCompliance
β”‚ β”œβ”€β”€ Edible
β”‚ └── Dale
β”‚
β”œβ”€β”€ Test Suites
β”‚ β”œβ”€β”€ HospitalRegistration
β”‚ β”œβ”€β”€ CovenantCompliance
β”‚ β”œβ”€β”€ Edible
β”‚ └── Dale
β”‚
β”œβ”€β”€ Test Suite Collections
β”‚
β”œβ”€β”€ Keywords
β”‚ β”œβ”€β”€ Common
β”‚ β”‚ β”œβ”€β”€ BrowserUtils
β”‚ β”‚ β”œβ”€β”€ DatabaseUtils
β”‚ β”‚ β”œβ”€β”€ APIUtils
β”‚ β”‚ β”œβ”€β”€ ReportUtils
β”‚ β”‚ └── WaitUtils
β”‚ β”‚
β”‚ β”œβ”€β”€ HospitalRegistration
β”‚ β”œβ”€β”€ CovenantCompliance
β”‚ β”œβ”€β”€ Edible
β”‚ └── Dale
β”‚
β”œβ”€β”€ Profiles
β”‚ β”œβ”€β”€ DEV
β”‚ β”œβ”€β”€ QA
β”‚ β”œβ”€β”€ UAT
β”‚ └── PROD
β”‚
└── Include

Why This Structure Works

Application Isolation

Each application has its own:

  • Test Cases
  • Object Repository
  • Test Data
  • Test Suites

This prevents accidental changes affecting another application.

The best practice would be to share Reusable Components amongst teams
Store reusable code under:

Keywords/Common

Examples:

BrowserUtils.groovy
DatabaseUtils.groovy
ExcelUtils.groovy
ApiUtils.groovy

Instead of creating the same code four times, all applications reuse common utilities.

This follows the DRY (Don’t Repeat Yourself) principle.


Team Collaboration Model

Suppose there are 3 QA Engineers.

Engineer Responsibility
QA 1 Hospital Registration
QA 2 Covenant Compliance
QA 3 Edible + Dale

All engineers work in the same repository.

Example:

QA1
 └── Test Cases/HospitalRegistration

QA2
 └── Test Cases/CovenantCompliance

QA3
 └── Test Cases/Edible
 └── Test Cases/Dale

Shared utilities remain under:

Keywords/Common

and are reviewed before modification.

Azure DevOps Repository Structure

A single repository is usually sufficient.

Example:

Azure DevOps
β”‚
└── Katalon-Automation
     β”‚
     β”œβ”€β”€ Test Cases
     β”œβ”€β”€ Object Repository
     β”œβ”€β”€ Keywords
     β”œβ”€β”€ Profiles
     └── Test Suites

Benefits:

  • Single source of truth
  • Easier maintenance
  • Shared framework
  • Easier onboarding

Avoid:

HospitalRepo
ComplianceRepo
EdibleRepo
DaleRepo

unless applications are completely unrelated and maintained by different teams.


Branching Strategy

A simple Git flow works well.

main
β”‚
β”œβ”€β”€ develop
β”‚
β”œβ”€β”€ feature/hospital-registration
β”œβ”€β”€ feature/compliance
β”œβ”€β”€ feature/edible
└── feature/dale

Workflow:

Feature Branch
      ↓
Pull Request
      ↓
Code Review
      ↓
Develop
      ↓
Main

This prevents engineers from overwriting each other’s work.


Azure DevOps Pipeline Structure

Create one pipeline per application.

Example:

Pipelines
β”‚
β”œβ”€β”€ HospitalRegistration-Pipeline
β”œβ”€β”€ CovenantCompliance-Pipeline
β”œβ”€β”€ Edible-Pipeline
└── Dale-Pipeline

Each pipeline executes only its application’s test suites.

Environment Management

Use Katalon Profiles.

Example:

Profiles
β”œβ”€β”€ DEV
β”œβ”€β”€ QA
β”œβ”€β”€ UAT
└── PROD

Store:

baseUrl
username
password
apiEndpoint

Example:

GlobalVariable.baseUrl

This eliminates hardcoded values.

Recommended CI/CD Flow

Developer Deploys Code
            β”‚
            β–Ό
      QA Environment
            β”‚
            β–Ό
 Azure Pipeline Triggered
            β”‚
            β–Ό
 Katalon Smoke Suite
            β”‚
            β–Ό
 Generate Reports
            β”‚
            β–Ό
 Publish Results
            β”‚
            β–Ό
 Regression Execution

High-Level Architecture Diagram

                        Azure DevOps
                              β”‚
                              β–Ό
                    Git Repository
                              β”‚
                              β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚      Katalon Automation Repo      β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚              β”‚
                  β”‚              β”‚
                  β–Ό              β–Ό

         Common Framework     Application Tests
          (Reusable)          (Business Specific)

      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚ BrowserUtils  β”‚     β”‚ Hospital Reg.    β”‚
      β”‚ APIUtils      β”‚     β”‚ Covenant Comp.   β”‚
      β”‚ DBUtils       β”‚     β”‚ Edible           β”‚
      β”‚ Reporting     β”‚     β”‚ Dale             β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                  β”‚
                  β–Ό

          Azure Pipelines
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚Hosp.   β”‚Cov.    β”‚Edible  β”‚Dale    β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                  β”‚
                  β–Ό

            Test Reports
                  β”‚
                  β–Ό

              TestOps

Additional Best Practices you can foloow

  1. Follow a naming convention:
TC_HR_Login_001
TC_CC_Search_001
TC_ED_Checkout_001
  1. Keep application-specific objects separated.
  2. Move reusable actions into Custom Keywords.
  3. Use Git Pull Requests for all changes.
  4. Enable code reviews before merging.
  5. Store secrets in Azure Variable Groups or Katalon protected variables, not in scripts.
  6. Create Smoke, Regression, and Sanity suites separately for each application.
  7. If the framework grows significantly (10+ applications and multiple teams), then consider splitting into multiple repositories. For 4 applications and 3 QA engineers, a single repository is typically the most maintainable approach.

Long Story short: For your scenario (4 applications, 3 QA engineers), the most practical and scalable solution is one Katalon project, one Azure DevOps repository, shared common framework components, application-wise folder segregation, and separate Azure pipelines per application. This keeps maintenance low, promotes code reuse, and supports collaborative development efficiently.