Modular Java building blocks for test automation and quality engineering.
- ✅ Pick only the modules your project needs
- ✅ Keep test infrastructure under one
dev.quokkifynamespace - ✅ Connect TestNG, Selenide, REST Assured, databases, messaging, and reporting
- ✅ Publish signed releases to Maven Central
- ✅ Build on Java 21 without adopting a monolithic framework
Choose a module and add it from Maven Central.
Gradle Kotlin DSL
dependencies {
implementation("dev.quokkify:q4j-core:<version>")
testImplementation("dev.quokkify:q4j-testng:<version>")
}Gradle Groovy DSL
dependencies {
implementation "dev.quokkify:q4j-rest-assured:<version>"
}Maven
<dependency>
<groupId>dev.quokkify</groupId>
<artifactId>q4j-selenide</artifactId>
<version>VERSION</version>
</dependency>Replace <version> or VERSION with a published Q4J release.
test code
↓
choose q4j modules
↓
reuse configuration, steps, clients, and verifiers
↓
exercise browser, API, database, queue, or reporting system
↓
produce a clear test result
| Need | Add | Result |
|---|---|---|
| Shared test utilities | q4j-core |
Formatting, generation, models, and reusable APIs |
| TestNG lifecycle | q4j-testng |
Listeners, retries, annotations, and extensions |
| Browser automation | q4j-selenide |
Components, page workflows, and browser services |
| API automation | q4j-rest-assured |
Requests, filters, steps, and response verification |
| Database verification | q4j-sql, q4j-morphia, q4j-redis |
Persistence helpers and reusable assertions |
| Messaging | q4j-kafka, q4j-rabbitmq |
Producers, consumers, steps, and verifiers |
| Test management | q4j-jira-*, q4j-testrail-* |
Ticket and test-case lifecycle integrations |
| Reporting | q4j-reportportal-* |
ReportPortal services and TestNG listeners |
Every public module uses the same Maven group:
dev.quokkify:<artifact>:<version>
| Artifact | Purpose |
|---|---|
q4j-core |
Shared types, formatting, generators, and utility APIs |
q4j-config |
Typed configuration and locale providers |
q4j-testng |
TestNG listeners, retries, annotations, and lifecycle extensions |
q4j-awaitility |
Polling and timeout abstractions |
q4j-reflection |
Classpath scanning and reflection utilities |
q4j-files |
Files, archives, locking, and local resources |
q4j-html |
HTML parsing and generated browser-compatibility models |
q4j-jwt |
JWT models, generators, and formatting |
q4j-crypto |
Encryption, key, and digital-signature utilities |
q4j-ssh |
SSH execution and port forwarding |
| Artifact | Purpose |
|---|---|
q4j-jackson-support |
Shared Jackson dependencies and configuration |
q4j-jackson-json |
JSON mapping and JSON Pointer utilities |
q4j-jackson-yaml |
YAML parsing and resource providers |
q4j-jackson-xml |
XML parsing and conversion |
q4j-jackson-csv |
CSV parsing and conversion |
| Artifact | Purpose |
|---|---|
q4j-sql |
SQL, JPA, persistence, and database verification |
q4j-morphia |
MongoDB and Morphia persistence helpers |
q4j-redis |
Redis operations and verification |
| Artifact | Purpose |
|---|---|
q4j-rest-assured |
REST Assured API testing |
q4j-selenide |
Browser automation with Selenide |
q4j-selenide-proxy |
Proxy and HAR support for Selenide |
q4j-selenide-grid |
Selenium Grid support for Selenide |
q4j-kafka |
Kafka producers, consumers, and assertions |
q4j-rabbitmq |
RabbitMQ integration testing |
q4j-tyrus |
WebSocket testing with Tyrus |
q4j-jira-core |
Jira client and ticket abstractions |
q4j-jira-testng |
Jira integration for TestNG |
q4j-jira-testrail |
Jira ticket sources for TestRail workflows |
q4j-testrail-core |
TestRail API models and services |
q4j-testrail-testng |
TestRail lifecycle integration for TestNG |
q4j-reportportal-core |
ReportPortal configuration and API services |
q4j-reportportal-testng |
ReportPortal listeners for TestNG |
q4j-reportportal-testrail |
TestRail descriptions for ReportPortal |
q4j-nosqlis an internal Gradle parent project and is not published.
🌐 Browser automation
dependencies {
testImplementation("dev.quokkify:q4j-testng:<version>")
testImplementation("dev.quokkify:q4j-selenide:<version>")
}Add q4j-selenide-proxy when a test needs proxy or HAR support, or q4j-selenide-grid for Selenium Grid integration.
🔗 API automation
dependencies {
testImplementation("dev.quokkify:q4j-testng:<version>")
testImplementation("dev.quokkify:q4j-rest-assured:<version>")
testImplementation("dev.quokkify:q4j-jackson-json:<version>")
}Use Q4J request services, filters, steps, and verifiers while keeping project-specific API clients in the consuming test project.
🗄️ Database and messaging checks
dependencies {
testImplementation("dev.quokkify:q4j-sql:<version>")
testImplementation("dev.quokkify:q4j-redis:<version>")
testImplementation("dev.quokkify:q4j-kafka:<version>")
}Choose only the systems exercised by the test suite. Each integration is published independently.
📊 Reporting and test management
dependencies {
testImplementation("dev.quokkify:q4j-reportportal-testng:<version>")
testImplementation("dev.quokkify:q4j-testrail-testng:<version>")
testImplementation("dev.quokkify:q4j-jira-testng:<version>")
}The integration modules connect test lifecycle events to ReportPortal, TestRail, and Jira without forcing those systems into the Q4J core.
- Modular first — no umbrella dependency that silently imports every integration.
- Stable coordinates — public artifacts follow
dev.quokkify:q4j-*. - One source namespace — Java APIs live under
dev.quokkify.*. - Integration at the edges — vendor-specific clients stay outside the core modules.
- Testable releases — compilation, Checkstyle, SpotBugs, integration matrices, and publication metadata are validated in CI.
Stable releases are signed and published through the Central Publisher Portal.
GitHub release
↓
validate tag and version
↓
build POM + JAR + sources + Javadoc
↓
sign all publications
↓
publish and release on Maven Central
See Maven Central publishing for namespace verification, required secrets, and the release workflow.
Compile and run static checks:
./gradlew check assemble --no-daemon --console=plainGenerate and inspect Maven publication metadata without publishing:
./gradlew generatePomFileForMavenPublication --no-daemon --console=plainIntegration tests may require their corresponding external service or Docker Compose profile.
Issues and pull requests are welcome. Keep changes focused on one module or shared concern and include the relevant Gradle verification output.
Q4J is available under the MIT License.