From e2dcbd8f169233712f912b0ef234fd716dfe1523 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 25 May 2024 21:05:43 +0200 Subject: [PATCH 1/3] [17.0][ADD] odoo_test_xmlrunner module --- odoo_test_xmlrunner/README.rst | 201 +++++++ odoo_test_xmlrunner/__init__.py | 1 + odoo_test_xmlrunner/__manifest__.py | 19 + odoo_test_xmlrunner/odoo_tests/__init__.py | 1 + odoo_test_xmlrunner/odoo_tests/loader.py | 33 ++ odoo_test_xmlrunner/pyproject.toml | 3 + odoo_test_xmlrunner/readme/CONFIGURATION.md | 2 + odoo_test_xmlrunner/readme/CREDITS.md | 2 + odoo_test_xmlrunner/readme/DESCRIPTION.md | 1 + odoo_test_xmlrunner/readme/INSTALL.md | 3 + odoo_test_xmlrunner/readme/USAGE.md | 108 ++++ odoo_test_xmlrunner/requirements.txt | 1 + .../static/description/index.html | 547 ++++++++++++++++++ requirements.txt | 1 + 14 files changed, 923 insertions(+) create mode 100644 odoo_test_xmlrunner/README.rst create mode 100644 odoo_test_xmlrunner/__init__.py create mode 100644 odoo_test_xmlrunner/__manifest__.py create mode 100644 odoo_test_xmlrunner/odoo_tests/__init__.py create mode 100644 odoo_test_xmlrunner/odoo_tests/loader.py create mode 100644 odoo_test_xmlrunner/pyproject.toml create mode 100644 odoo_test_xmlrunner/readme/CONFIGURATION.md create mode 100644 odoo_test_xmlrunner/readme/CREDITS.md create mode 100644 odoo_test_xmlrunner/readme/DESCRIPTION.md create mode 100644 odoo_test_xmlrunner/readme/INSTALL.md create mode 100644 odoo_test_xmlrunner/readme/USAGE.md create mode 100644 odoo_test_xmlrunner/requirements.txt create mode 100644 odoo_test_xmlrunner/static/description/index.html diff --git a/odoo_test_xmlrunner/README.rst b/odoo_test_xmlrunner/README.rst new file mode 100644 index 00000000000..c8d5c9881e5 --- /dev/null +++ b/odoo_test_xmlrunner/README.rst @@ -0,0 +1,201 @@ +====================== +Unittest xUnit reports +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:782b2ed22876a72d28e0e67c5ff949d6d104c2da4bd0cf36ca7dbf3597900604 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github + :target: https://github.com/OCA/server-tools/tree/17.0/odoo_test_xmlrunner + :alt: OCA/server-tools +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-tools-17-0/server-tools-17-0-odoo_test_xmlrunner + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module generate unittest reports using unittest-xml-reporting tool. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +Install python library https://pypi.org/project/unittest-xml-reporting/ + +The module is automatically installed on the Odoo instance. + +Usage +===== + +Run the native Odoo tests +------------------------- + +Run the native Odoo tests. See the `Odoo +documentation `__ +for more information. + +Gitlab CI usage example +~~~~~~~~~~~~~~~~~~~~~~~ + +Add the following job to your ``.gitlab-ci.yml`` file: + +.. code:: yaml + + + stages: + - test + + variables: + POSTGRES_DB: odoo + POSTGRES_USER: odoo + POSTGRES_PASSWORD: odoo + POSTGRES_HOST_AUTH_METHOD: trust + + test: + stage: test + image: + name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest + services: + - name: postgres:15 + tags: + - gitlab-org-docker + script: + # install odoo and run tests + - oca_install_addons && oca_init_test_database && oca_run_tests + # generate coverage report + - coverage html -d htmlcov && coverage xml -o coverage.xml + # read line-rate from coverage.xml and print it as percentage + - total=$(grep -oP ']*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%" + coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' + artifacts: + paths: + - htmlcov/* + when: always + reports: + junit: test_results/*.xml + coverage_report: + coverage_format: cobertura + path: coverage.xml + +Github Actions usage example +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Add the following job to your ``.github/workflows/main.yml`` file: + +.. code:: yaml + + name: tests + + permissions: + contents: read + checks: write + id-token: write + + on: + push: + branches: ["main"] + tags: ["*"] + pull_request: + + jobs: + test: + runs-on: ubuntu-22.04 + container: ${{ matrix.container }} + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest + name: test with Odoo + services: + postgres: + image: postgres:12.0 + env: + POSTGRES_USER: odoo + POSTGRES_PASSWORD: odoo + POSTGRES_DB: odoo + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Install addons and dependencies + run: oca_install_addons + - name: Check licenses + run: manifestoo -d . check-licenses + - name: Check development status + run: manifestoo -d . check-dev-status --default-dev-status=Beta + - name: Initialize test db + run: oca_init_test_database + - name: Run tests + run: oca_run_tests + - uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: success() || failure() # always run even if the previous step fails + with: + report_paths: 'test_results/*.xml' + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Smile + +Other credits +------------- + +- `Smile `__: + + - Martin Deconinck martin.deconinck@smile.fr + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/server-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo_test_xmlrunner/__init__.py b/odoo_test_xmlrunner/__init__.py new file mode 100644 index 00000000000..48ff93bf29f --- /dev/null +++ b/odoo_test_xmlrunner/__init__.py @@ -0,0 +1 @@ +from . import odoo_tests # F401 imported but unused diff --git a/odoo_test_xmlrunner/__manifest__.py b/odoo_test_xmlrunner/__manifest__.py new file mode 100644 index 00000000000..21e67c9a0e7 --- /dev/null +++ b/odoo_test_xmlrunner/__manifest__.py @@ -0,0 +1,19 @@ +{ + "name": "Unittest xUnit reports", + "version": "17.0.1.0.0", + "depends": ["base"], + "author": "Smile, Odoo Community Association (OCA)", + "license": "AGPL-3", + "summary": """ + This module override Odoo testing method to run them with xmlrunner tool. + """, + "website": "https://github.com/OCA/server-tools", + "category": "Tools", + "sequence": 20, + "auto_install": True, + "installable": True, + "application": False, + "external_dependencies": { + "python": ["unittest-xml-reporting"], + }, +} diff --git a/odoo_test_xmlrunner/odoo_tests/__init__.py b/odoo_test_xmlrunner/odoo_tests/__init__.py new file mode 100644 index 00000000000..4ad46195b0f --- /dev/null +++ b/odoo_test_xmlrunner/odoo_tests/__init__.py @@ -0,0 +1 @@ +from . import loader # F401 imported but unused diff --git a/odoo_test_xmlrunner/odoo_tests/loader.py b/odoo_test_xmlrunner/odoo_tests/loader.py new file mode 100644 index 00000000000..1e8ab4590d4 --- /dev/null +++ b/odoo_test_xmlrunner/odoo_tests/loader.py @@ -0,0 +1,33 @@ +import os +import threading + +import xmlrunner + +from odoo.tests import loader as odoo_loader +from odoo.tests.result import OdooTestResult +from odoo.tools import config + + +def new_run_suite(suite, module_name=None): + # Override : Get and create a config dir + test_result_directory = config.get("test_result_directory", "test_results") + # create test result directory if not exists + if not os.path.exists(test_result_directory): + os.makedirs(test_result_directory) + + # avoid dependency hell + from odoo.modules import module + + module.current_test = module_name + threading.current_thread().testing = True + results = OdooTestResult() + + # Override : XMLTestRunner to run the tests and generate XML reports + xmlrunner.XMLTestRunner(output=test_result_directory, verbosity=2).run(suite) + + threading.current_thread().testing = False + module.current_test = None + return results + + +odoo_loader.run_suite = new_run_suite diff --git a/odoo_test_xmlrunner/pyproject.toml b/odoo_test_xmlrunner/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/odoo_test_xmlrunner/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/odoo_test_xmlrunner/readme/CONFIGURATION.md b/odoo_test_xmlrunner/readme/CONFIGURATION.md new file mode 100644 index 00000000000..aa2c51f2d0a --- /dev/null +++ b/odoo_test_xmlrunner/readme/CONFIGURATION.md @@ -0,0 +1,2 @@ +Add to your odoo Configuration file: +- **test_result_directory** (default: *test_results*) : The path (created if not exists) where the reports will be written to. \ No newline at end of file diff --git a/odoo_test_xmlrunner/readme/CREDITS.md b/odoo_test_xmlrunner/readme/CREDITS.md new file mode 100644 index 00000000000..41c88d09352 --- /dev/null +++ b/odoo_test_xmlrunner/readme/CREDITS.md @@ -0,0 +1,2 @@ +* [Smile](https://smile.eu/fr): + * Martin Deconinck \ No newline at end of file diff --git a/odoo_test_xmlrunner/readme/DESCRIPTION.md b/odoo_test_xmlrunner/readme/DESCRIPTION.md new file mode 100644 index 00000000000..16d28d3c5f9 --- /dev/null +++ b/odoo_test_xmlrunner/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module generate unittest reports using unittest-xml-reporting tool. \ No newline at end of file diff --git a/odoo_test_xmlrunner/readme/INSTALL.md b/odoo_test_xmlrunner/readme/INSTALL.md new file mode 100644 index 00000000000..8079d04b1d7 --- /dev/null +++ b/odoo_test_xmlrunner/readme/INSTALL.md @@ -0,0 +1,3 @@ +Install python library https://pypi.org/project/unittest-xml-reporting/ + +The module is automatically installed on the Odoo instance. \ No newline at end of file diff --git a/odoo_test_xmlrunner/readme/USAGE.md b/odoo_test_xmlrunner/readme/USAGE.md new file mode 100644 index 00000000000..647f60df8fd --- /dev/null +++ b/odoo_test_xmlrunner/readme/USAGE.md @@ -0,0 +1,108 @@ + +## Run the native Odoo tests + +Run the native Odoo tests. See the [Odoo documentation](https://www.odoo.com/documentation/17.0/fr/developer/reference/backend/testing.html) for more information. + +### Gitlab CI usage example + +Add the following job to your `.gitlab-ci.yml` file: + +```yaml + +stages: + - test + +variables: + POSTGRES_DB: odoo + POSTGRES_USER: odoo + POSTGRES_PASSWORD: odoo + POSTGRES_HOST_AUTH_METHOD: trust + +test: + stage: test + image: + name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest + services: + - name: postgres:15 + tags: + - gitlab-org-docker + script: + # install odoo and run tests + - oca_install_addons && oca_init_test_database && oca_run_tests + # generate coverage report + - coverage html -d htmlcov && coverage xml -o coverage.xml + # read line-rate from coverage.xml and print it as percentage + - total=$(grep -oP ']*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%" + coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' + artifacts: + paths: + - htmlcov/* + when: always + reports: + junit: test_results/*.xml + coverage_report: + coverage_format: cobertura + path: coverage.xml +``` +### Github Actions usage example + +Add the following job to your `.github/workflows/main.yml` file: + +```yaml +name: tests + +permissions: + contents: read + checks: write + id-token: write + +on: + push: + branches: ["main"] + tags: ["*"] + pull_request: + +jobs: + test: + runs-on: ubuntu-22.04 + container: ${{ matrix.container }} + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest + name: test with Odoo + services: + postgres: + image: postgres:12.0 + env: + POSTGRES_USER: odoo + POSTGRES_PASSWORD: odoo + POSTGRES_DB: odoo + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Install addons and dependencies + run: oca_install_addons + - name: Check licenses + run: manifestoo -d . check-licenses + - name: Check development status + run: manifestoo -d . check-dev-status --default-dev-status=Beta + - name: Initialize test db + run: oca_init_test_database + - name: Run tests + run: oca_run_tests + - uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: success() || failure() # always run even if the previous step fails + with: + report_paths: 'test_results/*.xml' + +``` \ No newline at end of file diff --git a/odoo_test_xmlrunner/requirements.txt b/odoo_test_xmlrunner/requirements.txt new file mode 100644 index 00000000000..718199204e9 --- /dev/null +++ b/odoo_test_xmlrunner/requirements.txt @@ -0,0 +1 @@ +unittest-xml-reporting diff --git a/odoo_test_xmlrunner/static/description/index.html b/odoo_test_xmlrunner/static/description/index.html new file mode 100644 index 00000000000..e545c902885 --- /dev/null +++ b/odoo_test_xmlrunner/static/description/index.html @@ -0,0 +1,547 @@ + + + + + +Unittest xUnit reports + + + +
+

