Multi-approach and flexible Java framework for test steps managing.
- What is Stebz
- How to use
- Documentation
- Modules
- Step objects
- Quick steps
- Attributes
- Annotations
- Annotation attributes
- Arrange-Act-Assert style
- Gherkin style
- TDD / BDD
- Listeners
- Extensions
- Configuration
stebz-coremodulestebz-aaa-keywordsmodulestebz-aaa-annotationsmodulestebz-gherkin-keywordsmodulestebz-gherkin-annotationsmodulestebz-clean-stack-tracemodulestebz-hidden-stepsmodulestebz-readable-reflective-namemodulestebz-repeat-and-retrymodulestebz-alluremodulestebz-qasemodulestebz-reportportalmodulestebz-testitmodulestebz-system-outmodule
- Contributing
- License
The main feature of Stebz is flexible test steps:
@Test
void separateMethods() {
step(user_is_authorized_as("user1", "123456")
.withName("user authorized as simple user"));
step(user_sees_balance(10000)
.withComment("user1 balance is always 10000"));
step(user_sees_logout_button());
}
@Test
void aroundContext() {
around(
step(I_send_get_user_request(123))
.withBefore(() -> AuthUtils.checkAuth())).
step(response_status_code_should_be(200)).
step(response_json_path_value_should_be("user.balance", 10000)
.withName("response user balance should be {value}")
.withOnFailure(response -> Logger.warn("Incorrect body: " + response.body())));
}And in the Gherkin style:
@Test
void separateMethods() {
When(user_is_authorized_as("user1", "123456")
.withName("user authorized as simple user"));
Then(user_sees_balance(10000)
.withComment("user1 balance is always 10000"));
And(user_sees_logout_button());
}
@Test
void aroundContext() {
around(
When(I_send_get_user_request(123)
.withBefore(() -> AuthUtils.checkAuth()))).
Then(response_status_code_should_be(200)).
And(response_json_path_value_should_be("user.balance", 10000)
.withName("response user balance should be {value}")
.withOnFailure(response -> Logger.warn("Incorrect body: " + response.body())));
}And in the Arrange-Act-Assert style:
@Test
void separateMethods() {
Act(user_is_authorized_as("user1", "123456")
.withName("user authorized as simple user"));
Assert(user_sees_balance(10000)
.withComment("user1 balance is always 10000"));
Assert(user_sees_logout_button());
}
@Test
void aroundContext() {
around(
Act(I_send_get_user_request(123)
.withBefore(() -> AuthUtils.checkAuth()))).
Assert(response_status_code_should_be(200)).
Assert(response_json_path_value_should_be("user.balance", 10000)
.withName("response user balance should be {value}")
.withOnFailure(response -> Logger.warn("Incorrect body: " + response.body())));
}Steps in the methods way might look like:
public static RunnableStep user_is_authorized_as(String username,
String password) { return stepOf(
"user is authorized as {username}", params("username", username, "password", password), () -> {
// step body
}
); }Or like this using annotations:
@WithName("user is authorized as {username}")
@WithParams
public static RunnableStep user_is_authorized_as(String username,
String password) { return stepOf(() -> {
// step body
}); }And also allows you to follow the TDD / BDD right in your code:
import static org.stebz.step.executable.RunnableStep.notImplemented;
class ExampleTest {
@Test
@Disabled // not implemented
void manuallyDisabledTest() {
Given("Step 1", "Expected result 1");
When("Step 2", "Expected result 2");
Then("Step 3", "Expected result 3");
}
@Test
void throwingErrorTest() {
Given(notImplemented()
.withName("Step 1")
.withExpectedResult("Expected result 1"));
When(notImplemented()
.withName("Step 2")
.withExpectedResult("Expected result 2"));
Then(notImplemented()
.withName("Step 3")
.withExpectedResult("Expected result 3"));
}
}See examples.
See details in Documentation.
Requires Java 8+ version.
In most cases it is enough to add one of the bundle dependencies:
stebzstebz-aaa(stebzwith keywords in Arrange-Act-Assert style)stebz-gherkin(stebzwith keywords in Gherkin style)
And one of integration dependencies (don't forget to add and configure the dependency of the reporting system):
stebz-allure(usesio.qameta.allure:allure-java-commons)stebz-qase(usesio.qase:qase-java-commons)stebz-reportportal(usescom.epam.reportportal:client-java)stebz-testit(usesru.testit:testit-java-commons)
Maven:
<dependencies>
<dependency>
<groupId>org.stebz</groupId>
<artifactId>{module name}</artifactId>
<version>1.11</version>
</dependency>
</dependencies>Gradle (Groovy):
dependencies {
implementation 'org.stebz:{module name}:1.11'
}Gradle (Kotlin):
dependencies {
implementation("org.stebz:{module name}:1.11")
}Or you can choose only modules those you need.
See examples.
Also, you can use BOM (Bill of Materials) to ensure correct versions of all the dependencies are used.
Maven:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.stebz</groupId>
<artifactId>stebz-bom</artifactId>
<version>1.11</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>Gradle (Groovy):
dependencies {
implementation platform('org.stebz:stebz-bom:1.11')
}Gradle (Kotlin):
dependencies {
implementation(platform("org.stebz:stebz-bom:1.11"))
}If your project already uses Allure / Qase / ReportPortal / Test IT with @Step annotations, then you don't need any
additional configuration.
Otherwise, you need to manually enable aspects using the AspectJ library.
Maven:
<properties>
<aspectj.version>1.9.24</aspectj.version>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>Gradle (Groovy):
def aspectJVersion = '1.9.24'
configurations {
agent {
canBeResolved = true
canBeConsumed = true
}
}
dependencies {
agent "org.aspectj:aspectjweaver:$aspectJVersion"
}
test {
jvmArgs = [ "-javaagent:${configurations.agent.singleFile}" ]
}Gradle (Kotlin):
val aspectJVersion = "1.9.24"
val agent: Configuration by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = true
}
dependencies {
agent("org.aspectj:aspectjweaver:${aspectJVersion}")
}
tasks.test {
jvmArgs = listOf(
"-javaagent:${agent.singleFile}"
)
}| module | include / depends on | description |
|---|---|---|
stebz-utils |
Common utils | |
stebz-core |
stebz-utils |
Core |
stebz-methods |
stebz-utilsstebz-core |
Methods for executing step objects and quick steps |
stebz-annotations |
stebz-utilsstebz-core |
Annotations and aspects |
| module | include / depends on | description |
|---|---|---|
stebz-aaa-keywords |
stebz-utilsstebz-core |
Arrange-Act-Assert style keywords |
stebz-aaa-methods |
stebz-utilsstebz-corestebz-aaa-keywords |
Methods for executing step objects and quick steps in Arrange-Act-Assert style |
stebz-aaa-annotations |
stebz-utilsstebz-corestebz-annotationsstebz-aaa-keywords |
Annotations in Arrange-Act-Assert style |
stebz-gherkin-keywords |
stebz-utilsstebz-core |
Gherkin style keywords |
stebz-gherkin-methods |
stebz-utilsstebz-corestebz-gherkin-keywords |
Methods for executing step objects and quick steps in Gherkin style |
stebz-gherkin-annotations |
stebz-utilsstebz-corestebz-annotationsstebz-gherkin-keywords |
Annotations in Gherkin style |
stebz-clean-stack-trace |
stebz-utilsstebz-core |
Extension that cleans step exception stack trace from garbage lines |
stebz-hidden-steps |
stebz-utilsstebz-core |
Extension that allows to hide several steps |
stebz-readable-reflective-name |
stebz-utilsstebz-corestebz-annotations |
Extension that converts a reflective step name into a readable form |
stebz-repeat-and-retry |
stebz-utilsstebz-corestebz-annotations (optional) |
Extension that allows to repeat and retry step bodies |
| module | include / depends on | description |
|---|---|---|
stebz |
stebz-utilsstebz-corestebz-methodsstebz-annotationsstebz-clean-stack-tracestebz-hidden-stepsstebz-readable-reflective-namestebz-repeat-and-retry |
Bundle of Stebz modules |
stebz-aaa |
stebz-utilsstebz-corestebz-methodsstebz-annotationsstebz-aaa-keywordsstebz-aaa-methodsstebz-aaa-annotationsstebz-clean-stack-tracestebz-hidden-stepsstebz-readable-reflective-namestebz-repeat-and-retry |
Bundle of Stebz modules in Arrange-Act-Assert style |
stebz-gherkin |
stebz-utilsstebz-corestebz-methodsstebz-annotationsstebz-gherkin-keywordsstebz-gherkin-methodsstebz-gherkin-annotationsstebz-clean-stack-tracestebz-hidden-stepsstebz-readable-reflective-namestebz-repeat-and-retry |
Bundle of Stebz modules in Gherkin style |
| module | include / depends on | description |
|---|---|---|
stebz-allure |
stebz-utilsstebz-corestebz-annotations (optional) |
Allure report integration |
stebz-qase |
stebz-utilsstebz-corestebz-annotations (optional) |
Qase report integration |
stebz-reportportal |
stebz-utilsstebz-corestebz-annotations (optional) |
ReportPortal report integration |
stebz-testit |
stebz-utilsstebz-corestebz-annotations (optional) |
Test IT report integration |
stebz-system-out |
stebz-utilsstebz-core |
System.out report integration (mainly for debugging) |
Steps are immutable objects containing attributes and a body. There are 4 types of steps according to their body type:
RunnableStep, SupplierStep, ConsumerStep, FunctionStep.
RunnableStep runnableStep = RunnableStep.of("runnable step", () -> {
// step body
});
SupplierStep<String> supplierStep = SupplierStep.of("supplier step", () -> {
// step body
return "result";
});
ConsumerStep<Integer> consumerStep = ConsumerStep.of("consumer step", integer -> {
// step body
});
FunctionStep<Integer, String> functionStep = FunctionStep.of("function step", integer -> {
// step body
return "result";
});A new step can be created based on an existing one with modified attributes or body.
RunnableStep newStep = step
.withName("new name")
.withBody(() -> {
// new body
});Or more convenient methods can be used.
RunnableStep newStep = step
.withName(name -> "name prefix " + name)
.withBodyOf(originBody -> () -> {
// new body
originBody.run();
});Steps can be called using the static step method.
step(runnableStep);
String supplierStepResult = step(supplierStep);
step(consumerStep, 123);
String functionStepResult = step(functionStep, 123);Or using the Around object.
String result = around(123)
.step(runnableStep)
.step(supplierStep.noResult())
.step(consumerStep)
.step(functionStep);It is convenient to add attributes right before calling a step.
step(runnableStep
.withName("new name")
.withExpectedResult("expected result")
.withComment("comment")
.withBefore(() -> Logger.info("..."))
.withOnSuccess(() -> Logger.info("..."))
.withOnFailure(() -> Logger.warn("...")));If there is no need to save the object, but you need to quickly call a step, then this can be done using the
static step method.
step("quick runnable step", "expected result", () -> {
// step body
});
String result = step("quick supplier step", params("param1", "value1"), () -> {
// step body
return "result";
});There are several default attributes.
| attribute name | attribute type |
|---|---|
| keyword | Keyword |
| name | String |
| params | Map<String, Object> |
| expected result | String |
| comment | String |
| hidden | Boolean |
It is possible to create custom attributes.
StepAttribute<String> customAttribute = StepAttribute.nonNull("custom_attribute", "");
RunnableStep stepWithCustomAttribute = step.with(customAttribute, "attribute value");
String attributeValue = stepWithCustomAttribute.get(customAttribute);If the annotation is on a field subtype of StepObj or a method returning a subtype of StepObj or on the constructor
of an object implementing StepObj, then the annotation value will be added to the step. Otherwise, if there is an
annotation on a method or constructor, the call itself will be considered a quick step.
Step objects with added attributes:
@WithName("step name")
@WithComment("step comment")
@WithParam(name = "custom param", value = "custom param value")
public static final RunnableStep fieldStep = stepOf(() -> {
// step body
});
@WithName("step name")
@WithComment("step comment")
@WithParams
@WithParam(name = "custom param", value = "custom param value")
public static RunnableStep methodStep(String parameter) { return stepOf(() -> {
// step body
}); }
public class StepImpl extends RunnableStep.Of {
@WithName("step name")
@WithComment("step comment")
@WithParams
@WithParam(name = "custom param", value = "custom param value")
public StepImpl(String parameter) { super(() -> {
// step body
}); }
}Quick steps:
@WithName("step name")
@WithComment("step comment")
@WithParams
@WithParam(name = "custom param", value = "custom param value")
public static void method(String parameter) {
// step body
}
public class MyObject {
@WithName("step name")
@WithComment("step comment")
@WithParams
@WithParam(name = "custom param", value = "custom param value")
public MyObject(String parameter) {
// step body
}
}Quick steps can also be retrieved as objects using the captured method.
Via the method reference:
RunnableStep runnableStep = captured(MyClass::method, "arg");
SupplierStep<MyObject> supplierStep = captured(MyObject::new, "arg");Or via lambda expression:
RunnableStep runnableStep = captured(() -> MyClass.method("arg"));
SupplierStep<MyObject> supplierStep = captured(() -> new MyObject("arg"));The captured method can be combined with the step method in your tests:
step(captured(MyClass::method, "arg")
.withName("Custom name")
.withComment("Custom comment"));There are several default annotations.
| annotation | description |
|---|---|
@WithKeyword |
added keyword attribute |
@WithName |
added name attribute |
@WithParams |
added params attribute, all method / constructor params |
@WithParam |
added params attribute, custom param |
@WithParam.List |
added params attribute, custom param list |
@WithExpectedResult |
added expected result attribute |
@WithComment |
added comment attribute |
@WithHidden |
added hidden attribute |
@Step |
alias for @WithName and @WithParams combination |
@Param |
modifies the name or value of a method / constructor parameter |
It is possible to create custom attribute annotations.
@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@StepAttributeAnnotation("custom_attribute")
public @interface CustomAttribute {
String value();
}Later this attribute can be extracted:
StepAttribute<CustomAttribute> attribute = StepAttribute.nullable("custom_attribute");
CustomAttribute value = step.get(attribute);To use Stebz in Arrange-Act-Assert style you need to use stebz-aaa dependency.
Methods way:
Arrange(runnableStep);
Act(consumerStep, 123);
Assert("quick step", () -> {
// step body
});
Assert("quick step", () -> {
// step body
});Annotations way:
@Arrange("step name")
@WithExpectedResult("step expected result")
@WithComment("step comment")
public static RunnableStep methodStep(String parameter) { return RunnableStep.of(() -> {
// step body
}); }
@Act("step name")
@WithParams
public static void quickStep(String parameter) {
// step body
}To use Stebz in Gherkin style you need to use stebz-gherkin dependency.
Methods way:
Given(runnableStep);
When(consumerStep, 123);
Then("quick step", () -> {
// step body
});
And("quick step", () -> {
// step body
});Annotations way:
@Given("step name")
@WithExpectedResult("step expected result")
@WithComment("step comment")
public static RunnableStep methodStep(String parameter) { return RunnableStep.of(() -> {
// step body
}); }
@When("step name")
@WithParams
public static void quickStep(String parameter) {
// step body
}You can write tests before implementing their steps.
@Test
@Disabled
void simpleSteps() {
step("user authorized as user1");
step("user sees balance 10000");
step("user sees logout button");
}
@Test
@Disabled
void aaaSteps() {
Act("user authorized as user1");
Assert("user sees balance 10000");
Assert("user sees logout button");
}
@Test
@Disabled
void gherkinSteps() {
When("user authorized as user1");
Then("user sees balance 10000");
And("user sees logout button");
}You can specify additional attributes, such as parameters and expected result.
step("user authorized as simple user",
params("username", "user1", "password", "12345"),
"the authorization form is hidden, the user sees the header");For greater reliability, you can write tests in a different style. If the step is started, a StepNotImplementedError
will be thrown.
import static org.stebz.step.executable.RunnableStep.notImplemented;
class ExampleTest {
@Test
void test() {
Given(notImplemented()
.withName("Step 1")
.withExpectedResult("Expected result 1"));
When(notImplemented()
.withName("Step 2")
.withExpectedResult("Expected result 2"));
Then(notImplemented()
.withName("Step 3")
.withExpectedResult("Expected result 3"));
}
}Later these steps can be implemented and can be used in other tests.
Processing of steps occurs in listeners.
Examples of listener modules: stebz-allure, stebz-qase, stebz-reportportal, stebz-testit, stebz-system-out.
StepListener interface:
public interface StepListener {
void onStepStart(StepObj<?> step,
NullableOptional<Object> context);
void onStepSuccess(StepObj<?> step,
NullableOptional<Object> context,
NullableOptional<Object> result);
void onStepFailure(StepObj<?> step,
NullableOptional<Object> context,
Throwable exception);
}To create a custom listener you need to implement the org.stebz.listener.StepListener interface
and specify it via SPI mechanism or via properties.
Specify and configure main Allure dependency io.qameta.allure:allure-java-commons.
Then specify Stebz dependencies:
org.stebz:stebz/org.stebz:stebz-aaa/org.stebz:stebz-gherkinorg.stebz:stebz-allure
Specify and configure main Qase dependency io.qase:qase-java-commons.
Then specify Stebz dependencies:
org.stebz:stebz/org.stebz:stebz-aaa/org.stebz:stebz-gherkinorg.stebz:stebz-qase
Specify and configure main ReportPortal dependency com.epam.reportportal:client-java.
Then specify Stebz dependencies:
org.stebz:stebz/org.stebz:stebz-aaa/org.stebz:stebz-gherkinorg.stebz:stebz-reportportal
Specify and configure main Test IT dependency ru.testit:testit-java-commons.
Then specify Stebz dependencies:
org.stebz:stebz/org.stebz:stebz-aaa/org.stebz:stebz-gherkinorg.stebz:stebz-testit
Extensions allow you to add additional behavior to steps. For example, replace the step name or body.
Examples of extension modules: stebz-repeat-and-retry, stebz-readable-reflective-name.
List on extension interfaces:
| interface | description |
|---|---|
StebzExtension |
Base extension interface |
InterceptStepContext |
Intercepts and replaces step context |
InterceptStep |
Intercepts and replaces step |
BeforeStepStart |
Calling before step start (before StepListener.onStepStart method) |
AfterStepStart |
Calling after step start (after StepListener.onStepStart method) |
InterceptStepResult |
Intercepts and replaces step result |
BeforeStepSuccess |
Calling before step success (before StepListener.onStepSuccess method) |
AfterStepSuccess |
Calling after step success (after StepListener.onStepSuccess method) |
InterceptStepException |
Intercepts and replaces step exception |
BeforeStepFailure |
Calling before step failure (before StepListener.onStepFailure method) |
AfterStepFailure |
Calling after step failure (after StepListener.onStepFailure method) |
For example, the InterceptStepException interface.
public interface InterceptStepException extends StebzExtension {
Throwable interceptStepException(StepObj<?> step,
NullableOptional<Object> context,
Throwable exception);
}And BeforeStepFailure interface.
public interface BeforeStepFailure extends StebzExtension {
void beforeStepFailure(StepObj<?> step,
NullableOptional<Object> context,
Throwable exception);
}To create a custom extension you need to implement one or more org.stebz.extension.StebzExtension interfaces
and specify it via SPI mechanism or via properties.
Removes references to Stebz and AspectJ from step exception stack trace.
class ExampleTest {
@Test
void test() {
step("Step 1", () -> {
step("Step 2", () -> {
step("Step 3", () -> {
throw new AssertionError();
});
});
});
}
}Error stack trace without extension:
java.lang.AssertionError
at my.project.ExampleTest.lambda$test$0(ExampleTest.java:14)
at org.stebz.executor.StepExecutor$Of.lambda$execute$11(StepExecutor.java:179)
at org.stebz.executor.StepExecutor$Of.exec(StepExecutor.java:236)
at org.stebz.executor.StepExecutor$Of.execute(StepExecutor.java:178)
at org.stebz.StebzMethods.step(StebzMethods.java:456)
at my.project.ExampleTest.lambda$test$1(ExampleTest.java:13)
at org.stebz.executor.StepExecutor$Of.lambda$execute$10(StepExecutor.java:169)
at org.stebz.executor.StepExecutor$Of.exec(StepExecutor.java:236)
at org.stebz.executor.StepExecutor$Of.execute(StepExecutor.java:168)
at org.stebz.StebzMethods.step(StebzMethods.java:313)
at my.project.ExampleTest.lambda$test$2(ExampleTest.java:12)
at org.stebz.executor.StepExecutor$Of.lambda$execute$10(StepExecutor.java:169)
at org.stebz.executor.StepExecutor$Of.exec(StepExecutor.java:236)
at org.stebz.executor.StepExecutor$Of.execute(StepExecutor.java:168)
at org.stebz.StebzMethods.step(StebzMethods.java:313)
at my.project.ExampleTest.test(ExampleTest.java:11)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Error stack trace with extension:
java.lang.AssertionError
at my.project.ExampleTest.lambda$test$0(ExampleTest.java:14)
at my.project.ExampleTest.lambda$test$1(ExampleTest.java:13)
at my.project.ExampleTest.lambda$test$2(ExampleTest.java:12)
at my.project.ExampleTest.test(ExampleTest.java:11)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
stebz-hidden-steps extension
Extension that allows to hide several steps.
hiddenSteps(() -> {
step("Step 1");
step("Step 2");
step("Step 3");
});There is also an alias method hiddenArea.
Replaces underscores in a step name with spaces.
@Step
public static RunnableStep user_is_authorized(String username,
String password) { return RunnableStep.of(() -> {
// step body
}); }The name of this step will be "user is authorized".
It is also possible to specify the separator symbols manually.
@Step
@NameWordSeparator("__")
public static RunnableStep user__is__authorized(String username,
String password) { return RunnableStep.of(() -> {
// step body
}); }Allows to modify the body of a step by adding simple or only on error repetitions.
Via annotations:
@Step
@WithRetry(count = 3, on = TimeoutException.class)
public static RunnableStep send_unstable_request() { return RunnableStep.of(() -> {
// step body
}); }
@Step
@WithRepeat(count = 3)
public static RunnableStep send_request_multiple_times() { return RunnableStep.of(() -> {
// step body
}); }Via step attributes:
step(send_request()
.with(retry, retry().count(3).on(TimeoutException.class)));
step(send_request()
.with(repeat, repeat().count(3)));System properties have first priority, file properties have second priority.
| property | type | default value | description |
|---|---|---|---|
stebz.properties.path |
String |
stebz.properties |
path to properties file |
stebz.extensions.enabled |
Boolean |
true |
enable extensions |
stebz.extensions.list |
String list, delimiter is , |
empty list | extensions list |
stebz.extensions.autodetection |
Boolean |
true |
enable SPI extensions |
stebz.listeners.enabled |
Boolean |
true |
enable listeners |
stebz.listeners.list |
String list, delimiter is , |
empty list | listeners list |
stebz.listeners.autodetection |
Boolean |
true |
enable SPI listeners |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.aaa.keywords.setup |
String |
Setup: |
value of Setup keyword |
stebz.extensions.aaa.keywords.teardown |
String |
Teardown: |
value of Teardown keyword |
stebz.extensions.aaa.keywords.arrange |
String |
Arrange: |
value of Arrange keyword |
stebz.extensions.aaa.keywords.act |
String |
Act: |
value of Act keyword |
stebz.extensions.aaa.keywords.assert |
String |
Assert: |
value of Assert keyword |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.aaa.annotations.enabled |
Boolean |
true |
enable extension |
stebz.extensions.aaa.annotations.order |
String |
5000 |
extension order |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.gherkin.keywords.background |
String |
Background: |
value of Background keyword |
stebz.extensions.gherkin.keywords.conclusion |
String |
Conclusion: |
value of Conclusion keyword |
stebz.extensions.gherkin.keywords.rule |
String |
Rule: |
value of Rule keyword |
stebz.extensions.gherkin.keywords.given |
String |
Given |
value of Given keyword |
stebz.extensions.gherkin.keywords.when |
String |
When |
value of When keyword |
stebz.extensions.gherkin.keywords.then |
String |
Then |
value of Then keyword |
stebz.extensions.gherkin.keywords.and |
String |
And |
value of And keyword |
stebz.extensions.gherkin.keywords.but |
String |
But |
value of But keyword |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.gherkin.annotations.enabled |
Boolean |
true |
enable extension |
stebz.extensions.gherkin.annotations.order |
String |
5000 |
extension order |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.cleanStackTrace.enabled |
Boolean |
true |
enable extension |
stebz.extensions.cleanStackTrace.order |
Integer |
10000 |
extension order |
stebz.extensions.cleanStackTrace.stebzLines |
Boolean |
true if stebz-annotations module is present |
removes Stebz stack trace lines |
stebz.extensions.cleanStackTrace.aspectjLines |
Boolean |
true if stebz-annotations module is present |
removes AspectJ stack trace lines |
stebz-hidden-steps module
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.hiddenSteps.enabled |
Boolean |
true |
enable extension |
stebz.extensions.hiddenSteps.order |
Integer |
10000 |
extension order |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.readableReflectiveName.enabled |
Boolean |
true |
enable extension |
stebz.extensions.readableReflectiveName.order |
Integer |
10000 |
extension order |
stebz.extensions.readableReflectiveName.wordSeparator |
String |
_ |
default word separator |
| property | type | default value | description |
|---|---|---|---|
stebz.extensions.repeat.enabled |
Boolean |
true |
enable extension |
stebz.extensions.repeat.order |
Integer |
10000 |
extension order |
stebz.extensions.retry.enabled |
Boolean |
true |
enable extension |
stebz.extensions.retry.order |
Integer |
10000 |
extension order |
| property | type | default value | description |
|---|---|---|---|
stebz.listeners.allure.enabled |
Boolean |
true |
enable listener |
stebz.listeners.allure.order |
Integer |
10000 |
listener order |
stebz.listeners.allure.onlyKeywordSteps |
Boolean |
false |
hide steps without keywords |
stebz.listeners.allure.keywordPosition |
AT_START / AT_END |
AT_START |
position of step keyword relative to name |
stebz.listeners.allure.keywordToUppercase |
Boolean |
false |
converts keyword value to upper case |
stebz.listeners.allure.processName |
Boolean |
true |
process step name with parameters |
stebz.listeners.allure.contextParam |
Boolean |
true |
step context as parameter |
stebz.listeners.allure.contextParamName |
String |
Context |
step context parameter name |
stebz.listeners.allure.expectedResultParam |
Boolean |
true |
step expected result as parameter |
stebz.listeners.allure.expectedResultParamName |
String |
Expected result |
step expected result parameter name |
stebz.listeners.allure.commentParam |
Boolean |
true |
step comment as parameter |
stebz.listeners.allure.commentParamName |
String |
Comment |
step comment parameter name |
| property | type | default value | description |
|---|---|---|---|
stebz.listeners.qase.enabled |
Boolean |
true |
enable listener |
stebz.listeners.qase.order |
Integer |
10000 |
listener order |
stebz.listeners.qase.onlyKeywordSteps |
Boolean |
false |
hide steps without keywords |
stebz.listeners.qase.keywordPosition |
AT_START / AT_END |
AT_START |
position of step keyword relative to name |
stebz.listeners.qase.keywordToUppercase |
Boolean |
false |
converts keyword value to upper case |
stebz.listeners.qase.processName |
Boolean |
true |
process step name with parameters |
stebz.listeners.qase.contextParam |
Boolean |
true |
step context as parameter |
stebz.listeners.qase.contextParamName |
String |
Context |
step context parameter name |
stebz.listeners.qase.commentAttachment |
Boolean |
true |
step comment as attachment |
stebz.listeners.qase.commentAttachmentName |
String |
Comment |
step comment attachment name |
| property | type | default value | description |
|---|---|---|---|
stebz.listeners.reportportal.enabled |
Boolean |
true |
enable listener |
stebz.listeners.reportportal.order |
Integer |
10000 |
listener order |
stebz.listeners.reportportal.onlyKeywordSteps |
Boolean |
false |
hide steps without keywords |
stebz.listeners.reportportal.keywordPosition |
AT_START / AT_END |
AT_START |
position of step keyword relative to name |
stebz.listeners.reportportal.keywordToUppercase |
Boolean |
false |
converts keyword value to upper case |
stebz.listeners.reportportal.processName |
Boolean |
true |
process step name with parameters |
stebz.listeners.reportportal.contextParam |
Boolean |
true |
step context as parameter |
stebz.listeners.reportportal.contextParamName |
String |
Context |
context parameter name |
stebz.listeners.reportportal.contextDesc |
Boolean |
false |
step context as description part |
stebz.listeners.reportportal.contextDescName |
String |
Context |
step context description part name |
stebz.listeners.reportportal.expectedResultDesc |
Boolean |
true |
step expected result as description part |
stebz.listeners.reportportal.expectedResultDescName |
String |
Expected result |
step expected result description part name |
stebz.listeners.reportportal.commentDesc |
Boolean |
true |
step comment as description part |
stebz.listeners.reportportal.commentDescName |
String |
Comment |
step comment description part name |
| property | type | default value | description |
|---|---|---|---|
stebz.listeners.testit.enabled |
Boolean |
true |
enable listener |
stebz.listeners.testit.order |
Integer |
10000 |
listener order |
stebz.listeners.testit.onlyKeywordSteps |
Boolean |
false |
hide steps without keywords |
stebz.listeners.testit.keywordPosition |
AT_START / AT_END |
AT_START |
position of step keyword relative to name |
stebz.listeners.testit.keywordToUppercase |
Boolean |
false |
converts keyword value to upper case |
stebz.listeners.testit.processName |
Boolean |
true |
process step name with parameters |
stebz.listeners.testit.contextParam |
Boolean |
true |
step context as parameter |
stebz.listeners.testit.contextParamName |
String |
Context |
context parameter name |
stebz.listeners.testit.contextDesc |
Boolean |
false |
step context as description part |
stebz.listeners.testit.contextDescName |
String |
Context |
step context description part name |
stebz.listeners.testit.expectedResultDesc |
Boolean |
true |
step expected result as description part |
stebz.listeners.testit.expectedResultDescName |
String |
Expected result |
step expected result description part name |
stebz.listeners.testit.commentDesc |
Boolean |
true |
step comment as description part |
stebz.listeners.testit.commentDescName |
String |
Comment |
step comment description part name |
| property | type | default value | description |
|---|---|---|---|
stebz.listeners.systemout.enabled |
Boolean |
true |
enable listener |
stebz.listeners.systemout.order |
Integer |
10000 |
listener order |
stebz.listeners.systemout.indent |
Integer |
2 |
number of spaces in indentation |
stebz.listeners.systemout.onlyKeywordSteps |
Boolean |
false |
hide steps without keywords |
stebz.listeners.systemout.keywordPosition |
AT_START / AT_END |
AT_START |
position of step keyword relative to name |
stebz.listeners.systemout.params |
Boolean |
true |
show step params |
stebz.listeners.systemout.comment |
Boolean |
true |
show step comment |
See CONTRIBUTING.md for specific guidelines.
- @evpl as Evgenii Plugatar
Stebz is open-source project, and distributed under the MIT license.