From c3c51845ad355e52e0336d1dd0157244445892fc Mon Sep 17 00:00:00 2001 From: Dong Ma Date: Tue, 1 Dec 2015 01:31:27 +0800 Subject: [PATCH] Add support for cucumber reports plugin This plugin creates pretty cucumber-jvm html reports on jenkins Change-Id: Ia9673a8d290bd37bd38a7c3ab3545c751128f4c2 story: 2000226 --- jenkins_jobs/modules/publishers.py | 69 +++++++++++++++++++ setup.cfg | 1 + .../fixtures/cucumber_reports001.xml | 18 +++++ .../fixtures/cucumber_reports001.yaml | 3 + .../fixtures/cucumber_reports002.xml | 18 +++++ .../fixtures/cucumber_reports002.yaml | 13 ++++ 6 files changed, 122 insertions(+) create mode 100644 tests/publishers/fixtures/cucumber_reports001.xml create mode 100644 tests/publishers/fixtures/cucumber_reports001.yaml create mode 100644 tests/publishers/fixtures/cucumber_reports002.xml create mode 100644 tests/publishers/fixtures/cucumber_reports002.yaml diff --git a/jenkins_jobs/modules/publishers.py b/jenkins_jobs/modules/publishers.py index 125fd4fb1..87ffd71b6 100644 --- a/jenkins_jobs/modules/publishers.py +++ b/jenkins_jobs/modules/publishers.py @@ -977,6 +977,75 @@ def junit(parser, xml_parent, data): 'hudson.plugins.measurement__plots.TestDataPublisher') +def cucumber_reports(parser, xml_parent, data): + """yaml: cucumber-reports + This plugin creates pretty cucumber-jvm html reports on jenkins. + + Requires the Jenkins :jenkins-wiki:`cucumber reports + `. + + :arg str json-reports-path: The path relative to the workspace of + the json reports generated by cucumber-jvm e.g. target - leave + empty to scan the whole workspace (default '') + :arg str file-include-pattern: include pattern (default '') + :arg str file-exclude-pattern: exclude pattern (default '') + :arg str plugin-url-path: The path to the jenkins user content url + e.g. http://host:port[/jenkins/]plugin - leave empty if jenkins + url root is host:port (default '') + :arg bool skipped-fails: skipped steps to cause the build to fail + (default false) + :arg bool pending-fails: pending steps to cause the build to fail + (default false) + :arg bool undefined-fails: undefined steps to cause the build to fail + (default false) + :arg bool missing-fails: missing steps to cause the build to fail + (default false) + :arg bool no-flash-charts: use javascript charts instead of flash charts + (default false) + :arg bool ignore-failed-tests: entire build to fail when these tests fail + (default false) + :arg bool parallel-testing: run same test in parallel for multiple devices + (default false) + + Example: + + .. literalinclude:: + /../../tests/publishers/fixtures/cucumber_reports001.yaml + :language: yaml + + .. literalinclude:: + /../../tests/publishers/fixtures/cucumber_reports002.yaml + :language: yaml + + """ + cucumber_reports = XML.SubElement(xml_parent, + 'net.masterthought.jenkins.' + 'CucumberReportPublisher') + + XML.SubElement(cucumber_reports, 'jsonReportDirectory').text = str( + data.get('json-reports-path', '')) + XML.SubElement(cucumber_reports, 'pluginUrlPath').text = str( + data.get('plugin-url-path', '')) + XML.SubElement(cucumber_reports, 'fileIncludePattern').text = str( + data.get('file-include-pattern', '')) + XML.SubElement(cucumber_reports, 'fileExcludePattern').text = str( + data.get('file-exclude-pattern', '')) + XML.SubElement(cucumber_reports, 'skippedFails').text = str( + data.get('skipped-fails', False)).lower() + XML.SubElement(cucumber_reports, 'pendingFails').text = str( + data.get('pending-fails', False)).lower() + XML.SubElement(cucumber_reports, 'undefinedFails').text = str( + data.get('undefined-fails', False)).lower() + XML.SubElement(cucumber_reports, 'missingFails').text = str( + data.get('missing-fails', False)).lower() + XML.SubElement(cucumber_reports, 'noFlashCharts').text = str( + data.get('no-flash-charts', False)).lower() + XML.SubElement(cucumber_reports, 'ignoreFailedTests').text = str( + data.get('ignore-failed-tests', False)).lower() + XML.SubElement(cucumber_reports, 'parallelTesting').text = str( + data.get('parallel-testing', False)).lower() + + def cucumber_testresult(parser, xml_parent, data): """yaml: cucumber-testresult Publish cucumber test results. diff --git a/setup.cfg b/setup.cfg index afdae64c0..0a4c08749 100644 --- a/setup.cfg +++ b/setup.cfg @@ -164,6 +164,7 @@ jenkins_jobs.publishers = copy-to-master=jenkins_jobs.modules.publishers:copy_to_master coverage=jenkins_jobs.modules.publishers:coverage cppcheck=jenkins_jobs.modules.publishers:cppcheck + cucumber-reports=jenkins_jobs.modules.publishers:cucumber_reports cucumber-testresult=jenkins_jobs.modules.publishers:cucumber_testresult description-setter=jenkins_jobs.modules.publishers:description_setter disable-failed-job=jenkins_jobs.modules.publishers:disable_failed_job diff --git a/tests/publishers/fixtures/cucumber_reports001.xml b/tests/publishers/fixtures/cucumber_reports001.xml new file mode 100644 index 000000000..277aff1f3 --- /dev/null +++ b/tests/publishers/fixtures/cucumber_reports001.xml @@ -0,0 +1,18 @@ + + + + + + http://example.com/ + + + false + false + false + false + false + false + false + + + diff --git a/tests/publishers/fixtures/cucumber_reports001.yaml b/tests/publishers/fixtures/cucumber_reports001.yaml new file mode 100644 index 000000000..481a0b9ff --- /dev/null +++ b/tests/publishers/fixtures/cucumber_reports001.yaml @@ -0,0 +1,3 @@ +publishers: +- cucumber-reports: + plugin-url-path: http://example.com/ diff --git a/tests/publishers/fixtures/cucumber_reports002.xml b/tests/publishers/fixtures/cucumber_reports002.xml new file mode 100644 index 000000000..7275bdb61 --- /dev/null +++ b/tests/publishers/fixtures/cucumber_reports002.xml @@ -0,0 +1,18 @@ + + + + + path + http://example.com/ + **/*.json + badfile.txt + true + true + true + true + true + true + true + + + diff --git a/tests/publishers/fixtures/cucumber_reports002.yaml b/tests/publishers/fixtures/cucumber_reports002.yaml new file mode 100644 index 000000000..af845397f --- /dev/null +++ b/tests/publishers/fixtures/cucumber_reports002.yaml @@ -0,0 +1,13 @@ +publishers: +- cucumber-reports: + json-reports-path: path + plugin-url-path: http://example.com/ + file-include-pattern: '**/*.json' + file-exclude-pattern: badfile.txt + skipped-fails: true + pending-fails: true + undefined-fails: true + missing-fails: true + no-flash-charts: true + ignore-failed-tests: true + parallel-testing: true