{"id":14969237,"url":"https://github.com/cucumber/junit-xml-formatter","last_synced_at":"2026-02-20T00:07:54.712Z","repository":{"id":64173424,"uuid":"573833172","full_name":"cucumber/junit-xml-formatter","owner":"cucumber","description":"JUnit XML formatter for reporting Cucumber results ","archived":false,"fork":false,"pushed_at":"2026-02-15T18:44:51.000Z","size":1228,"stargazers_count":4,"open_issues_count":5,"forks_count":7,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-02-15T21:19:29.392Z","etag":null,"topics":["java","javascript","polyglot-release","tidelift"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cucumber.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"cucumber","github":"cucumber"}},"created_at":"2022-12-03T15:22:18.000Z","updated_at":"2026-02-15T18:44:22.000Z","dependencies_parsed_at":"2025-12-09T07:08:59.974Z","dependency_job_id":null,"html_url":"https://github.com/cucumber/junit-xml-formatter","commit_stats":{"total_commits":79,"total_committers":5,"mean_commits":15.8,"dds":0.430379746835443,"last_synced_commit":"4b5ddd56b77bc80393f80a1dc27baa366425f8db"},"previous_names":["cucumber/junit-xml-formatter","cucumber/cucumber-junit-xml-formatter"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/cucumber/junit-xml-formatter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fjunit-xml-formatter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fjunit-xml-formatter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fjunit-xml-formatter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fjunit-xml-formatter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cucumber","download_url":"https://codeload.github.com/cucumber/junit-xml-formatter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fjunit-xml-formatter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29637398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"ssl_error","status_checked_at":"2026-02-19T22:32:38.330Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","javascript","polyglot-release","tidelift"],"created_at":"2024-09-24T13:41:24.795Z","updated_at":"2026-02-20T00:07:54.689Z","avatar_url":"https://github.com/cucumber.png","language":"Java","funding_links":["https://opencollective.com/cucumber","https://github.com/sponsors/cucumber"],"categories":[],"sub_categories":[],"readme":"[![Maven Central](https://img.shields.io/maven-central/v/io.cucumber/junit-xml-formatter.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:io.cucumber%20AND%20a:junit-xml-formatter)\n\n⚠️ This is an internal package; you don't need to install it in order to use the JUnit XML Formatter.\n\nJUnit XML Formatter\n===================\n\nWrites Cucumber message into a JUnit XML report.\n\nThe JUnit XML report is\n[a de facto standard without an official specification](https://github.com/testmoapp/junitxml/tree/main).\nBut we validate it against the [Jenkins JUnit XML XSD](./jenkins-junit.xsd) so\nthere should be a good chance your CI will understand it.\n\nIf not, please let us know in the issues!\n\n## Features and Limitations\n\n### Test outcome mapping\n\nCucumber and the JUnit XML Report support a different set of test outcomes.\nThese are mapped according to the table below. \n\nAdditionally, it is advisable to run Cucumber in strict mode. When used in\nnon-strict mode scenarios with a pending or undefined outcome will not fail\nthe test run ([#714](https://github.com/cucumber/common/issues/714)). This\ncan lead to a xml report that contains `failure` outcomes while the build\npasses.\n\n| Cucumber Outcome | XML Outcome | Passes in strict mode | Passes in non-strict mode |\n|------------------|-------------|-----------------------|---------------------------|\n| UNKNOWN          | n/a         | n/a                   | n/a                       |\n| PASSED           | passed      | yes                   | yes                       |            \n| SKIPPED          | skipped     | yes                   | yes                       |           \n| PENDING          | failure     | no                    | yes                       |\n| UNDEFINED        | failure     | no                    | yes                       |\n| AMBIGUOUS        | failure     | no                    | no                        |\n| FAILED           | failure     | no                    | no                        |\n\n\n### Step reporting\n\nThe JUnit XML report assumes that a test is a method on a class. Yet a scenario\nconsists of multiple steps. To provide info about which step failed, the `system-out`\nelement will contain a rendition of steps and their result.\n\n```xml\n\u003csystem-out\u003e\u003c![CDATA[\nGiven there are 12 cucumbers................................................passed\nWhen I eat 5 cucumbers......................................................passed\nThen I should have 7 cucumbers..............................................passed\n]]\u003e\u003c/system-out\u003e\n```\n\n### Naming Rules and Examples\n\nCucumber does not require that scenario names are unique. To disambiguate\nbetween similarly named scenarios and examples the report prefixes the rule\nto the scenario or example name.\n\n```feature\nFeature: Rules\n\n  Rule: a sale cannot happen if change cannot be returned\n    Example: no change\n      ...\n    Example: exact change\n      ...\n\n  Rule: a sale cannot happen if we're out of stock\n    Example: no chocolates left\n      ...\n```\n\n```xml\n\u003ctestcase classname=\"Rules\" name=\"a sale cannot happen if change cannot be returned - no change\" time=\"0.007\" /\u003e\n\u003ctestcase classname=\"Rules\" name=\"a sale cannot happen if change cannot be returned - exact change\" time=\"0.009\" /\u003e\n\u003ctestcase classname=\"Rules\" name=\"a sale cannot happen if we're out of stock - no chocolates left\" time=\"0.009\" /\u003e\n```\n\nLikewise for example tables, the rule (if any), scenario outline name, example\nname, and number are included. Additionally, if the scenario outline name is\nparameterized, the pickle name is included too.\n\n```feature\nFeature: Examples Tables\n\n  Scenario Outline: Eating cucumbers\n    Given there are \u003cstart\u003e cucumbers\n    When I eat \u003ceat\u003e cucumbers\n    Then I should have \u003cleft\u003e cucumbers\n\n    Examples: These are passing\n      | start | eat | left |\n      |    12 |   5 |    7 |\n      |    20 |   5 |   15 |\n\n    Examples: These are failing\n      | start | eat | left |\n      |    12 |  20 |    0 |\n      |     0 |   1 |    0 |\n\n  Scenario Outline: Eating \u003ccolor\u003e cucumbers\n    Given I am transparent\n    When I eat \u003ccolor\u003e cucumbers\n    Then I become \u003ccolor\u003e\n\n    Examples:\n      | color | \n      |   red | \n      | green | \n      |  blue | \n```\n\n```xml\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating cucumbers - These are passing - #1.1\" /\u003e\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating cucumbers - These are passing - #1.2\" /\u003e\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating cucumbers - These are failing - #2.1\" /\u003e\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating cucumbers - These are failing - #2.2\" /\u003e\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating \u0026lt;color\u0026gt; cucumbers - #1.1: Eating red cucumbers\" /\u003e\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating \u0026lt;color\u0026gt; cucumbers - #1.2: Eating green cucumbers\" /\u003e\n\u003ctestcase classname=\"Examples Tables\" name=\"Eating \u0026lt;color\u0026gt; cucumbers - #1.3: Eating blue cucumbers\" /\u003e\n```\n\n## Android\n\nThe Android SDK does not include `javax.xml.stream.XMLOutputFactory`. This and other missing `java.xml.stream.*`\ndependencies can be provided by adding `com.fasterxml:aalto-xml` to your dependencies. \n\n## Contributing\n\nEach language implementation validates itself against the examples in the\n`testdata` folder. See the [testdata/README.md](testdata/src/README.md) for more\ninformation.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcucumber%2Fjunit-xml-formatter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcucumber%2Fjunit-xml-formatter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcucumber%2Fjunit-xml-formatter/lists"}