Cucumber for the JVM

Overview

Cucumber JVM

OpenCollective OpenCollective

Maven Central Build Status Coverage Status

Cucumber-JVM is a pure Java implementation of Cucumber. You can run it with the tool of your choice.

Cucumber-JVM also integrates with all the popular Dependency Injection containers.

Getting started

Questions, Problems, Help needed?

Please ask on

Bugs and Feature requests

You can register bugs and feature requests in the Github Issue Tracker.

Please bear in mind that this project is almost entirely developed by volunteers. If you do not provide the implementation yourself (or pay someone to do it for you), the bug might never get fixed. If it is a serious bug, other people than you might care enough to provide a fix.

Contributing

If you'd like to contribute to the documentation, checkout cucumber/docs.cucumber.io otherwise see our CONTRIBUTING.md.

Comments
  • Add @BeforeAll and @AfterAll hooks

    Add @BeforeAll and @AfterAll hooks

    People keep asking for BeforeAll and AfterAll hooks. I haven't had a big need for them myself, but it seems to me this would be sufficient:

    public class GlobalHooks {
        private static boolean dunit = false;
    
        @Before
        public void beforeAll() {
            if(!dunit) {
                Runtime.getRuntime().addShutdownHook(afterAllThread);
                // do the beforeAll stuff...
                dunit = true;
            }
        }
    }
    

    If this doesn't cut it for you, please explain in this ticket, and maybe we'll add special support for it.

    :safety_pin: pinned :dollar: bounty $1000 :cucumber: core team 
    opened by aslakhellesoy 128
  • [Core] Parallel cukes

    [Core] Parallel cukes

    Notice

    This PR replaces Parallel support #1357 and relies on Refactor Runtime #1367

    Outline

    I’ve previously used another implementation to deliver parallel execution of cucumber tests, however it basically wrapped up the creation and execution of Runtime’s, followed by the need to merge the multiple JSON/HTML etc reports that followed.

    I reviewed the current implementation and also took note of comments in Support concurrent executions of scenarios also I perused all tickets related to running in parallel cukes for other insights

    Main changes

    Added --threads argument to runtime options

    Allows users to specify the (max) number of threads to be used to run the tests

    The actual number of threads used will be the smaller of the given --threads value and the number of features to be executed

    Tests are placed into a Queue and consumed by each thread when needed, resulting in a more performant usage of the threads & less deterministic order of Features being run

    New formatter introduced TimelineFormatter

    Which produces reports using vsjis.org timeline to highlight which feature was run on which Thread and when.
    Note: the resources (js, html etc) are currently within cucumber-core if the PR is accepted then I’d imagine these would have to be moved out into its own project, similarly to cucumber-html. timelineformatter example.zip

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue).
    • [x] New feature (non-breaking change which adds functionality).
    • [x] Breaking change (fix or feature that would cause existing functionality to not work as expected). ~~- Runtime constructor now private Runtime.Builder introduce to hide away boiler plate setup/instantiation code~~

    Checklist:

    • [x] I've added tests for my code.
    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    opened by boaty82 65
  • [Core] Implement cucumber expressions

    [Core] Implement cucumber expressions

    Summary

    • Implements Cucumber expressions
    • Removes XStream
    • Adds DataTables from https://github.com/cucumber/cucumber/pull/291
    • Introduces the concept of StepExpressions which combines a CucumberExpression and DataTable expression. Currently data table expressions are limited to a name or java type. Currently only the implicit type derived from the method argument is used.

    For a working example check the calculator examples.

    How to build

    Install (mvn install) datatables/java from cucumber/cucumber Then install this branch. If it fails you may need to remove pax-exam from examples/pom,xml. This is okay.

    Todo

    • [x] Fix android examples ~~* [ ] Add link to configuration docs in exceptions~~
    • [x] Test SnippetGenerators and StepdefGenerator icm Idea ~~* [ ] Update documentation~~
    • [x] Write blog post ~~* [ ] File IDEA bug about "Pattern expected" warning~~
    • [x] Undefined parameter type error should be similarly friendly as missing table type

    This closes #1041

    opened by mpkorstanje 63
  • cucumber-java8 fails on OpenJDK 1.8.0

    cucumber-java8 fails on OpenJDK 1.8.0

    Cucumber-Java8 depends on internals of the implementation of Oracle's JDK8. When I started experimenting with it I just always got the following exception:

    Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.056 sec <<< FAILURE! - in soy.wimmer.CucumberIT
    Feature: Cucumber with Java8  Time elapsed: 0.047 sec  <<< ERROR!            
    cucumber.runtime.CucumberException: Failed to instantiate class soy.wimmer.CucumberStepdefs
    […]                                                                          
    Caused by: java.lang.reflect.InvocationTargetException: null                 
    […]                                                                          
    Caused by: cucumber.runtime.CucumberException: java.lang.IllegalArgumentException: Wrong type at constant pool index
    […]                                                                          
    Caused by: java.lang.IllegalArgumentException: Wrong type at constant pool index
        at sun.reflect.ConstantPool.getMemberRefInfoAt0(Native Method)           
        at sun.reflect.ConstantPool.getMemberRefInfoAt(ConstantPool.java:47)     
        at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getTypeString(ConstantPoolTypeIntrospector.java:37)
        at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getGenericTypes(ConstantPoolTypeIntrospector.java:27)
        at cucumber.runtime.java.Java8StepDefinition.<init>(Java8StepDefinition.java:45)
        at cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend.java:162)
        at cucumber.api.java8.En.Given(En.java:190)                              
        at soy.wimmer.CucumberStepdefs.<init>(CucumberStepdefs.java:8)           
    […]
    

    The test project causing this output is available at https://github.com/mawis/cucumber-java8-test

    While it fails on OpenJDK8 it works without problems on Oracle JDK8. I consider this to be a bug, as I don't think that cucumber should depend on a specific implementation of the compiler.

    opened by mawis 63
  • [Core] Add Before and AfterStep hooks

    [Core] Add Before and AfterStep hooks

    This PR adds a new feature of AfterStep. Methods annotated with AfterStep will be executed after every step. For HTML Reports to work properly after this change , this PR requires to be merged

    Motivation and Context

    This change was requested by users of cucumber-jvm

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue).
    • [x] New feature (non-breaking change which adds functionality).
    • [x] Breaking change (fix or feature that would cause existing functionality to not work as expected).

    Checklist:

    • [x] I've added tests for my code.
    • [x] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    opened by coding-yogi 53
  • International keywords

    International keywords

    Hi,

    I have problems switching the examples to Swedish international keywords. I've tried helloworld as well as java-calculator and both are having problems when I change to the following import statements:

    import cucumber.api.java.sv.Så; import cucumber.api.java.sv.När;

    It seems that Eclipse is not recognizing these packages in the repositories. I'm using everything else "as-is" from github (cucumber-jvm 1.1.3).

    Please note that I have no problems with:

    import cucumber.api.java.sv.Givet;

    which makes me suspect something related to the special Swedish characters.

    opened by hangvar 51
  • Support step hooks

    Support step hooks

    Feature: https://github.com/cucumber/cucumber/wiki/Hooks

    I am surprised that cucumber-jvm does not support step hooks. For example, when I use cucumber-jvm to build web application acceptance tests, I'd like to take screenshot after each step. Without step hooks, I have to invoke the method in every single step. painful.

    Any reason don't include this feature?

    :zap: enhancement :hourglass: stale 
    opened by ShijunK 44
  • Add command line option support for Android

    Add command line option support for Android

    This will enable cucumber-android test projects that are started through the activity manager (adb shell am instrument) to receive additional Cucumber options from the command line.

    General A normal test project would be started like this:

    adb shell am instrument -w com.mypackage.app.test/cucumber.api.android.CucumberInstrumentation
    

    The activity manager (am) supports additional extras for the instrument command:

    adb shell am instrument -w -e key value com.mypackage.app.test/cucumber.api.android.CucumberInstrumentation
    

    Multiple extras can be passed like this: -e key1 value1 -e key2 value2

    Supported Cucumber options

    am instrument argumentCucumber option
    -e glue PATH--glue PATH
    -e format FORMAT[:PATH_OR_URL]--format FORMAT[:PATH_OR_URL]
    -e tags TAG_EXPRESSION--tags TAG_EXPRESSION
    -e name REGEXP--name REGEXP
    -e dryRun true
    -e noDryRun true
    --[no-]-dry-run
    -e monochrome true
    -e noMonochrome true
    --[no-]-monochrome
    -e strict true
    -e noStrict true
    --[no-]-strict
    -e snippets [underscore|camelcase]--snippets [underscore|camelcase]
    -e dotcucumber PATH_OR_URL--dotcucumber PATH_OR_URL
    -e features [ [FILE|DIR][:LINE[:LINE]*] ]+[ [FILE|DIR][:LINE[:LINE]*] ]+

    Single argument for Cucumber options A single argument extra for the Cucumber options is also supported:

    adb shell am instrument -w -e cucumberOptions "--dry-run --name 'My Test'" com.mypackage.app.test/cucumber.api.android.CucumberInstrumentation
    

    When using cucumberOptions all other Cucumber option extras will be ignored.

    A few things to note

    • You cannot pass just a key without a value, that means a boolean option such as --strict would have to be passed like this: -e strict true
    • Feature references can be passed: -e features [ [FILE|DIR][:LINE[:LINE]*] ]+
    • Values containing spaces need to be passed like this: -e name "'My Feature'"
    • It is not possible to pass the same key multiple times, e. g. -e name Feature1 -e name Feature2 would result in the first name argument being overwritten by the second name argument: The test app would only see Feature2. In order to pass options more than once, you would need to separate the values by two dashes --, like this: -e name Feature1--Feature2

    This pull request also adds support for the following legacy test runner arguments

    am instrument argumentDescription
    -e count trueCount the number of tests (scenarios)
    -e debug trueWait for a debugger to attach before starting to execute the tests.
    Note: This was added by PR #613 already.
    -e log trueEnable Cucumber dry-run (same as --e dryRun true)
    -e coverage trueEnable EMMA code coverage
    -e coverageFile "/path/coverage.ec"Set the file name and path of the EMMA coverage report

    Asking for comments from the community, especially on the selection of the option value separator. I don't particularly like the two dashes, but it works. Does anyone have a better suggestion?

    The requirements are simple: It has to be a character or separator that is

    1. command line compatible (that means & and | will not work)
    2. not already used by Cucumber (e. g. , as in --tags @tag1,@tag2
    3. unlikely to appear in any feature name, file/path/url name, or tag name

    Thanks

    opened by friederbluemle 44
  • Add JUnit 5 Support

    Add JUnit 5 Support

    Summary

    Provide a JUnit 5 extension for cucumber.

    Expected Behavior

    When writing a test with JUnit 5 in our environment, we need to replicate a base environment in a way that we use different Extensions in order to to run tests. So we like to have a Scenario something like this:

    @ExtendWith(CucumberExtension.class)
    @ExtendWith(MockitoExtension.class)
    @ExtendWith(BaseBusinessEnvironmentExtension.class)
    class MyBusinessTest {
       @BeforeEach
        void init(@Mock Person person) {
            when(person.getName()).thenReturn("Dilbert");
        }
    
        @Test
        void simpleTestWithInjectedMock(@Mock Person person) {
            assertEquals("Dilbert", person.getName());
        }
    }
    

    Current Behavior

    At the moment under JUnit 4 we needed to tweak the Cucumber runner in order to call default JUnit 4 annotations.

    Possible Solution

    We like to help create an CucumberExtension that handles the Cucumber specific annotations for JUnit 5 as an JUnit 5 extension, so that it can be combined with other extensions as for example mocking frameworks.

    :zap: enhancement :safety_pin: pinned 
    opened by reinhapa 42
  • DataTable - Automatic conversion to custom type stopped working

    DataTable - Automatic conversion to custom type stopped working

    Summary

    After updating cucumber-testng (and subsequently all transient dependencies) from 2.4.0 to 3.0.2 in pom.xml, automatic conversion for datatables using custom types stopped working and now throws UndefinedDataTableTypeException.

    Expected Behavior

    Only change required is to update imports to import io.cucumber.datatable.DataTable; and tests to run as per usual.

    Current Behavior

    Getting this exception from steps that worked prior to update:

    io.cucumber.datatable.UndefinedDataTableTypeException: Can't convert DataTable to List<jcucumberng.steps.pojos.Income>. Please register a DataTableType with a TableEntryTransformer or TableRowTransformer for class jcucumberng.steps.pojos.Income

    // Feature
    When I Enter My Regular Income Sources
      | name   | amount | frequency     |
      | Salary | 25000  | every 2 weeks |
    
    
    // Stepdef
    @When("^I Enter My Regular Income Sources$")
    public void I_Enter_My_Regular_Income_Sources(DataTable dataTable) throws Throwable {
        List<Income> incomes = dataTable.asList(Income.class);
    
        // More code    
    }
    
    
    // Custom type
    public class Income {
    
        private String name = null;
        private String amount = null;
        private String frequency = null;
    
        public Income(String name, String amount, String frequency) {
            this.name = name;
            this.amount = amount;
            this.frequency = frequency;
        }
    
        // Getters and setters
    }
    

    Possible Solution

    Show more useful comments/javadocs for DataTable specially if updating from v2.x.x to v3.x.x for major changes to its usage. Allow easier automatic conversion like before.

    Context & Motivation

    A revamp of the DataTable usage will break a lot of existing tests and can totally prevent people from updating to v3.x.x. It also outdates a lot of widely available tutorials and references.

    opened by kathyrollo 39
  • Support concurrent executions of scenarios

    Support concurrent executions of scenarios

    Currently it's only possible to execute feature classes in parallel. In case you have independent scenarios (and you really should) it would be nice to run them concurrently. The current codebase does not support this. First of all the reporting is inherently sequential and there is some state in the Runtime class (skipNextStep and scenarioResult). I would be happily contributing a patch, but this would require a major change of some of the internal structure.

    opened by whiskeysierra 37
  • Replace groovy script with FreeMarker template engine

    Replace groovy script with FreeMarker template engine

    🤔 What's changed?

    Replace groovy scripts with FreeMarker templates to generate code.

    ⚡️ What's your motivation?

    Fixes #2648

    🏷️ What kind of change is this?

    • :bank: Refactoring/debt/DX (improvement to code design, tooling, documentation etc. without changing behaviour)

    ♻️ Anything particular you want feedback on?

    📋 Checklist:

    • [x] I agree to respect and uphold the Cucumber Community Code of Conduct
    • [ ] I've changed the behaviour of the code
      • [ ] I have added/updated tests to cover my changes.
    • [ ] My change requires a change to the documentation.
      • [ ] I have updated the documentation accordingly.
    • [ ] Users should know about my change
      • [x] I have added an entry to the "Unreleased" section of the CHANGELOG, linking to this pull request.

    This text was originally generated from a template, then edited by hand. You can modify the template here.

    opened by mlvandijk 1
  • [JUnit] Link tag expression documentation

    [JUnit] Link tag expression documentation

    🤔 What's changed?

    ⚡️ What's your motivation?

    🏷️ What kind of change is this?

    • :bank: Refactoring/debt/DX (improvement to code design, tooling, documentation etc. without changing behaviour)
    • :bug: Bug fix (non-breaking change which fixes a defect)
    • :zap: New feature (non-breaking change which adds new behaviour)
    • :boom: Breaking change (incompatible changes to the API)

    ♻️ Anything particular you want feedback on?

    📋 Checklist:

    • [x] I agree to respect and uphold the Cucumber Community Code of Conduct
    • [ ] I've changed the behaviour of the code
      • [ ] I have added/updated tests to cover my changes.
    • [ ] My change requires a change to the documentation.
      • [ ] I have updated the documentation accordingly.
    • [ ] Users should know about my change
      • [ ] I have added an entry to the "Unreleased" section of the CHANGELOG, linking to this pull request.

    This text was originally generated from a template, then edited by hand. You can modify the template here.

    opened by mpkorstanje 0
  • Remove DeltaSpike

    Remove DeltaSpike

    👓 What did you see?

    When building cucumber-jvm with Java 17 using mvn clean install:

    Exception 0 :
    org.jboss.weld.exceptions.WeldException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @62bd2070
            at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:294)
            at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:248)
    

    Upgrading Weld to the latest supported by deltaspike-cdictrl-api results in:

    Nov 27, 2022 7:04:28 PM org.jboss.weld.bootstrap.WeldStartup <clinit>
    INFO: WELD-000900: 3.1.3 (Final)
    
    java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @704d6e83
    
    	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    	at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    	at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    	at org.jboss.weld.util.bytecode.ClassFileUtils$1.run(ClassFileUtils.java:88)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
    	at org.jboss.weld.util.bytecode.ClassFileUtils.makeClassLoaderMethodsAccessible(ClassFileUtils.java:64)
    

    📚 Any additional context?

    This is currently blocking the use of Java 17 to build the project which is required for https://github.com/cucumber/cucumber-jvm/pull/2644.

    :bank: debt 
    opened by mpkorstanje 2
  • Rewrite Groovy code generation to Java

    Rewrite Groovy code generation to Java

    🤔 What's the problem you've observed?

    The cucumber-java and cucumber-java8 module generate annotations and interfaces using a groovy script.

    Unfortunately the groovy-maven-plugin doesn't support Java 17 source code yet (https://github.com/groovy/gmaven/issues/28). While we currently only have to run on Java 17 for https://github.com/cucumber/cucumber-jvm/pull/2644 it is not unimaginable that at some point in the future we'll also want to compile our own source code with 17 as well.

    ✨ Do you have a proposal for making it better?

    With the increased release cadence of Java it would be prudent to keep the technology stack shallow and remove the dependency on Groovy and Groovy related components al together. So replacing the whole stack with pure Java would be beneficial.

    📚 Any additional context?

    There is a small chicken and egg problem to solve. Generating code with Java requires that the Java code is compiled. However because we are generating code, nothing has been compiled yet.

    :bank: debt 
    opened by mpkorstanje 3
  • Update spring core to v6 (major)

    Update spring core to v6 (major)

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.springframework:spring-webmvc | 5.3.24 -> 6.0.3 | age | adoption | passing | confidence | | org.springframework:spring-web | 5.3.24 -> 6.0.3 | age | adoption | passing | confidence | | org.springframework:spring-test | 5.3.24 -> 6.0.3 | age | adoption | passing | confidence | | org.springframework:spring-context-support | 5.3.24 -> 6.0.3 | age | adoption | passing | confidence |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Renovate will not automatically rebase this PR, because other commits have been found.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    :robot: dependencies 
    opened by renovate[bot] 4
  • Extending RerunFormatter

    Extending RerunFormatter

    🤔 What's the problem you've observed?

    I am making my own version of RerunFormatter. I want it to save only failed scenarios with certain tag.

    When trying to copy the class:

    • NiceAppendableis not public (understandable, don't have to care myself as I use kotlin and don't have to worry about checked exceptions, replacing with regular PrintWriter works just fine for me )
    • UTF8OutputStreamWriter is not public (no big problem, I can just use OutputStreamWriter(out, Charsets.UTF_8) )
    • PrettyFormatter.relativize(URI) is not public (I have to duplicate this method in my code, the method doesn't call anything non-public so it's simple)

    ✨ Do you have a proposal for making it better?

    I suggest 2 possibilities:

    • Extract filter condition for relevant testcases to be rerun into another protectedmethod + remove final keyword from the class. That way I can simply extend this class and modify the functionality.
    • Make PrettyFormatter.relativize public so that I can make my own implementation less duplication.

    📚 Any additional context?

    Our tests are very unreliable because of the test environment, which is quite non-deterministic at times (videogame). We are for example expecting rock to just fall down and stay on the ground in the hole, but in very rare cases, the rock gets "lucky" and jumps away causing the test to fail. Since the failure is quite rare, we tagged those tests and want to consider them failed only if they fail X times in a row. So first time we run all tests, then only failed tagged tests, etc.

    Seems like "filtered rerun" is perfect fit. If you think rerun is not the good way to do this, I welcome suggestions.

    opened by hovi 4
