Skip to main content

Make pytest-embedded plugin work with the Wokwi CLI.

Project description

pytest-embedded-wokwi

pytest-embedded service for running tests on Wokwi instead of the real target.

Wokwi supports most ESP32 targets, including: esp32, esp32s2, esp32s3, esp32c3, esp32c6, and esp32h2. In addition, it supports a wide range of peripherals, including sensors, displays, motors, and debugging tools.

Running the tests with Wokwi requires an internet connection. Your firmware is uploaded to the Wokwi server for the duration of the simulation, but it is not saved on the server. On-premises Wokwi installations are available for enterprise customers.

Wokwi API Tokens

Before using this plugin, you need to create a free Wokwi account and generate an API key. You can then set the WOKWI_CLI_TOKEN environment variable to the API key.

Linux / Mac OS / WSL:

export WOKWI_CLI_TOKEN="your-api-key"

Windows PowerShell:

$env:WOKWI_CLI_TOKEN="your-api-key"

Usage

To run your tests with Wokwi, make sure to specify the wokwi service when running pytest, e.g.:

pytest --embedded-services idf,wokwi

Writing Tests

When writing tests for your firmware, you can use the same pytest fixtures and assertions as you would for local testing. The main difference is that your tests will be executed in the Wokwi simulation environment and you have access to the Wokwi API for controlling the simulation through the wokwi fixture.

All interactions with the Wokwi simulation is through the wokwi.client - wokwi-python-client

For example, you can use wokwi.client.set_control() to control virtual components in the simulation, such as buttons, LEDs, and other peripherals. Whole documentations can be found at Wokwi Documentation

Button test:

import logging
from pytest_embedded_wokwi import Wokwi
from pytest_embedded import Dut


def test_gpio(dut: Dut, wokwi: Wokwi):
    LOGGER = logging.getLogger(__name__)

    LOGGER.info("Waiting for Button test begin...")
    dut.expect_exact("Butston test")

    for i in range(3):
        LOGGER.info(f"Setting button pressed for {i + 1} seconds")
        wokwi.client.set_control("btn1", "pressed", 1)

        dut.expect_exact(f"Button pressed {i + 1} times")
        wokwi.client.set_control("btn1", "pressed", 0)

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

pytest_embedded_wokwi-2.1.2.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

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

pytest_embedded_wokwi-2.1.2-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file pytest_embedded_wokwi-2.1.2.tar.gz.

File metadata

  • Download URL: pytest_embedded_wokwi-2.1.2.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for pytest_embedded_wokwi-2.1.2.tar.gz
Algorithm Hash digest
SHA256 fff93552cf9bd801943a1b769bd7d42850115b4412c41c3430e6d0ea52d0d82d
MD5 37337be85f10cc6a7b923a2b5d239737
BLAKE2b-256 25ba78f9d9071554cecd83e6b277fe1c5cd7d38ff11eae229c4f79406bd2e90b

See more details on using hashes here.

File details

Details for the file pytest_embedded_wokwi-2.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_embedded_wokwi-2.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 264a9a0d904f58c2fc3018afb96c80577bb623b2fb932d7151e91ac14bf8daf7
MD5 6d06921de3f00ff04d9d7b2efa99c136
BLAKE2b-256 a780eb08c69b6229b275a73faa6a46fc6c69f43fb1f784105747ea75cd3e2017

See more details on using hashes here.

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