https://github.com/devexperts/switchboard
Toolset designed to collect, parse, filter and group automated tests from code, transform the result and perform the required further actions.
https://github.com/devexperts/switchboard
autotests continuous-integration testcase-generator testrunner
Last synced: about 2 months ago
JSON representation
Toolset designed to collect, parse, filter and group automated tests from code, transform the result and perform the required further actions.
- Host: GitHub
- URL: https://github.com/devexperts/switchboard
- Owner: devexperts
- License: mpl-2.0
- Created: 2021-03-26T14:07:52.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2024-12-02T17:29:20.000Z (over 1 year ago)
- Last Synced: 2024-12-02T18:37:32.917Z (over 1 year ago)
- Topics: autotests, continuous-integration, testcase-generator, testrunner
- Language: Java
- Homepage: https://testfailed.com/switchboard
- Size: 304 KB
- Stars: 13
- Watchers: 8
- Forks: 4
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Switchboard
###### Test Case Processing Toolset
Switchboard is designed to collect, parse, filter and group tests from code,
transform the result and perform the required actions on it.
## Concept
The toolset consists of an `API` module, a `Core` module, a `Runner` and an extendable set of `Integration` modules.
##### Test
An entity representing a single test (e.g. TestNG or JUnit test, a Cucumber scenario, etc.) consisting of an identifier and its `Attributes`.
##### TestRun
An entity representing a group of Tests consisting of an identifier, its `Attributes` and a set of tests.
##### Integration
Each Integration module provides specific features implementation or access to interaction with software,
e.g. `cukes` integration can collect Cucumber test data from .feature files, `jira` integration provides access
to Atlassian Jira REST API functionality etc.
Each integration is autonomous and is run within its own classpath to evade dependency conflicts.
##### IntegrationComponent
An implementation of a single atomic component of an integration.
All components are executed during integration run in the following sequence:
- `TestExtractor` components supplying Tests from an external source, e.g. files, DB, URL etc.
- `TestProcessor` components complementing, decoding, splitting etc. specified tests.
- `TestFilter` components filtering processed Tests.
- `TestSplitter` components splitting tests into TestRuns by specified attributes.
- `TestRunProcessor` components processing (complementing, decoding, splitting etc) tests runs.
- `TestRunConsumer` components consuming the prepared TestRuns (e.g. test runner, report collector etc.).
Each IntegrationComponent is run within the context of an integration it is specified in.
## How to run
A Switchboard is run by Runner module:
```java -jar {path-to-runner-jar} -c {path-to-configuration} -i {path-to-libs}```
with 2 parameters:
- -c - JSON configuration file path
- -i - Paths to integration lib jars and/or directories with libs; glob pattern is supported.
Runner executes all components marked as runnable (`"runnable": true` in JSON config).
## Configuration
Each Integration or Integration set configuration is stored as a JSON, describing the structure,
execution order and execution parameters.
### Example
This configuration will:
- collect Cucumber test cases
- filter tests marked with `MarkerAnnotation1` attribute
- create test batches grouped by 5 tests at most
- log the result into the console
```yaml
{
"@class": "com.devexperts.switchboard.integrations.cukes.CukesIntegration",
"identifier": "CukesIntegration-1",
"runnable": false,
"testExtractors": [
{
"@class": "com.devexperts.switchboard.integrations.cukes.CukesTestExtractor",
"identifier": "CukesTestExtractor-1",
"testLocations": [
"src/test/resources/test_classes"
],
"filePattern": "regex:.*.feature",
"cucumberNativeFilters": "",
"basePath": "src/test/resources"
}
],
"testProcessors": [],
"testFilters": [
{
"@class": "com.devexperts.switchboard.impl.filters.AttributesFilter",
"identifier": "AttributesFilter-1",
"attributePredicate": {
"@class": "com.devexperts.switchboard.entities.attributes.AttributeIsPresent",
"attributeKeyRegex": "MarkerAnnotation1"
}
}
],
"testSplitters": [
{
"@class": "com.devexperts.switchboard.impl.splitters.TestCountSplitter",
"identifier": "TestCountSplitter-1",
"count": 5
}
],
"testRunProcessors": [],
"testRunConsumers": [
{
"@class": "com.devexperts.switchboard.impl.consumers.LoggingTestRunConsumer",
"identifier": "TestLoggingConsumer-1"
}
]
}
```
##### ComponentReference
Any integration components can be used in other Integrations using a `ComponentReference` wrapper.
A special component type `ComponentReference` can be used to wrap a component of an integration
executed during another Integration run. Component wrapped by ComponentReference is run within the context of its source integration.
### Environment variables in the configuration
If a value in configuration should be resolved from the environment during execution the variable should be set as `%variable_name%`.
Here's how you can set Jira password from `JIRA_PASSWORD` environment variable:
```yaml
[
{
"@class": "com.devexperts.switchboard.integrations.javaparser.JavaParserIntegration",
"identifier": "JavaParserIntegration - runnable",
"runnable": true,
...
"uri": "https://jira.somewhere.elsewhere.com",
"login": "somebody",
"password": "%JIRA_PASSWORD%"
}
]
```