PyTestLog2DB 0.3.4
Imports pytest result(s) to TestResultWebApp database
Requires Python: >=3.0

PyTestLog2DB
============

Table of Contents
-----------------

-   [Getting Started](#getting-started)
    -   [How to install](#how-to-install)
-   [Usage](#usage)
-   [Example](#example)
-   [Contribution](#contribution)
-   [Sourcecode Documentation](#sourcecode-documentation)
-   [Feedback](#feedback)
-   [About](#about)
    -   [Maintainers](#maintainers)
    -   [Contributors](#contributors)
    -   [License](#license)

Getting Started
---------------

**PyTestLog2DB** is a command-line tool that enables you to import
[pytest](https://docs.pytest.org) XML result files into
[TestResultWebApp](https://github.com/test-fullautomation/TestResultWebApp)\'s
database for presenting an overview about the whole test execution and
detail of each test result.

**PyTestLog2DB** tool is operating system independent and only works
with Python 3.

### How to install

**PyTestLog2DB** can be installed in two different ways.

1.  Installation via PyPi (recommended for users)

    ``` {.}
    pip install PyTestLog2DB
    ```

    [PyTestLog2DB in PyPi](https://pypi.org/project/PyTestLog2DB/)

2.  Installation via GitHub (recommended for developers)

    -   Clone the **python-pytestlog2db** repository to your machine.

        ``` {.}
        git clone https://github.com/test-fullautomation/python-pytestlog2db.git
        ```

        [PyTestLog2DB in
        GitHub](https://github.com/test-fullautomation/python-pytestlog2db)

    -   Install dependencies

        **PyTestLog2DB** requires some additional Python libraries.
        Before you install the cloned repository sources you have to
        install the dependencies manually. The names of all related
        packages you can find in the file `requirements.txt` in the
        repository root folder. Use pip to install them:

        ``` {.}
        pip install -r ./requirements.txt
        ```

        Additionally install **LaTeX** (recommended: TeX Live). This is
        used to render the documentation.

    -   Configure dependencies

        The installation of **PyTestLog2DB** includes to generate the
        documentation in PDF format. This is done by an application
        called **GenPackageDoc**, that is part of the installation
        dependencies (see `requirements.txt`).

        **GenPackageDoc** uses **LaTeX** to generate the documentation
        in PDF format. Therefore **GenPackageDoc** needs to know where
        to find **LaTeX**. This is defined in the **GenPackageDoc**
        configuration file

        ``` {.}
        packagedoc\packagedoc_config.json
        ```

        Before you start the installation you have to introduce the
        following environment variable, that is used in
        `packagedoc_config.json`:

        -   `GENDOC_LATEXPATH` : path to `pdflatex` executable

    -   Use the following command to install **PyTestLog2DB**:

        ``` {.}
        python setup.py install
        ```

After succesful installation, the executable file **PyTestLog2DB** will
be available (under *Scripts* folder of Python on Windows and
*\~/.local/bin/* folder on Linux).

In case above location is added to **PATH** environment variable then
you can run it directly as operation system\'s command.

Usage
-----

**PyTestLog2DB** requires the [pytest](https://docs.pytest.org) result
file(s) which contains the test result in *JUnit XML* format and
[TestResultWebApp](https://github.com/test-fullautomation/TestResultWebApp)\'s
database information for importing.

Use below command to get tools\'s usage

    PyTestLog2DB -h

The usage should be showed as below:

    usage: PyTestLog2DB (PyTestXMLReport to TestResultWebApp importer) [-h] [-v] [--recursive] [--dryrun] [--append] [--UUID UUID] [--variant VARIANT] [--versions VERSIONS] [--config CONFIG]
                                                                       resultxmlfile server user password database

    PyTestLog2DB imports pytest JUnit XML report file(s)generated by pytest into a WebApp database.

    positional arguments:
    resultxmlfile        absolute or relative path to the pytest JUnit XML report file or directory of report files to be imported.
    server               server which hosts the database (IP or URL).
    user                 user for database login.
    password             password for database login.
    database             database schema for database login.

    optional arguments:
    -h, --help           show this help message and exit
    -v, --version        version of the PyTestLog2DB importer.
    --recursive          if set, then the path is searched recursively for output files to be imported.
    --dryrun             if set, then verify all input arguments (includes DB connection) and show what would be done.
    --append             is used in combination with --UUID <UUID>. If set, allow to append new result(s) to existing execution result UUID in --UUID argument.
    --UUID UUID          UUID used to identify the import and version ID on webapp. If not provided PyTestLog2DB will generate an UUID for the whole import.
    --variant VARIANT    variant name to be set for this import.
    --versions VERSIONS  metadata: Versions (Software;Hardware;Test) to be set for this import (semicolon separated).
    --config CONFIG      configuration json file for component mapping information.
    --interface {db,rest}
                         database access interface.
    --testrunurl TESTRUNURL
                         link to test execution job: Jenkins job, Gitlab CI/CD pipeline, ...

The below command is simple usage with all required arguments to import
[pytest](https://docs.pytest.org) results into TestResultWebApp\'s
database:

    PyTestLog2DB <resultxmlfile> <server> <user> <password> <database>

Besides the executable file, you can also run tool as a Python module

    python -m PyTestLog2DB <resultxmlfile> <server> <user> <password> <database>

Example
-------

In order the import the robot result(s) to TestResultWebApp\'s database,
we need the [pytest](https://docs.pytest.org) result file in *JUnit XML*
format.

So, firstly execute the [pytest](https://docs.pytest.org) testcase(s) to
get the result file(s). But the **\*.xml** result file is not generated
by default.

We need to specify the argument *\--junit-xml=\<path\>* when executing
[pytest](https://docs.pytest.org) to get the generated *JUnit XML*
report file at given path.

E.g: :

    pytest --junit-xml=path/to/result.xml pytest/folder

After that, the **\*.xml** result file will be available at
**path/to/result.xml** and can be used for importing to
[TestResultWebApp](https://github.com/test-fullautomation/TestResultWebApp)
with command:

    PyTestLog2DB path/to/result.xml localhost test_user test_pw test_db

Then, open TestResultWebApp with your favourite browser and you will see
how wonderful the execution result is displayed as below figures:

Dashboard view:

![Dashboard view](https://github.com/test-fullautomation/python-pytestlog2db/blob/develop/packagedoc/additional_docs/pictures/Dashboard.png?raw=true)

Datatable view:

![Datatable view](https://github.com/test-fullautomation/python-pytestlog2db/blob/develop/packagedoc/additional_docs/pictures/Datatable.png?raw=true)

### Notes:

> The **\*.xml** report file generated by pytest contains only the
> testcase result(s) and less metadata information about the test
> execution such as *project/variant*, *software version*, *tester* ,
> *component*, \... which are required by
> [TestResultWebApp](https://github.com/test-fullautomation/TestResultWebApp).
>
> So that, **PyTestLog2DB** will handle those information with the
> default values.
>
> But you can use the optional argument *\--config CONFIG* to specify
> those information when importing to
> [TestResultWebApp](https://github.com/test-fullautomation/TestResultWebApp)\'s
> database.
>
> Sample configuration file:
>
>     {
>        "variant"   : "MyProject",
>        "version_sw": "0.1.1",
>        "components": {
>           "Testsuite1"       : "test-data.test_tsclass.TestSuite1",
>           "Testsuite2"       : "test-data.test_tsclass.TestSuite2",
>           "Others"          : [
>              "test-data.test_ts1",
>              "test-data.test_ts2"
>           ]
>        },
>        "tester"    : "Tran Duy Ngoan"
>     }
>
> Please refer [PyTestLog2DB tool's
> Documentation](https://github.com/test-fullautomation/python-pytestlog2db/blob/develop/PyTestLog2DB/PyTestLog2DB.pdf)
> for more detail about default values and the configuration json file.

Contribution
------------

We are always searching support and you are cordially invited to help to
improve **PyTestLog2DB** tool.

Sourcecode Documentation
------------------------

To understand more detail about the tool\'s features, parameters and how
pytest result(s) will be displayed on TestResultWebApp, please refer to
[PyTestLog2DB tool's
Documentation](https://github.com/test-fullautomation/python-pytestlog2db/blob/develop/PyTestLog2DB/PyTestLog2DB.pdf).

Feedback
--------

Please feel free to give any feedback to us via

Email to: [Thomas Pollerspöck](mailto:Thomas.Pollerspoeck@de.bosch.com)

Issue tracking: [PyTestLog2DB
Issues](https://github.com/test-fullautomation/python-pytestlog2db/issues)

About
-----

### Maintainers

[Thomas Pollerspöck](mailto:Thomas.Pollerspoeck@de.bosch.com)

[Holger Queckenstedt](mailto:Holger.Queckenstedt@de.bosch.com)

[Tran Duy Ngoan](mailto:Ngoan.TranDuy@vn.bosch.com)

### Contributors

[Nguyen Huynh Tri Cuong](mailto:Cuong.NguyenHuynhTri@vn.bosch.com)

[Mai Dinh Nam Son](mailto:Son.MaiDinhNam@vn.bosch.com)

[Tran Hoang Nguyen](mailto:Nguyen.TranHoang@vn.bosch.com)

### License

Copyright 2020-2023 Robert Bosch GmbH

Licensed under the Apache License, Version 2.0 (the \"License\"); you
may not use this file except in compliance with the License. You may
obtain a copy of the License at

> [![License: Apache
> v2](https://img.shields.io/pypi/l/robotframework.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an \"AS IS\" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.