Running Tests in CI/CD Pipelines
Running your SHAFT tests in a CI/CD pipeline is straightforward. SHAFT's property system lets you override any configuration from the command line, making it easy to adapt tests for unattended pipeline execution.
Basic Pipeline Command
The simplest way to run SHAFT tests in any CI/CD system is with Maven:
mvn -e test \
-DheadlessExecution=true \
-Dallure.automaticallyOpen=false \
-Dallure.generateArchive=true
| Property | Why |
|---|---|
headlessExecution=true | No display available in CI — run the browser without a GUI |
allure.automaticallyOpen=false | Do not try to open a browser to show the report |
allure.generateArchive=true | Generate a portable ZIP of the Allure report for artifact publishing |
Recommended CI/CD Properties
Create a custom.properties file with sensible defaults for CI, then override individual values from the CLI as needed:
# CI/CD defaults
headlessExecution=true
allure.automaticallyOpen=false
allure.generateArchive=true
retryMaximumNumberOfAttempts=2
createAnimatedGif=false
videoParams_recordVideo=false
Remember the property priority hierarchy: Code-based > CLI-based > File-based > Defaults. CLI parameters always override file-based values, so your pipeline can fine-tune any property.
GitHub Actions Example
name: Run Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Run tests
run: |
mvn -e test \
-DheadlessExecution=true \
-Dallure.automaticallyOpen=false \
-Dallure.generateArchive=true
- name: Upload Allure report
if: always()
uses: actions/upload-artifact@v4
with:
name: allure-report
path: allure-report-archive/
Jenkins Pipeline Example
pipeline {
agent any
tools {
maven 'Maven-3.9'
jdk 'JDK-21'
}
stages {
stage('Test') {
steps {
sh '''
mvn -e test \
-DheadlessExecution=true \
-Dallure.automaticallyOpen=false \
-Dallure.generateArchive=true
'''
}
}
}
post {
always {
archiveArtifacts artifacts: 'allure-report-archive/**', allowEmptyArchive: true
}
}
}
Running Specific Tests
Use Maven Surefire parameters to control which tests run:
mvn test -Dtest=LoginTest
mvn test -Dtest=LoginTest#testValidLogin
mvn test -Dtest="com.example.tests.**"
Parameterizing for Multiple Environments
Use CI/CD pipeline variables to switch between environments:
mvn test \
-DbaseURL=${TARGET_URL} \
-DtargetBrowserName=${BROWSER} \
-DexecutionAddress=${GRID_URL} \
-DtargetOperatingSystem=${OS}
This lets you run the same test suite against staging, production, or different browser/OS combinations by changing pipeline variables.
Best Practices
- Always use headless mode in pipelines — there is no display server.
- Disable auto-opening reports — set
allure.automaticallyOpen=false. - Generate report archives — use
allure.generateArchive=trueand publish them as pipeline artifacts. - Set retry attempts —
retryMaximumNumberOfAttempts=2helps with flaky tests in CI environments. - Parameterize everything — use CLI properties so the same test suite works across environments.
- Archive test artifacts — always upload reports and logs, even on failure (use
if: always()in GitHub Actions orpost { always { } }in Jenkins).