Reporting
SHAFT Engine ships with two complementary report formats, each suited to a different audience and workflow. You can enable or disable them independently using properties.
Report Types at a Glance
| Report | Best For | Default State |
|---|---|---|
| Allure Report | Deep debugging — step-by-step logs, screenshots, videos | ✅ Opens automatically after execution |
| Execution Summary | Quick supplemental feedback — fast, portable, no setup | ⚙️ Opt-in via property |
Allure Report
The Allure Report is the primary report in SHAFT. It opens automatically in your default browser at the end of every test run and provides a rich, single-file HTML report with:
- Step-by-step action logs with screenshots attached
- Video recordings (when enabled)
- Animated GIFs of browser sessions
- Test history and trend graphs across multiple runs
- Environment information and categories
Open Allure Report Manually
SHAFT writes convenience scripts to your project root during the first run. Use them to regenerate and serve the Allure report at any time:
generate_allure_report.bat
./generate_allure_report.sh
Disable Auto-Opening the Allure Report
The Allure report opens automatically by default (allure.automaticallyOpen=true). To disable this:
- File-based
- CLI-based
- Code-based
allure.automaticallyOpen=false
mvn test -Dallure.automaticallyOpen=false
import com.shaft.driver.SHAFT;
SHAFT.Properties.allure.set().automaticallyOpen(false);
Generate an Allure Report Archive (for CI/CD)
To generate a portable ZIP archive of the Allure report that you can publish as a CI/CD artifact:
- File-based
- CLI-based
- Code-based
allure.generateArchive=true
mvn test -Dallure.generateArchive=true
import com.shaft.driver.SHAFT;
SHAFT.Properties.allure.set().generateArchive(true);
Customize the Allure Report
You can customize the report title and logo displayed in the generated HTML:
- File-based
- Code-based
allure.customTitle=My Regression Suite
allure.customLogo=https://example.com/my-logo.png
import com.shaft.driver.SHAFT;
SHAFT.Properties.allure.set()
.customTitle("My Regression Suite")
.customLogo("https://example.com/my-logo.png");
Tune Allure 3 Awesome Report Output
When SHAFT generates an Allure 3 report, it writes the corresponding allurerc.yaml file for the Allure Awesome plugin. In addition to the title, output directory, logo, and history settings, you can now control the Awesome plugin options that affect packaging, language, browser opening, and the hierarchy shown in the report tree.
These options apply to Allure 3 report generation. allure.automaticallyOpen controls whether SHAFT opens the final report after test execution, while allure.open is passed to the Allure CLI configuration itself.
- File-based
- CLI-based
- Code-based
# Generate a self-contained HTML report file (default: true)
allure.singleFile=true
# Allure UI language code (default: en)
allure.reportLanguage=en
# Let the Allure CLI open the report after generation (default: false)
allure.open=false
# Comma-separated Allure label hierarchy (default: parentSuite,suite,subSuite)
allure.groupBy=parentSuite,suite,subSuite
mvn test \
-Dallure.singleFile=false \
-Dallure.reportLanguage=fr \
-Dallure.open=false \
-Dallure.groupBy=package,class,method
import com.shaft.driver.SHAFT;
SHAFT.Properties.allure.set()
.singleFile(false)
.reportLanguage("fr")
.open(false)
.groupBy("package,class,method");
Common allure.groupBy presets include:
| Preset | Value | Best For |
|---|---|---|
| Suite hierarchy | parentSuite,suite,subSuite | Default TestNG or suite-based organization |
| BDD hierarchy | epic,feature,story | Business-readable Allure annotation reports |
| Code hierarchy | package,class,method | Developer-oriented navigation by Java structure |
| Module hierarchy | module,parentSuite,suite,subSuite | Multi-module projects |
Troubleshoot Allure CLI Generation
SHAFT runs Allure report generation synchronously so the generated command, exit code, standard output, and standard error are visible in execution logs. If report generation fails, check the log entries around Executing Allure report generation command, Allure generate stdout, Allure generate stderr, and Allure report generation command exited with code ... before changing report settings.
Accumulate History and Reports Across Runs
By default, SHAFT keeps Allure history to enable trend graphs across runs. You can control this behavior:
- File-based
- Code-based
# Accumulate history to show trends across runs (default: true)
allure.accumulateHistory=true
# Keep previous HTML report files in the report directory (default: true)
allure.accumulateReports=true
# Clean the results directory before each run (default: true)
allure.cleanResultsDirectory=true
import com.shaft.driver.SHAFT;
SHAFT.Properties.allure.set()
.accumulateHistory(true)
.accumulateReports(true)
.cleanResultsDirectory(true);
Execution Summary Report
The Execution Summary report is a lightweight supplement to the Allure report. It is disabled by default and is most useful when you want a quick, portable HTML summary without opening the full Allure report.
- No extra setup required — just enable the property.
- Portable — a fast self-contained HTML file you can share or archive.
Enable the Execution Summary Report
- File-based
- CLI-based
- Code-based
openExecutionSummaryReportAfterExecution=true
mvn test -DopenExecutionSummaryReportAfterExecution=true
import com.shaft.driver.SHAFT;
SHAFT.Properties.reporting.set().openExecutionSummaryReportAfterExecution(true);
Video Recording
SHAFT can record a video of every test session and automatically attach it to the Allure report. There is no code change required — it is purely a property:
- File-based
- CLI-based
- Code-based
videoParams_recordVideo=true
mvn test -DvideoParams_recordVideo=true
import com.shaft.driver.SHAFT;
SHAFT.Properties.visuals.set().videoParamsRecordVideo(true);
Where to Put Your Properties File
Create a custom.properties file under src/main/resources/properties/ in your project. SHAFT automatically creates a properties/ directory with some core files on first run — just add your file there:
your-project/
└── src/
└── main/
└── resources/
└── properties/
├── default/ ← auto-generated by SHAFT
└── custom.properties ← your file
Control Video Recording Scope
You can control which part of the session is recorded:
- File-based
- CLI-based
- Code-based
videoParams_recordVideo=true
# Scope options: DriverSession | TestMethod
videoParams_scope=DriverSession
mvn test -DvideoParams_recordVideo=true -DvideoParams_scope=DriverSession
import com.shaft.driver.SHAFT;
SHAFT.Properties.visuals.set()
.videoParamsRecordVideo(true)
.videoParamsScope("DriverSession");
| Scope | Description |
|---|---|
DriverSession | Records the entire browser/driver session (default) |
TestMethod | Records each test method as a separate video |
Animated GIFs
In addition to full video recordings, SHAFT can create an animated GIF from the screenshots taken during execution. This lightweight alternative is also attached to the Allure report:
- File-based
- CLI-based
- Code-based
createAnimatedGif=true
# Delay between frames in milliseconds (default: 500)
animatedGif_frameDelay=500
mvn test -DcreateAnimatedGif=true -DanimatedGif_frameDelay=500
import com.shaft.driver.SHAFT;
SHAFT.Properties.visuals.set()
.createAnimatedGif(true)
.animatedGifFrameDelay(500);
Recommended Configurations by Use Case
CI/CD Pipeline (archive report as artifact)
# Do not open the browser during CI
allure.automaticallyOpen=false
# Generate a ZIP artifact to publish from the pipeline
allure.generateArchive=true
Active Debugging (rich visuals)
# Allure opens automatically by default — add visual evidence
videoParams_recordVideo=true
createAnimatedGif=true
screenshotParams_whenToTakeAScreenshot=Always
Quick Pass/Fail Summary
# Enable fast portable summary alongside the Allure report
openExecutionSummaryReportAfterExecution=true
All Reporting Properties
For the full list of reporting-related properties and their default values, see the Properties List page.
Key properties quick reference:
| Property | Default | Description |
|---|---|---|
allure.automaticallyOpen | true | Open the Allure report in the browser automatically after the run |
allure.generateArchive | false | Generate a portable ZIP archive of the Allure report |
allure.accumulateHistory | true | Accumulate history across runs for trend graphs |
allure.accumulateReports | true | Keep previous Allure HTML report files |
allure.cleanResultsDirectory | true | Clean Allure results directory before each run |
allure.customTitle | Test run report | Custom title in the Allure report header |
allure.customLogo | (SHAFT default logo) | Custom logo URL for the Allure report |
allure.singleFile | true | Generate an Allure 3 Awesome report as a self-contained HTML file |
allure.reportLanguage | en | Language code used by the Allure 3 Awesome report UI |
allure.open | false | Pass the browser-open flag to Allure 3 report generation |
allure.groupBy | parentSuite,suite,subSuite | Comma-separated label hierarchy for the Allure 3 report tree |
openExecutionSummaryReportAfterExecution | false | Open the Execution Summary report after the run |
videoParams_recordVideo | false | Enable video recording of test sessions |
videoParams_scope | DriverSession | Scope of video recording |
createAnimatedGif | false | Create an animated GIF from screenshots |
animatedGif_frameDelay | 500 | Delay between GIF frames (milliseconds) |
screenshotParams_whenToTakeAScreenshot | ValidationPointsOnly | When to capture screenshots |