Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 205 additions & 0 deletions odoo_test_xmlrunner/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
======================
Unittest xUnit reports
======================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:dc5901a41067fac6a375c2ba99ceaf485afc9273c2248b73255cc1b99e6fddcf
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |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/18.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-18-0/server-tools-18-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=18.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 <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:

.. 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 '<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:

.. 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 <https://github.com/OCA/server-tools/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 <https://github.com/OCA/server-tools/issues/new?body=module:%20odoo_test_xmlrunner%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
-------

* Smile

Other credits
-------------

- `Smile <https://smile.eu/fr>`__:

- Martin Deconinck [email protected]

- `Akretion <https://akretion.com>`__:

- Florian Mounier [email protected]

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 <https://github.com/OCA/server-tools/tree/18.0/odoo_test_xmlrunner>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions odoo_test_xmlrunner/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import odoo_tests # F401 imported but unused
18 changes: 18 additions & 0 deletions odoo_test_xmlrunner/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "Unittest xUnit reports",
"version": "18.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,
"installable": True,
"application": False,
"external_dependencies": {
"python": ["unittest-xml-reporting"],
},
}
14 changes: 14 additions & 0 deletions odoo_test_xmlrunner/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
13 changes: 13 additions & 0 deletions odoo_test_xmlrunner/i18n/odoo_test_xmlrunner.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
1 change: 1 addition & 0 deletions odoo_test_xmlrunner/odoo_tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import loader # F401 imported but unused
51 changes: 51 additions & 0 deletions odoo_test_xmlrunner/odoo_tests/loader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import os

from odoo.tools import config

if config["test_enable"]:
from xmlrunner import XMLTestRunner
from xmlrunner.result import _XMLTestResult

from odoo.tests.result import OdooTestResult
from odoo.tests.suite import OdooSuite

unpatched_run = OdooSuite.run

def run(self, result):
# 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)

# Suite run method will be called by the XMLTestRunner,
# so we need to run the original run method
unpatched_sub_run = self.run
self.run = lambda result, debug=False: unpatched_run(self, result, debug)
# Override : XMLTestRunner to run the tests and generate XML reports
try:
results = XMLTestRunner(
output=test_result_directory,
verbosity=2,
).run(self)
finally:
self.run = unpatched_sub_run

result.update(results)
return result

OdooSuite.run = run

unpatched_update = OdooTestResult.update

def update(self, other):
# Adapt _XMLTestResult to OdooTestResult
if isinstance(other, _XMLTestResult):
self.failures_count += len(other.failures)
self.errors_count += len(other.errors)
self.skipped += len(other.skipped)
self.testsRun += other.testsRun
else:
unpatched_update(self, other)

OdooTestResult.update = update
3 changes: 3 additions & 0 deletions odoo_test_xmlrunner/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
2 changes: 2 additions & 0 deletions odoo_test_xmlrunner/readme/CONFIGURATION.md
Original file line number Diff line number Diff line change
@@ -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.
4 changes: 4 additions & 0 deletions odoo_test_xmlrunner/readme/CREDITS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- [Smile](https://smile.eu/fr):
- Martin Deconinck <[email protected]>
- [Akretion](https://akretion.com):
- Florian Mounier <[email protected]>
1 change: 1 addition & 0 deletions odoo_test_xmlrunner/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module generate unittest reports using unittest-xml-reporting tool.
3 changes: 3 additions & 0 deletions odoo_test_xmlrunner/readme/INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Install python library https://pypi.org/project/unittest-xml-reporting/

The module is automatically installed on the Odoo instance.
Loading