Custom Modules
Custom modules are extensible and flexible mechanism for development and represent project-specific logic (steps, transformers, expressions, etc.). The custom modules may depend on extensions and/or plugins, may not have dependencies at all, also they may override default behaviour of plugins and extensions if needed, but note that overriding of behaviour of other custom modules can yield undetermenistic behaviours.
The custom module configuration should be placed at the following path relatively to the project root:
/src/main/resources/spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd"
default-lazy-init="true">
<!-- custom module bean definitions -->
</beans>
Table Transformers
In order to create and register own table transformer the following steps should be done.
-
Create a new class that implements
org.jbehave.core.model.TableTransformers.TableTransformer
:Example 2. /src/main/java/com/mycompany/transformer/MyTableTransformer.javapackage com.mycompany.transformer; import org.jbehave.core.model.TableTransformers.TableTransformer; public class MyTableTransformer implements TableTransformer { @Override public String transform(String tableAsString, TableParsers tableParsers, TableProperties properties) { String transformedTable = ...; // Table transformation logic // ... return transformedTable; } }
-
Register Spring bean where
id
is the name of the transformer which will be used to refer it in tests:Example 3. /src/main/resources/spring.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="MY_TRANSFORMER" class="com.mycompany.transformer.MyTableTransformer"/> </beans>
-
Use new transformer in tests:
Example 4. /src/main/resources/story/MyStory.storyScenario: Use the custom tramsfomer to modify ExamplesTable Given ... When ... Then ... Examples: {transformer=MY_TRANSFORMER} |header | |value 1| |value 2|
It’s recommended to stick to the following naming conventions:
|
Dynamic variables
In order to create and register own dynamic variable the following steps should be done.
-
Create a new class that implements
org.vividus.variable.DynamicVariable
:Example 5. /src/main/java/com/mycompany/variable/MyDynamicVariable.javapackage com.mycompany.variable; import org.vividus.variable.DynamicVariable; import org.vividus.variable.DynamicVariableCalculationResult; public class MyDynamicVariable implements DynamicVariable { @Override public DynamicVariableCalculationResult calculateValue() { try { String value = ...; // Variable value calcualtion return DynamicVariableCalculationResult.withValue(value); } catch (MyException e) { return DynamicVariableCalculationResult.withError(e.getMessage()); } } }
-
Register Spring bean where
id
is the name of the dynamic variable which will be used to refer it in tests:Example 6. /src/main/resources/spring.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="my-dynamic-varibale" class="com.mycompany.variable.MyDynamicVariable"/> </beans>
-
Use new variable in tests:
Example 7. /src/main/resources/story/MyStory.storyScenario: Validate with help of the custom dynamic variable Then `${my-dynamic-varibale}` is equal to `my app specific value`
Keep in mind the alias for the dynamic variable with name in lower camel case will be available out of the box:
Example 8. /src/main/resources/story/MyStory.storyScenario: Validate with help of the custom dynamic variable Then `${myDynamicVaribale}` is equal to `my app specific value`
Baseline storages
Baseline storage is a source of the baseline images used to perform visual checks in visual testing plugin
In order to create and register own baselines storages the following steps should be done
-
Create a new class that implements
org.vividus.visual.engine.BaselineStorage
:Example 9. /src/main/java/com/mycompany/visual/engine/AzureBaselineStorage.javapackage com.mycompany.visual.engine; import org.vividus.visual.engine.BaselineStorage; public class AzureBaselineStorage implements BaselineStorage { @Override public Optional<Screenshot> getBaseline(String baselineName) throws IOException { // gets the baseline screenshot } @Override public void saveBaseline(Screenshot toSave, String baselineName) throws IOException { // saves the baseline screenshot } }
-
Register Spring bean where
id
is the name of the baseline storage which will be used in visual testing plugin:Example 10. /src/main/resources/spring.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="azure" class="com.mycompany.visual.engine.AzureBaselineStorage"/> </beans>