diff --git a/cookbook/tests/api/docs/reports/tests/assets/style.css b/cookbook/tests/api/docs/reports/tests/assets/style.css
new file mode 100644
index 000000000..561524c69
--- /dev/null
+++ b/cookbook/tests/api/docs/reports/tests/assets/style.css
@@ -0,0 +1,319 @@
+body {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 12px;
+ /* do not increase min-width as some may use split screens */
+ min-width: 800px;
+ color: #999;
+}
+
+h1 {
+ font-size: 24px;
+ color: black;
+}
+
+h2 {
+ font-size: 16px;
+ color: black;
+}
+
+p {
+ color: black;
+}
+
+a {
+ color: #999;
+}
+
+table {
+ border-collapse: collapse;
+}
+
+/******************************
+ * SUMMARY INFORMATION
+ ******************************/
+#environment td {
+ padding: 5px;
+ border: 1px solid #e6e6e6;
+ vertical-align: top;
+}
+#environment tr:nth-child(odd) {
+ background-color: #f6f6f6;
+}
+#environment ul {
+ margin: 0;
+ padding: 0 20px;
+}
+
+/******************************
+ * TEST RESULT COLORS
+ ******************************/
+span.passed,
+.passed .col-result {
+ color: green;
+}
+
+span.skipped,
+span.xfailed,
+span.rerun,
+.skipped .col-result,
+.xfailed .col-result,
+.rerun .col-result {
+ color: orange;
+}
+
+span.error,
+span.failed,
+span.xpassed,
+.error .col-result,
+.failed .col-result,
+.xpassed .col-result {
+ color: red;
+}
+
+.col-links__extra {
+ margin-right: 3px;
+}
+
+/******************************
+ * RESULTS TABLE
+ *
+ * 1. Table Layout
+ * 2. Extra
+ * 3. Sorting items
+ *
+ ******************************/
+/*------------------
+ * 1. Table Layout
+ *------------------*/
+#results-table {
+ border: 1px solid #e6e6e6;
+ color: #999;
+ font-size: 12px;
+ width: 100%;
+}
+#results-table th,
+#results-table td {
+ padding: 5px;
+ border: 1px solid #e6e6e6;
+ text-align: left;
+}
+#results-table th {
+ font-weight: bold;
+}
+
+/*------------------
+ * 2. Extra
+ *------------------*/
+.logwrapper {
+ max-height: 230px;
+ overflow-y: scroll;
+ background-color: #e6e6e6;
+}
+.logwrapper.expanded {
+ max-height: none;
+}
+.logwrapper.expanded .logexpander:after {
+ content: "collapse [-]";
+}
+.logwrapper .logexpander {
+ z-index: 1;
+ position: sticky;
+ top: 10px;
+ width: max-content;
+ border: 1px solid;
+ border-radius: 3px;
+ padding: 5px 7px;
+ margin: 10px 0 10px calc(100% - 80px);
+ cursor: pointer;
+ background-color: #e6e6e6;
+}
+.logwrapper .logexpander:after {
+ content: "expand [+]";
+}
+.logwrapper .logexpander:hover {
+ color: #000;
+ border-color: #000;
+}
+.logwrapper .log {
+ min-height: 40px;
+ position: relative;
+ top: -50px;
+ height: calc(100% + 50px);
+ border: 1px solid #e6e6e6;
+ color: black;
+ display: block;
+ font-family: "Courier New", Courier, monospace;
+ padding: 5px;
+ padding-right: 80px;
+ white-space: pre-wrap;
+}
+
+div.media {
+ border: 1px solid #e6e6e6;
+ float: right;
+ height: 240px;
+ margin: 0 5px;
+ overflow: hidden;
+ width: 320px;
+}
+
+.media-container {
+ display: grid;
+ grid-template-columns: 25px auto 25px;
+ align-items: center;
+ flex: 1 1;
+ overflow: hidden;
+ height: 200px;
+}
+
+.media-container--fullscreen {
+ grid-template-columns: 0px auto 0px;
+}
+
+.media-container__nav--right,
+.media-container__nav--left {
+ text-align: center;
+ cursor: pointer;
+}
+
+.media-container__viewport {
+ cursor: pointer;
+ text-align: center;
+ height: inherit;
+}
+.media-container__viewport img,
+.media-container__viewport video {
+ object-fit: cover;
+ width: 100%;
+ max-height: 100%;
+}
+
+.media__name,
+.media__counter {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ flex: 0 0 25px;
+ align-items: center;
+}
+
+.collapsible td:not(.col-links) {
+ cursor: pointer;
+}
+.collapsible td:not(.col-links):hover::after {
+ color: #bbb;
+ font-style: italic;
+ cursor: pointer;
+}
+
+.col-result {
+ width: 130px;
+}
+.col-result:hover::after {
+ content: " (hide details)";
+}
+
+.col-result.collapsed:hover::after {
+ content: " (show details)";
+}
+
+#environment-header h2:hover::after {
+ content: " (hide details)";
+ color: #bbb;
+ font-style: italic;
+ cursor: pointer;
+ font-size: 12px;
+}
+
+#environment-header.collapsed h2:hover::after {
+ content: " (show details)";
+ color: #bbb;
+ font-style: italic;
+ cursor: pointer;
+ font-size: 12px;
+}
+
+/*------------------
+ * 3. Sorting items
+ *------------------*/
+.sortable {
+ cursor: pointer;
+}
+.sortable.desc:after {
+ content: " ";
+ position: relative;
+ left: 5px;
+ bottom: -12.5px;
+ border: 10px solid #4caf50;
+ border-bottom: 0;
+ border-left-color: transparent;
+ border-right-color: transparent;
+}
+.sortable.asc:after {
+ content: " ";
+ position: relative;
+ left: 5px;
+ bottom: 12.5px;
+ border: 10px solid #4caf50;
+ border-top: 0;
+ border-left-color: transparent;
+ border-right-color: transparent;
+}
+
+.hidden, .summary__reload__button.hidden {
+ display: none;
+}
+
+.summary__data {
+ flex: 0 0 550px;
+}
+.summary__reload {
+ flex: 1 1;
+ display: flex;
+ justify-content: center;
+}
+.summary__reload__button {
+ flex: 0 0 300px;
+ display: flex;
+ color: white;
+ font-weight: bold;
+ background-color: #4caf50;
+ text-align: center;
+ justify-content: center;
+ align-items: center;
+ border-radius: 3px;
+ cursor: pointer;
+}
+.summary__reload__button:hover {
+ background-color: #46a049;
+}
+.summary__spacer {
+ flex: 0 0 550px;
+}
+
+.controls {
+ display: flex;
+ justify-content: space-between;
+}
+
+.filters,
+.collapse {
+ display: flex;
+ align-items: center;
+}
+.filters button,
+.collapse button {
+ color: #999;
+ border: none;
+ background: none;
+ cursor: pointer;
+ text-decoration: underline;
+}
+.filters button:hover,
+.collapse button:hover {
+ color: #ccc;
+}
+
+.filter__label {
+ margin-right: 10px;
+}
diff --git a/cookbook/tests/api/docs/reports/tests/pytest.xml b/cookbook/tests/api/docs/reports/tests/pytest.xml
new file mode 100644
index 000000000..46143d8da
--- /dev/null
+++ b/cookbook/tests/api/docs/reports/tests/pytest.xml
@@ -0,0 +1,19 @@
+
Report generated on 18-Aug-2024 at 12:56:14 by pytest-html + v4.1.1
+4 tests took 00:01:48.
+(Un)check the boxes to filter the results.
+| Result | +Test | +Duration | +Links | +
|---|