Custom Test Runner
Setting the test_framework option to the custom
will instruct PlatformIO to look for a test_custom_runner.py
file located in the current (running) test folder. If the file is
not found, PlatformIO will check the parent folders
in a tree until reaches the test_dir.
If you plan to use a custom test framework for ALL tests, please
put the test_custom_runner.py
file at the root of
test_dir. Otherwise, use
Test Hierarchy and put it to the test folder
or to the group of tests that depend on it.
The test_custom_runner.py
is a Python-based script. It must
contain the CustomTestRunner
class. See a base example of test_custom_runner.py
:
from platformio.public import TestRunnerBase
class CustomTestRunner(TestRunnerBase):
pass
In case you want to override the functionality of the existing testing framework, you have to inherit its class. For example, let’s override a “testing” stage for the Unity:
from platformio.public import TestCase, TestCaseSource, TestStatus, UnityTestRunner
class CustomTestRunner(UnityTestRunner):
def stage_testing(self):
# 1. Gather test results from Serial, HTTP, Socket, or other sources
# 2. Report test results (add cases)
# Exmaple: Report succeed result with duration (optional)
self.test_suite.add_case(
TestCase(name="test_connectivity", status=TestStatus.PASSED, duration=1.34)
)
# Example: Report failed result with source file
self.test_suite.add_case(
TestCase(
name="test_calculator_division",
status=TestStatus.FAILED,
message="Expected 32 Was 33",
stdout="test/test_desktop/test_calculator.cpp:43:test_calculator_division:FAIL: Expected 32 Was 33",
duration=0.44,
source=TestCaseSource(
filename="test/test_desktop/test_calculator.cpp", line=43
),
)
)
See more custom test runner Examples.