{"id":15056568,"url":"https://github.com/renatoathaydes/spock-reports","last_synced_at":"2025-04-04T10:07:59.676Z","repository":{"id":1031500,"uuid":"11616200","full_name":"renatoathaydes/spock-reports","owner":"renatoathaydes","description":"This project creates a global extension to Spock to create test reports.","archived":false,"fork":false,"pushed_at":"2024-02-24T04:39:00.000Z","size":1373,"stargazers_count":274,"open_issues_count":18,"forks_count":68,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-03-28T09:07:00.327Z","etag":null,"topics":["groovy","reports","spock-extension","spock-framework","testing"],"latest_commit_sha":null,"homepage":null,"language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/renatoathaydes.png","metadata":{"files":{"readme":"README.md","changelog":"news.md","contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2013-07-23T18:46:13.000Z","updated_at":"2025-03-25T12:37:47.000Z","dependencies_parsed_at":"2023-07-05T18:48:00.573Z","dependency_job_id":"e60c2812-43bc-4ed5-ac78-a22fb3d012dc","html_url":"https://github.com/renatoathaydes/spock-reports","commit_stats":{"total_commits":439,"total_committers":22,"mean_commits":"19.954545454545453","dds":0.5034168564920274,"last_synced_commit":"51eaf57a3be8115deb2a553cef68cc1831700cf4"},"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatoathaydes%2Fspock-reports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatoathaydes%2Fspock-reports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatoathaydes%2Fspock-reports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatoathaydes%2Fspock-reports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renatoathaydes","download_url":"https://codeload.github.com/renatoathaydes/spock-reports/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247157275,"owners_count":20893219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["groovy","reports","spock-extension","spock-framework","testing"],"created_at":"2024-09-24T21:53:30.220Z","updated_at":"2025-04-04T10:07:59.654Z","avatar_url":"https://github.com/renatoathaydes.png","language":"Groovy","funding_links":[],"categories":["测试"],"sub_categories":[],"readme":"# Spock Reports Extension\n*by Renato Athaydes*\n\nCheck out [the latest news](news.md) about this project!\n\n[![Actions Status](https://github.com/renatoathaydes/spock-reports/workflows/Build%20And%20Test%20on%20All%20OSs/badge.svg)](https://github.com/renatoathaydes/spock-reports/actions)\n[![Maven Central](https://img.shields.io/maven-central/v/com.athaydes/spock-reports.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22com.athaydes%22%20AND%20a:%22spock-reports%22)\n\n## What it is\n\nThis project is a global extension for [Spock](https://code.google.com/p/spock/) to create test (or, in Spock terms, Specifications) reports.\n\nBy default, the report creator generates a **HTML report** for each Specification, as well as a summary of all Specifications that have been run (index.html).\n\nIf you prefer to have your own template to generate reports from, you can use the TemplateReportCreator. This allows you\nto generate reports in any text format.\nSee the **\"Using template reports\"** section below.\n\n\u003e Support for Geb tests: if you use [Geb](http://gebish.org/) for web testing, check out the\n  [geb-spock-reports](https://github.com/AOEpeople/geb-spock-reports) extension which adds screenshots to Spock reports.\n\n## Where to find demo reports\n\nI am using [CodePen](http://codepen.io) to design the HTML [feature report](http://codepen.io/renatoathaydes/full/ihGgt), which contains detailed information about each Specification run by Spock, including the examples given (*Where* block) and their results, if any, and the [summary report](http://codepen.io/renatoathaydes/full/mKckz), which summarizes the results of all Specification runs. Click on the links to see the reports used for testing.\n\nIf you don't like the styles, you can use your own css stylesheets (see the customization section below). I welcome feedback on how to improve the report looks!\n\n## How to use it\n\nTo enable this Spock extension, you only need to declare a dependency to it (if using Maven, Ivy, Gradle etc) or, just add the jar to the project's classpath.\n\nSpock-reports is available on Maven Central.\n\nVersion compatibility:\n\n| Java  | Groovy | Spock          | spock-reports           |\n|-------|--------|----------------|-------------------------|\n| 8+    | 4.0+   | 2.3-groovy-4.0 | \u003cb\u003e2.5.1-groovy-4.0\u003c/b\u003e |\n| 8+    | 3.0+   | 2.3-groovy-3.0 | \u003cb\u003e2.5.1-groovy-3.0\u003c/b\u003e |\n| 8+    | 2.5+   | 2.0-groovy-2.5 | \u003cb\u003e2.0-groovy-2.5\u003c/b\u003e   |\n| 7, 8  | 2.4+   | 1.3+           | \u003cb\u003e1.8.0\u003c/b\u003e            |\n\n\n### If you are using Maven\n\nAdd ``spock-reports`` to your ``\u003cdependencies\u003e``:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.athaydes\u003c/groupId\u003e\n  \u003cartifactId\u003espock-reports\u003c/artifactId\u003e\n  \u003cversion\u003e$spockReportsVersion\u003c/version\u003e\n  \u003cscope\u003etest\u003c/scope\u003e\n  \u003c!-- this avoids affecting your version of Groovy/Spock --\u003e\n  \u003cexclusions\u003e\n    \u003cexclusion\u003e\n      \u003cgroupId\u003e*\u003c/groupId\u003e\n      \u003cartifactId\u003e*\u003c/artifactId\u003e\n    \u003c/exclusion\u003e\n  \u003c/exclusions\u003e\n\u003c/dependency\u003e\n\n\u003c!-- // if you don't already have slf4j-api and an implementation of it in the classpath, add this! --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n  \u003cartifactId\u003eslf4j-api\u003c/artifactId\u003e\n  \u003cversion\u003e1.7.36\u003c/version\u003e\n  \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n  \u003cartifactId\u003eslf4j-simple\u003c/artifactId\u003e\n  \u003cversion\u003e1.7.36\u003c/version\u003e\n  \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n### If you are using Gradle\n\n```groovy\nrepositories {\n    mavenCentral()\n}\n\ntest {\n    useJUnitPlatform()\n}\n\ndependencies {\n    // you can use testRuntimeClasspath if you don't want to use spock-report-specific features in your Specs\n    testImplementation( \"com.athaydes:spock-reports:$spockReportsVersion\" ) {\n        transitive = false // this avoids affecting your version of Groovy/Spock\n    }\n    // if you don't already have slf4j-api and an implementation of it in the classpath, add this!\n    testImplementation 'org.slf4j:slf4j-api:1.7.36'\n    testRuntimeClasspath 'org.slf4j:slf4j-simple:1.7.36'\n}\n```\n\nIf you prefer, you can just download the jar directly from [Maven Central](https://search.maven.org/artifact/com.athaydes/spock-reports/).\n\nThe only dependencies this project has are Groovy (only the\n`groovy`, `groovy-templates`, `groovy-xml` and `groovy-json` modules are required)\nand `Spock`, of course.\n\n## Adding information to reports programmatically\n\nIf you want to add information to your Spock-reports programmatically, since version 1.4.0, you can use the following\n`Specification` class' extension methods which are added by Spock Reports:\n\n* `void reportHeader( arg )` - dynamically insert data into the top of the Specification report.\n* `void reportInfo( arg )` - add data to the feature's section.\n\nThese methods are added as\n[Groovy extensions](http://docs.groovy-lang.org/docs/next/html/documentation/core-metaprogramming.html#module-descriptor),\nso your IDE should be able to show them in auto-completion!\n\nFor example, you could do something like this within your `Specification`:\n\n```groovy\ndef setupSpec() {\n    reportHeader \"\u003ch2\u003eBrowser: ${driver.browser.name}\u003c/h2\u003e\"\n}\n\ndef \"My feature\"() {\n    expect:\n    reportInfo \"Some information I want to show in the report\"\n}\n```\n\n## Customizing spock-reports logging\n\n`spock-reports` uses the `slf4j-api` for logging, so you can get logging information to investigate any issues you\nmay face with your Spock tests.\n\nIf your application does not have a slf4j implementation framework in the classpath, you may get this warning when running\nyour tests:\n\n```\nSLF4J: Failed to load class \"org.slf4j.impl.StaticLoggerBinder\".\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.\n```\n\nTo get rid of the warning, add a dependency on a logging framework that implements the slf4j-api.\n\nFor example, to use `slf4j-simple`, add this line to your Gradle dependencies (or the equivalent XML in your Maven pom):\n\n```groovy\ntestCompile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.30'\n```\n\nTo configure the logging framework itself, please check the documentation of the framework you decide to use.\nIf you're using `slf4j-simple`, check [this](http://www.slf4j.org/apidocs/org/slf4j/impl/SimpleLogger.html).\n\nMost logging messages emitted by `spock-reports` use the `DEBUG` level, except when errors happen, in which case the\n`WARN` level is used.\n\nThe base `spock-reports`'s logger name is `com.athaydes.spockframework.report`.\n\n## Customizing the reports\n\nSpock-reports can be configured via the [Spock config file](http://spockframework.org/spock/docs/1.1/extensions.html#_spock_configuration_file),\na dedicated properties file or system properties.\n\nAll properties listed below are supported either way.\n\n### Using SpockConfig.groovy\n\n\u003e supported since version 1.5.0\n\nAll properties for spock-reports should be added in the `spockReports` block.\nTo set properties, use the following syntax:\n\n```groovy\nspockReports {\n    set 'com.athaydes.spockframework.report.showCodeBlocks': true\n    set 'com.athaydes.spockframework.report.outputDir': 'target/spock-reports'\n}\n```\n\nAlternatively:\n\n```groovy\nspockReports {\n    // set all properties at once\n    set( [ 'com.athaydes.spockframework.report.showCodeBlocks': true,\n           'com.athaydes.spockframework.report.outputDir': 'target/spock-reports' ] )\n}\n```\n\n### Using a properties file\n\nIf you prefer to use a properties file, the file should be located at the following location (relative to the classpath):\n\n`META-INF/services/com.athaydes.spockframework.report.IReportCreator.properties`\n\n**If you use Grails**, the above location will not work... the correct location depends on the Grails version\nyou're using. See the following blog posts by @rdmueller for instructions:\n\n* [Spock Reports with Grails 2.2](https://rdmueller.github.io/Spock-Reports-with-Grails-2.2/)\n* [Spock Reports with Grails 2.5](https://rdmueller.github.io/Spock-Reports-with-Grails-2.5/)\n* [Spock Reports with Grails 3.0](https://rdmueller.github.io/Spock-Reports-with-Grails-3.0/)\n\n### Using system properties\n\nIf you use Gradle and prefer system properties, they should be configured on the test task, e.g.:\n```groovy\ntask('functionalTest', type: Test) {\n  systemProperty 'com.athaydes.spockframework.report.outputDir', 'build/reports/spock'\n}\n```\n\nIf you use Maven and prefer system properties, they should be configured as \n[`systemPropertyVariables` in the `configuration` section](https://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html)\n of the `failsafe` and `surefire` plugins.\n\n### Default properties' values\n\n```properties\n# Name of the implementation class(es) of report creator(s) to enable (separate multiple entries with commas)\n# Currently supported classes are:\n#   1. com.athaydes.spockframework.report.internal.HtmlReportCreator\n#   2. com.athaydes.spockframework.report.template.TemplateReportCreator\ncom.athaydes.spockframework.report.IReportCreator=com.athaydes.spockframework.report.internal.HtmlReportCreator\n\n# Set properties of the report creator\n# For the HtmlReportCreator, the only properties available are\n# (the location of the css files is relative to the classpath):\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.featureReportCss=spock-feature-report.css\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.summaryReportCss=spock-summary-report.css\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.printThrowableStackTrace=false\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.inlineCss=true\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.enabled=true\n# options are: \"class_name_and_title\", \"class_name\", \"title\"\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.specSummaryNameOption=class_name_and_title\n\n# exclude Specs Table of Contents\ncom.athaydes.spockframework.report.internal.HtmlReportCreator.excludeToc=false\n\n# Output directory (where the spock reports will be created) - relative to working directory\ncom.athaydes.spockframework.report.outputDir=build/spock-reports\n\n# Output directory where to store the aggregated JSON report (used to support parallel builds)\ncom.athaydes.spockframework.report.aggregatedJsonReportDir=\n\n# If set to true, hides blocks which do not have any description\ncom.athaydes.spockframework.report.hideEmptyBlocks=false\n\n# Set the name of the project under test so it can be displayed in the report\ncom.athaydes.spockframework.report.projectName=\n\n# Set the version of the project under test so it can be displayed in the report\ncom.athaydes.spockframework.report.projectVersion=Unknown\n\n# Show the source code for each block\ncom.athaydes.spockframework.report.showCodeBlocks=false\n\n# Set the root location of the Spock test source code (only used if showCodeBlocks is 'true')\ncom.athaydes.spockframework.report.testSourceRoots=src/test/groovy\n\n# Set properties specific to the TemplateReportCreator\ncom.athaydes.spockframework.report.template.TemplateReportCreator.specTemplateFile=/templateReportCreator/spec-template.md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.reportFileExtension=md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.summaryTemplateFile=/templateReportCreator/summary-template.md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.summaryFileName=summary.md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.enabled=true\n```\n\n### Notes on `outputDir`\n\nBe aware that the `outputDir` property is relative to the working directory.\n\nFor Maven projects which use the defaults, you might want to change the `outputDir` to `target/spock-reports`.\n\nIf your build system can cache build outputs (to, for example, skip unnecessary build steps when in/out do not change),\nregister the `outputDir` as an output of the `test` task.\n\nIn Gradle, for example, this can be accomplished with the following declaration in your `build.gradle` file:\n\n```groovy\ntest {\n    // set to the same value as 'com.athaydes.spockframework.report.outputDir'\n    outputs.dir \"$buildDir/spock-reports\"\n}\n```\n\n### Customizing the report stylesheets\n\nThe CSS properties above can be set to either of the following kinds of values:\n\n* a classpath resource.\n* a URL (the value will be used to call Java's `new URL(value)`.\n\nIf the value does not match a full URL starting with a protocol (eg. `file:///usr/local/css/report.css`),\nthe value will be treated as an absolute path to a classpath resource.\n\nFor example, if you set the value of a CSS property to `my-css/test-report.css`, the resource `/my-css/test-report.css`\nwill be looked up in all Jars and directories which are part of the classpath.\n\nIf you set the value to `http://myhost.com/css/test-report.css`, the resource at this URL will be read.\n\n#### Disabling CSS inlining\n\nBy default, the CSS resource will be inlined in the HTML report.\n\nIf you set the `inlineCss` property to `false`, then the CSS resource will be copied to the `outputDir` directory,\ntogether with the HTML reports, with the following names:\n\n* `feature-report.css` (for the `featureReportCss` property).\n* `summary-report.css` (for the `summaryReportCss` property).\n\nA link to the CSS resources with the above names will be added to the HTML file instead of inlining the CSS.\n\n## Using template reports\n\nIf you don't like the looks of the HTML report, or want your reports in a different text format, you can use the\nTemplateReportCreator to do that.\n\nAll you need to do to get started is provide a config file, or system properties, as explained above that\nset the `IReportCreator` to `com.athaydes.spockframework.report.template.TemplateReportCreator`:\n\n```properties\ncom.athaydes.spockframework.report.IReportCreator=com.athaydes.spockframework.report.template.TemplateReportCreator\n\n# Set properties of the report creator\ncom.athaydes.spockframework.report.template.TemplateReportCreator.specTemplateFile=/templateReportCreator/spec-template.md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.reportFileExtension=md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.summaryTemplateFile=/templateReportCreator/summary-template.md\ncom.athaydes.spockframework.report.template.TemplateReportCreator.summaryFileName=summary.md\n\n# Output directory (where the spock reports will be created) - relative to working directory\ncom.athaydes.spockframework.report.outputDir=build/spock-reports\n\n# If set to true, hides blocks which do not have any description\ncom.athaydes.spockframework.report.hideEmptyBlocks=false\n```\n\nJust copy the above contents to a file at `META-INF/services/com.athaydes.spockframework.report.IReportCreator.properties`\nrelative to the classpath (eg. in `src/test/resources` for Maven users) and spock-reports will create a MD (mark-down)\nreport for your tests.\n\nTo provide your own template, change the location of the template files, the file extension\nyou wish your reports to have, and the name for the summary report file, using the config file.\n\nTo get started with your own template, check the [existing spec template file](src/main/resources/templateReportCreator/spec-template.md)\nand the [summary template](src/main/resources/templateReportCreator/summary-template.md).\n\nYou can see an example report created with the default spec template file [here](src/test/resources/FakeTest.md)\n(this is actually used in the spock-reports tests).\n\n### How templates work\n\nThe template report creator uses Groovy's [GStringTemplateEngine](http://docs.groovy-lang.org/next/html/documentation/template-engines.html#_gstringtemplateengine)\nto create reports based on a template file.\n\nThis template mechanism is very simple to use, but also very powerful, as you can write any code you want in the template file.\n\nThere are two templates you should provide:\n\n* Spec report template: report for the run of a single Specification.\n* Summary template: contains a summary of all Specifications that have been run during a JVM lifetime.\n\n#### Spec report template\n\nHere's the most basic Spec template you could imagine, which simply outputs the name of the Specification that ran:\n\n```\nThis is a Report for ${utils.getSpecClassName(data)}\n```\n\nAs you can see, you can use `${variable}` to run actual code whose result will be printed in the report.\nAnother way to do this, is to use `\u003c% code %\u003e` blocks, as in the following example, which prints the name and\nresult of all features in a Specification:\n\n```\n\u003c%\n    features.eachFeature { name, result, blocks, iterations, params -\u003e\n%\u003e\nFeature Name: $name\nResult: $result\n\u003c%\n    }\n%\u003e\n```\n\n\u003e NOTE: before version 1.2.6, `eachFeature` used to be called `forEach`. This had to be changed to avoid conflict\n with Java 8's method of the same name.\n\nYou probably noticed the use of some predefined variables in the template file code example. The available variables are:\n\n* `data`: an instance of [`SpecData`](src/main/groovy/com/athaydes/spockframework/report/internal/SpecData.groovy)\n  containing the result of running a Specification.\n* `reportCreator`: the [`TemplateReportCreator`](src/main/groovy/com/athaydes/spockframework/report/template/TemplateReportCreator.groovy) instance.\n* `fmt`: an instance of [`StringFormatHelper`](src/main/groovy/com/athaydes/spockframework/report/internal/StringFormatHelper.groovy).\n  It provides methods such as `String toTimeDuration( timeInMs )`\n  and `String escapeXml( String str )`.\n* `utils`: the [`Utils`](src/main/groovy/com/athaydes/spockframework/report/util/Utils.groovy) class offers\n  many *useful* methods like `Map stats( SpecData data )`, which returns statistics about the given Specification.\n* `features`: as shown above, is an Object whose `eachFeature` method allows you to iterate over all the features of a\n  Specification. When inside the `eachFeature` closure, you can access directly all members of the current feature\n  (an instance of `FeatureInfo`). So, for example, to get the `Title` annotation of a feature, you can call\n  `utils.specAnnotation( data, spock.lang.Title )`.\n\nAs the default template file shows, you can get statistics for the Specification easily with this code snippet:\n\n```\n\u003c% def stats = utils.stats( data ) %\u003e\nReport statistics: $stats\n```\n\nThe variable `stats` is a `Map` containing the following keys:\n\n```\nfailures, errors, skipped, totalRuns, totalFeatures, passed, successRate, time\n```\n\nSo, you can use it in your template like this:\n\n```\nFeatures:           :  ${stats.totalFeatures}\nTotal number of runs:  ${stats.totalRuns}\nPassed              :  ${stats.passed}\nNumber of failures..:  ${stats.failures}\nNumber of errors....:  ${stats.errors}\nNumber of ignored...:  ${stats.skipped}\nSuccess rate........:  ${stats.successRate}\nTotal time (ms).....:  ${stats.time}\n\nCreated on ${new Date()} by ${System.properties['user.name']}\n```\n\n#### Summary template\n\nThe summary template has access to a single variable called `data`, which is a Map containing all the available data for all Specifications that were run.\n\nFor example, after running two Specifications named `test.FirstSpec` and `test.SecondSpec`,\nthe `data` Map could look like this:\n\n```groovy\n[\n 'test.FirstSpec' : [ failures: 0, errors: 0, skipped: 2, totalRuns: 3, totalFeatures: 4, passed: 5, successRate: 0.1, time: 1000 ],\n 'test.SecondSpec': [ failures: 0, errors: 1, skipped: 3, totalRuns: 4, totalFeatures: 6, passed: 6, successRate: 0.2, time: 2000 ],\n]\n```\n\nYou can then iterate over each Spec's data as follows:\n\n```\n\u003c% data.each { name, map -\u003e\n      def s = map.stats\n %\u003e| $name | ${s.totalRuns} | ${s.failures} | ${s.errors} | ${s.skipped} | ${s.successRate} | ${s.time} |\n\u003c% }\n %\u003e\n```\n\nCheck the default [summary template](src/main/resources/templateReportCreator/summary-template.md) for a full example.\n\n## Submitting pull requests\n\nPlease submit pull requests with bug fixes at any time!!\n\nBut if your Pull Request is about a new feature, please make sure to create an issue first so that\nwe can all discuss whether it's a good idea and what's the best way to go about it.\n\nAlso, please notice that the master branch is supposed to contain only releases... the development branch\nis called `dev`, so *all PRs should be submitted against `dev`*, not master.\n\nThank you.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatoathaydes%2Fspock-reports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenatoathaydes%2Fspock-reports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatoathaydes%2Fspock-reports/lists"}