Unittest xUnit reports

+ + +

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

This module generate unittest reports using unittest-xml-reporting tool.

+

Table of contents

+ +
+

Installation

+

Install python library https://pypi.org/project/unittest-xml-reporting/

+

The module is automatically installed on the Odoo instance.

+
+
+

Usage

+
+

Run the native Odoo tests

+

Run the native Odoo tests. See the Odoo +documentation +for more information.

+
+

Gitlab CI usage example

+

Add the following job to your .gitlab-ci.yml file:

+
+stages:
+  - test
+
+variables:
+  POSTGRES_DB: odoo
+  POSTGRES_USER: odoo
+  POSTGRES_PASSWORD: odoo
+  POSTGRES_HOST_AUTH_METHOD: trust
+
+test:
+  stage: test
+  image:
+    name: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+  services:
+    - name: postgres:15
+  tags:
+    - gitlab-org-docker
+  script:
+    # install odoo and run tests
+    - oca_install_addons && oca_init_test_database && oca_run_tests
+    # generate coverage report
+    - coverage html -d htmlcov && coverage xml -o coverage.xml
+    # read line-rate from coverage.xml and print it as percentage
+    - total=$(grep -oP '<coverage[^>]*line-rate="\K[0-9.]+' coverage.xml | head -n 1 | awk '{print $1 * 100}') && echo "total ${total}%"
+  coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
+  artifacts:
+    paths:
+      - htmlcov/*
+    when: always
+    reports:
+      junit: test_results/*.xml
+      coverage_report:
+          coverage_format: cobertura
+          path: coverage.xml
+
+
+
+

Github Actions usage example

+

Add the following job to your .github/workflows/main.yml file:

+
+name: tests
+
+permissions:
+    contents: read
+    checks: write
+    id-token: write
+
+on:
+  push:
+    branches: ["main"]
+    tags: ["*"]
+  pull_request:
+
+jobs:
+  test:
+    runs-on: ubuntu-22.04
+    container: ${{ matrix.container }}
+    name: ${{ matrix.name }}
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - container: ghcr.io/oca/oca-ci/py3.10-odoo17.0:latest
+            name: test with Odoo
+    services:
+      postgres:
+        image: postgres:12.0
+        env:
+          POSTGRES_USER: odoo
+          POSTGRES_PASSWORD: odoo
+          POSTGRES_DB: odoo
+        ports:
+          - 5432:5432
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          persist-credentials: false
+      - name: Install addons and dependencies
+        run: oca_install_addons
+      - name: Check licenses
+        run: manifestoo -d . check-licenses
+      - name: Check development status
+        run: manifestoo -d . check-dev-status --default-dev-status=Beta
+      - name: Initialize test db
+        run: oca_init_test_database
+      - name: Run tests
+        run: oca_run_tests
+      - uses: codecov/codecov-action@v4
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+      - name: Publish Test Report
+        uses: mikepenz/action-junit-report@v4
+        if: success() || failure() # always run even if the previous step fails
+        with:
+          report_paths: 'test_results/*.xml'
+
+
+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Smile
  • +
+
+
+

Other credits

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/server-tools project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/requirements.txt b/requirements.txt index 09418114542..b0f289ab8de 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ mako odoorpc openupgradelib sentry_sdk<=1.9.0 +unittest-xml-reporting From d6e8149dad45eab5fabaf3a1b3b4780c108138ce Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 24 Jan 2025 17:17:10 +0100 Subject: [PATCH 2/3] [UPD] auto_install to False --- odoo_test_xmlrunner/README.rst | 2 +- odoo_test_xmlrunner/__manifest__.py | 1 - odoo_test_xmlrunner/readme/INSTALL.md | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/odoo_test_xmlrunner/README.rst b/odoo_test_xmlrunner/README.rst index c8d5c9881e5..761553d1548 100644 --- a/odoo_test_xmlrunner/README.rst +++ b/odoo_test_xmlrunner/README.rst @@ -40,7 +40,7 @@ Installation Install python library https://pypi.org/project/unittest-xml-reporting/ -The module is automatically installed on the Odoo instance. +Activate the module from module list. Usage ===== diff --git a/odoo_test_xmlrunner/__manifest__.py b/odoo_test_xmlrunner/__manifest__.py index 21e67c9a0e7..9ed90298eba 100644 --- a/odoo_test_xmlrunner/__manifest__.py +++ b/odoo_test_xmlrunner/__manifest__.py @@ -10,7 +10,6 @@ "website": "https://github.com/OCA/server-tools", "category": "Tools", "sequence": 20, - "auto_install": True, "installable": True, "application": False, "external_dependencies": { diff --git a/odoo_test_xmlrunner/readme/INSTALL.md b/odoo_test_xmlrunner/readme/INSTALL.md index 8079d04b1d7..d1adadad26e 100644 --- a/odoo_test_xmlrunner/readme/INSTALL.md +++ b/odoo_test_xmlrunner/readme/INSTALL.md @@ -1,3 +1,3 @@ Install python library https://pypi.org/project/unittest-xml-reporting/ -The module is automatically installed on the Odoo instance. \ No newline at end of file +Activate the module from module list. \ No newline at end of file From 4c34603cffe6889bbd777ce12ce98ef405c0c1ff Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 24 Jan 2025 17:17:26 +0100 Subject: [PATCH 3/3] [REM] useless requirements.txt file --- odoo_test_xmlrunner/requirements.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 odoo_test_xmlrunner/requirements.txt diff --git a/odoo_test_xmlrunner/requirements.txt b/odoo_test_xmlrunner/requirements.txt deleted file mode 100644 index 718199204e9..00000000000 --- a/odoo_test_xmlrunner/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -unittest-xml-reporting