Skip to main content

Pytest plugin to sync test with testomat.io

Project description

Support Ukraine Badge

testomat.io plugin for pytest

A powerful pytest plugin that integrates your tests with testomat.io platform for test management, reporting and analytics

Features

  • ✅ Sync tests with testomat.io
  • 📊 Real-time test execution reporting
  • 🏷️ Test labeling and categorization
  • 📁 Test run grouping and environments
  • 📎 Artifact management with S3 integration
  • 🔍 Advanced filtering and debugging

uses testomat.io API:

Table of Contents

Installation

Prerequisites:

  • Python 3.10+
  • Pytest 6.2.5+
  • Active testomat.io account

Install via pip:

pip install pytestomatio

Quick Start

Get your API token

  1. Login to testomat.io
  2. Create project or go to existing project
  3. Click on "Import Tests from Source Code"
  4. Copy your project token(starts with "tstmt_")

Sync tests

Synchronize tests to testomat.io:

TESTOMATIO=your_token pytest --testomatio sync

Report tests

Execute tests and send results to testomat.io:

TESTOMATIO=your_token pytest --testomatio report

Example of test

To make the experience more consistent, it uses standard pytest markers.
testomat.io test id is a string value that starts with @T and has 8 symbols after.

from pytest import mark


@mark.testomatio('@T96c700e6')
def test_example():
    assert 2 + 2 == 4

Advanced usage

Core commands

Synchronization

Synchronize tests to testomat.io and get back test id.

pytest --testomatio sync

Clarification:

  • tests will not be executed
  • tests can be synced even without @pytest.mark.testomatio('@T96c700e6') decorator.
  • test title in testomat.io == test name in pytest
  • test suit title in testomat.io == test file name in pytest

Clean up

Remove all test ids from source code. Tests will not be executed

pytest --testomatio remove

Report

Run pytest and send test results into testomat.io.
Test can be sent to testomat.io without ids in your test code. If testomat.io failed to match tests by title, it will create new tests for the run

pytest --testomatio report

Debug

Run pytest with debug parameter to get test data collected in metadata.json file

pytest --testomatio debug

Additional options

Submitting Test Run Environment

To configure test environment, you can use additional option testRunEnv. The configured environment will be added to the test report. Use it with report command:

pytest --testomatio report --testRunEnv "windows11,chrome,1920x1080"

Environment values are comma separated, please use double quotation.

Clearing empty test suites

To automatically clean empty test suites on testomat.io you can use no-empty option. Use it with sync command:

pytest --testomatio sync --no-empty

Disable detaching tests

If a test from a previous import was not found on next import it is marked as "detached". This is done to ensure that deleted tests are not staying in Testomatio while deleted in codebase. To disable this behaviour and don't mark anything as detached on import use no-detach option. Use it with sync command:

pytest --testomatio sync --no-detach

Keeping original file structure

By default, when importing tests, testomat.io does not preserve original file structure. Use option keep-structure with sync command to keep original file structure:

pytest --testomatio sync --keep-structure

Import into given directory

By default, tests are imported into the root of the project. You can use directory option to specify directory to use for test file structure. Use this option with sync command:

pytest --testomatio sync --directory imported_tests

Note: keep-structure option takes precedence over directory option. If both are used keep-structure will be used.

Filter tests by id

You can filter tests by testomat.io id, using test-id option. You pass single or multiple ids to this option. Use this option with report command:

pytest --testomatio report --test-id "Tc0880217|Tfd1c595c"

Note: Test id should be started from letter "T"

Configuration with environment variables

You can use environment variable to control certain features of testomat.io

Basic configuration

Env variable What it does Examples
TESTOMATIO Provides token for pytestomatio to access and push data to testomat.io. Required for sync and report commands TESTOMATIO=tstmt_***** pytest --testomatio sync
TESTOMATIO_SYNC_LABELS Assign labels to a test case when you synchronise test from code with testomat.io. Labels must exist in project and their scope must be enabled for tests TESTOMATIO_SYNC_LABELS="number:1,list:one,standalone" pytest --testomatio report
TESTOMATIO_CODE_STYLE Code parsing style for test synchronization. If you are not sure, don't set this variable. Default value is 'default' TESTOMATIO_CODE_STYLE=pep8 pytest --testomatio sync
TESTOMATIO_CI_DOWNSTREAM If set, pytestomatio will not set or update build url for a test run. This is useful in scenarios where build url is already set in the test run by Testomat.io for test runs that a created directly on Testomat.io. TESTOMATIO_CI_DOWNSTREAM=true pytest --testomatio report
TESTOMATIO_URL Customize testomat.io url TESTOMATIO_URL=https://custom.com/ pytest --testomatio report
BUILD_URL Overrides build url run tests BUILD_URL=http://custom.com/ pytest --testomatio report
TESTOMATIO_NO_TIMESTAMP Disable automatic timestamp generation for test results. Use this option if you run tests in parallel on different machines where time is not synchronized TESTOMATIO_NO_TIMESTAMP=True pytest --testomatio report

Test Run configuration