Releases(v7.10.1)
  • v7.10.1(Dec 16, 2022)

  • v7.10.0(Dec 11, 2022)

    Added

    • Enabled reproducible builds (#2641 Hervé Boutemy )
    • [Core] Mark Allure 5 and 6 plugins as incompatible (#2652 M.P. Korstanje)
    • [Spring] Invoke all TestContextManager methods (#2661 M.P. Korstanje)

    Changed

    • [TestNG] Update dependency org.testng:testng to v7.7.0

    Deprecated

    • [DeltaSpike] Deprecated Deltaspike - does not work on Java 17.

    Fixed

    • [Core] Emit exceptions on failure to handle test run finished events (#2651 M.P. Korstanje)
    • [Spring] @MockBean annotation not working with JUnit5 (#2654 Alexander Kirilov, M.P. Korstanje)
    • [Core] Improve expression creation performance (cucumber-expressions/#187, cucumber-expressions/#189, jkrongegg)
    Source code(tar.gz)
    Source code(zip)
  • v7.9.0(Nov 1, 2022)

    Added

    • [Spring] Support @CucumberContextConfiguration as a meta-annotation (2491 Michael Schlatt)

    Changed

    • [Core] Update dependency io.cucumber:gherkin to v24.1
    • [Core] Delegate encoding and BOM handling to gherkin (2624 M.P. Korstanje)

    Fixed

    • [Core] Don't swallow parse errors on the CLI (2632 M.P. Korstanje)

    Security

    • [Core] Update dependency com.fasterxml.jackson to v2.13.4.20221012
    Source code(tar.gz)
    Source code(zip)
  • v7.8.1(Oct 3, 2022)

  • v7.8.0(Sep 15, 2022)

  • v7.7.0(Sep 8, 2022)

  • v7.6.0(Aug 7, 2022)

    Changed

    • [Core] Update dependency io.cucumber:messages to v19
    • [Core] Update dependency io.cucumber:gherkin to v24
    • [Core] Update dependency io.cucumber:html-formatter to v20
    Source code(tar.gz)
    Source code(zip)
Owner
Cucumber
Cucumber Open
Cucumber
Cucumber DSL for testing RESTful Web Services

cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using r

C.T.Co 100 Oct 18, 2022
A template for Spring Boot REST API tested with JUnit 5 and Cucumber 6

demo-bdd Un template Spring Boot pour lancer un BDD/ATDD avec Cucumber 6 et JUnit 5. Maven et le JDK 17 seront nécessaires. Exécuter les tests Le proj

Rui Lopes 4 Jul 19, 2022
A BDD-style test runner for Java 8. Inspired by Jasmine, RSpec, and Cucumber.

Spectrum A colorful BDD-style test runner for Java Spectrum is inspired by the behavior-driven testing frameworks Jasmine and RSpec, bringing their ex

Greg Haskins 143 Nov 22, 2022
BDD framework for automation using Selenium Cucumber and TestNg

Selenium Framework with Cucumber BDD framework for automation using Selenium Cucumber and TestNg The framework has following features Modular Design M

null 3 Jan 20, 2022
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

pact-jvm JVM implementation of the consumer driven contract library pact. From the Ruby Pact website: Define a pact between service consumers and prov

Pact Foundation 962 Dec 31, 2022
Extensions/Plugins for JVM test frameworks

Jexter Extensions/Plugins for JVM test frameworks (JUnit 4, JUnit 5, ...) Get Jexter Binaries are available from Maven Central. Group Artifact Latest

Thundra 20 Jul 26, 2022
Objenesis is a library dedicated to bypass the constructor when creating an object. On any JVM there is.

Objenesis Objenesis is a library dedicated to bypass the constructor when creating an object. On any JVM there is. You can find the website and user d

EasyMock 532 Jan 2, 2023
JVM version of Pact Enables consumer driven contract testing

JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

Pact Foundation 961 Dec 30, 2022
State of the art mutation testing system for the JVM

Pitest (aka PIT) is a state of the art mutation testing system for Java and the JVM. Read all about it at http://pitest.org Releases 1.7.3 #952 Mutate

Henry Coles 1.5k Dec 26, 2022
This repository includes selenium tests examples using cucumber-jvm framework.

Cucumber Selenium Tests This repository includes cucumber selenium tests examples using wikipedia.org. Run tests To run tests on your local machine, y

Denys Vozniuk 3 Nov 27, 2022
Cucumber DSL for testing RESTful Web Services

cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using r

C.T.Co 100 Oct 18, 2022
A template for Spring Boot REST API tested with JUnit 5 and Cucumber 6

demo-bdd Un template Spring Boot pour lancer un BDD/ATDD avec Cucumber 6 et JUnit 5. Maven et le JDK 17 seront nécessaires. Exécuter les tests Le proj

Rui Lopes 4 Jul 19, 2022
A BDD-style test runner for Java 8. Inspired by Jasmine, RSpec, and Cucumber.

Spectrum A colorful BDD-style test runner for Java Spectrum is inspired by the behavior-driven testing frameworks Jasmine and RSpec, bringing their ex

Greg Haskins 143 Nov 22, 2022
BDD framework for automation using Selenium Cucumber and TestNg

Selenium Framework with Cucumber BDD framework for automation using Selenium Cucumber and TestNg The framework has following features Modular Design M

null 3 Jan 20, 2022
A project to cause (controlled) destruction on your jvm application

Perses Cause (controlled) destruction to your jvm application Perses (Ancient Greek: Πέρσης) was the Titan god of destruction. His name is derived fro

Nikolaos Kanakis 62 Dec 27, 2022
configuration library for JVM languages using HOCON files

Configuration library for JVM languages. If you have questions or are working on a pull request or just curious, please feel welcome to join the chat

Lightbend 5.8k Jan 4, 2023
Fault tolerance and resilience patterns for the JVM

Failsafe Failsafe is a lightweight, zero-dependency library for handling failures in Java 8+, with a concise API for handling everyday use cases and t

Jonathan Halterman 3.9k Dec 29, 2022
Fibers, Channels and Actors for the JVM

Quasar Fibers, Channels and Actors for the JVM Getting started Add the following Maven/Gradle dependencies: Feature Artifact Core (required) co.parall

Parallel Universe 4.5k Dec 25, 2022
Dead-Simple Packaging and Deployment for JVM Apps

Capsule Dead-Simple Packaging and Deployment for JVM Applications Capsule is a packaging and deployment tool for JVM applications. A capsule is a sing

Parallel Universe 1.1k Sep 16, 2022
Packages your JAR, assets and a JVM for distribution on Windows, Linux and Mac OS X

About Packages your JAR, assets and a JVM for distribution on Windows, Linux and macOS, adding a native executable file to make it appear like a nativ

libgdx 2.4k Dec 24, 2022