Env variable What it does Examples
TESTOMATIO_TITLE Name of a test run to create on testomat.io TESTOMATIO_TITLE="Nightly Smoke Tests" pytest --testomatio report
TESTOMATIO_RUN_ID Id of existing test run to use for sending test results to TESTOMATIO_RUN_ID=98dfas0 pytest --testomatio report
TESTOMATIO_RUNGROUP_TITLE Create a group (folder) for a test run. If group already exists, attach test run to it TESTOMATIO_RUNGROUP_TITLE="Release 2.0" pytest --testomatio report
TESTOMATIO_ENV Assign environment to a test run, env variant of testRunEnv option. Has a lower precedence than testRunEnv option. TESTOMATIO_ENV="linux,chrome,1920x1080" pytest --testomatio report
TESTOMATIO_LABEL Assign labels to a test run. Labels must exist in project and their scope must be enabled for runs TESTOMATIO_LABEL="smoke,regression" pytest --testomatio report

S3 Bucket configuration

Env variable Description
S3_REGION Your S3 region
S3_ACCESS_KEY_ID Your S3 access key ID
S3_SECRET_ACCESS_KEY Your S3 secret access key
S3_BUCKET Your S3 bucket name
S3_ENDPOINT Your S3 endpoint
S3_BUCKET_PATH Path to your bucket
TESTOMATIO_PRIVATE_ARTIFACTS Store artifacts in a bucket privately

pytest.ini

In case you are using private testomat.io service, create pytest.ini file in your project root directory. Specify testomat.io url in it

[pytest]
testomatio_url = https://app.testomat.io

Submitting Test Artifacts

testomat.io does not store any screenshots, logs or other artifacts.

In order to manage them it is advised to use S3 Buckets (GCP Storage). https://docs.testomat.io/usage/test-artifacts/

Analyser needs to be aware of the cloud storage credentials. There are two options:

  1. Enable Share credentials with testomat.io Reporter option in testomat.io Settings -> Artifacts.
  2. Use environment variables ACCESS_KEY_ID, SECRET_ACCESS_KEY, ENDPOINT, BUCKET, BUCKET_PATH, REGION

You would need to decide when you want to upload your test artifacts to cloud storage

  1. Upload page screenshot when test fails, using fixtures reference
# content of conftest.py
import pytest
import random
import os
from typing import Dict
from pytest import StashKey, CollectReport
from playwright.sync_api import Page

phase_report_key = StashKey[Dict[str, CollectReport]]()

@pytest.hookimpl(wrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    rep = yield
    item.stash.setdefault(phase_report_key, {})[rep.when] = rep
    return rep


@pytest.fixture(scope="function")
def handle_artifacts(page: Page, request):
    yield
    report = request.node.stash[phase_report_key]
    if ("call" not in report) or report["setup"].failed or report["call"].failed:
        random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=8))

        filename = f"{random_string}.png"
        screenshot_path = os.path.join(artifacts_dir, filename)
        page.screenshot(path=screenshot_path)
        # file_path - required, path to file to be uploaded
        # file_bytes - required, bytes of the file to be uploaded
        # key - required, file name in the s3 bucket
        # bucket_name - optional,name of the bucket to upload file to. Default value is taken from testomat.io
        artifact_url = pytest.testomatio.upload_file(screenshot_path, filename)
        # or
        # artifact_url = pytest.testomatio.upload_file_object(file_bytes, key, bucket_name)
        pytest.testomatio.add_artifacts(request.node, [artifact_url])
    page.close()

⚠️ Please take into account s3_connector available only after pytest_collection_modifyitems() hook is executed.

  1. If you prefer to use pytest hooks - add pytest_runtest_makereport hook in your conftest.py file.
def pytest_runtest_makereport(item, call):
    artifact_url = pytest.testomatio.upload_file(screenshot_path, filename)
    pytest.testomatio.add_artifacts([artifact_url])

Contributing

Use python 3.12

Manual testing

  • Run unit tests
  • import into empty project
  • updated test - (resync)
  • test run
  • test run into a folder
  • test run labels, tags
  1. pip install ".[dev]"
  2. python ./smoke.py
  3. Test things manually
  4. Verify no regression bugs
  5. cz commit --prerelease beta
  6. cz bump
  7. git push remoteName branchName --tags

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytestomatio-2.10.2b8.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytestomatio-2.10.2b8-py3-none-any.whl (27.0 kB view details)

Uploaded Python 3

File details

Details for the file pytestomatio-2.10.2b8.tar.gz.

File metadata

  • Download URL: pytestomatio-2.10.2b8.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytestomatio-2.10.2b8.tar.gz
Algorithm Hash digest
SHA256 710350a2859991f75f4a1e5fefc00054fee262e898abffe7a69329af2b68ba72
MD5 add5a656fe577305fbcf56a3c486184c
BLAKE2b-256 838f2b229260c389bbf20ac5c7e7683f62db512ff378c91e0d6e1ebc32337f1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytestomatio-2.10.2b8.tar.gz:

Publisher: main.yml on testomatio/pytestomatio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytestomatio-2.10.2b8-py3-none-any.whl.

File metadata

File hashes

Hashes for pytestomatio-2.10.2b8-py3-none-any.whl
Algorithm Hash digest
SHA256 a482226edf566f7ebdf5156b64fc02df936d312e87ddf577d364082adf7688ab
MD5 026a7af8715805010801b83f18890829
BLAKE2b-256 a65e84188df4f622b42edbc9dbcfba8d14aeb3ae91f6e1dce885b70a0efe8095

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytestomatio-2.10.2b8-py3-none-any.whl:

Publisher: main.yml on testomatio/pytestomatio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page