CHANGELOGο
v2.1.0 (2025-09-25)ο
β¨ New Featuresο
add support for efuse in qemu (horw - e682c45)
add support for virtual efuse on NuttX (Filipe Cavalcanti - 5e946a0)
v2.0.0 (2025-09-23)ο
π§ Code Refactoringο
always use multiprocess spawn (Fu Hanxi - 387b877)
ποΈ Changesο
rename esptool underscore arguments and subcommands to dash (Fu Hanxi - b2b88d0)
Breaking Changesο
Python Support: Drop support for Python 3.7, 3.8, 3.9. Now requires Python 3.10+
esptool: Update esptool requirement to >=5.1.dev1,<6 (from ~=4.9)
wokwi: Remove support for
WokwiCLI
class, which is a wrapper ofwokwi-cli
executable. UseWokwi
class instead, which depends onwokwi-python-client
, supporting a wide range of peripherals.Deprecated Code Removal:
Remove
EsptoolArgs
class frompytest-embedded-serial-esp
Remove deprecated parameters
hard_reset_after
andno_stub
fromuse_esptool()
decoratorRemove deprecated
stub
property fromEspSerial
class (useesp
instead)Remove deprecated
parse_test_menu()
andparse_unity_menu_from_str()
methods fromIdfUnityDutMixin
(usetest_menu
property instead)Remove deprecated CLI option
--add-target-as-marker
(use--add-target-as-marker-with-amount
instead)
Migration Guideο
Python Version: Upgrade to Python 3.10 or higher
esptool: Update esptool to version 5.1.dev1 or higher (but less than 6.0)
Code Changes:
Replace
dut.stub
withdut.esp
Replace
dut.parse_test_menu()
calls withdut.test_menu
property accessReplace
parse_unity_menu_from_str()
with_parse_unity_menu_from_str()
if needed.dut.test_menu
is preferred.Update CLI usage from
--add-target-as-marker
to--add-target-as-marker-with-amount
Remove any usage of
EsptoolArgs
classRemove
hard_reset_after
andno_stub
parameters fromuse_esptool()
calls
v1.17.0 (2025-09-08)ο
Fixο
qemu: set
qemu_proj_path
forQemuApp
correctly
Featο
add
--port-by-serial
option to filter ports by serial number
v1.16.2 (2025-06-19)ο
Fixο
synced cache file by adding support for filelock
v1.16.1 (2025-04-22)ο
Fixο
typing.Literal not working in python 3.7
nuttx: use baudrate from EspSerial in EspNuttx
nuttx:flash mode exception on Nuttx
v1.16.0 (2025-03-13)ο
Featο
idf: Support selecting targets by soc caps in
idf_parametrize
v1.15.1 (2025-03-03)ο
Fixο
qemu: limit RISCV flash image sizes to 2, 4, 8, 16MB
v1.15.0 (2025-02-20)ο
Featο
idf: support pass
--supported_targets
andpreview_targets
as CLI argsidf: support customisation for supported_targets and preview_targets by contextvar
v1.14.0 (2025-02-11)ο
Featο
support marker helper function
idf_parametrize
v1.13.2 (2025-02-06)ο
Fixο
app_path havenβt recorded in python cases
v1.13.1 (2025-01-29)ο
Featο
record
app_path
in junit reportssupport
return_what_before_match
in expect functions
Fixο
improve listener performance, remove timeout in listener
v1.13.0 (2025-01-21) (yanked)ο
Featο
support βadd-target-as-marker-with-amount
added skip_if_soc marker for idf target
Fixο
dut-factory: Add a short delay in _listen() loop to prevent data missing
v1.12.1 (2024-12-02)ο
Featο
unity: add flag to preserve Python test cases and βis_unity_caseβ attribute
Fixο
nuttx: optional dependency for qemu
unity: remove [dut-X] prefix from βlineβ and βfileβ attribute values in XML report
v1.12.0 (2024-11-14)ο
Featο
wokwi: Use new boards for ESP32-P4
nuttx: Support new service
nuttx
v1.11.8 (2024-10-29)ο
Fixο
wokwi: Use merged bin to ensure partition and bootloader flashing
v1.11.7 (2024-10-25)ο
Fixο
jtag: bypass telnet sysaudit on python 3.7
v1.11.6 (2024-10-18)ο
Featο
arduino: Support ESP32-P4
Fixο
add more supported targets into App.RISCV32_TARGETS
qemu: get default toolchain path correctly based on target
serial: close serial port when exception happens
Refactorο
jtag: remove deprecate warning from telnetlib.py by pulling telnetlib.py from python v3.12.6
v1.11.5 (2024-08-19)ο
Fixο
wokwi: pexpect.spawn not working on windows. use subprocess instead
v1.11.4 (2024-08-16)ο
Fixο
jtag: flush previous gdb responses before the first gdb command
v1.11.3 (2024-08-09)ο
Revertο
v1.11.2
v1.11.2 (2024-08-09) (yanked)ο
Fixο
jtag: gdb write βremotetimeoutβ stop waiting for response
v1.11.1 (2024-08-07)ο
Fixο
jtag: set gdb remote timeout to 10s by default
v1.11.0 (2024-07-31)ο
Featο
wokwi: Add support for specifying diagram path
esp: support flash with a different port
v1.10.3 (2024-05-23)ο
Featο
dry run single board unity test
flexible choices for run_all_single_board_cases
Fixο
improve error message when CLI argument is wrong
v1.10.2 (2024-04-30)ο
Featο
esp: support add target as marker (β|β will be escaped to β-β)
Fixο
wokwi: error when bin,elf file not under app_path
v1.10.1 (2024-04-30)ο
Fixο
arduino: stop require optional dependency βespβ
qemu: stop require optional dependency βidfβ
v1.10.0 (2024-04-29)ο
Featο
wokwi: Add scenario path parameter
Refactorο
pytest8.2: stash session_tempdir in a cleaner way
py3.12: use datetime.now(timezone.utc) instead of utcnow()
py3.12: use shutil.copytree instead of distutils
v1.9.1 (2024-04-26)ο
Fixο
remove required optional dependencies βidfβ
v1.9.0 (2024-04-25) (yanked)ο
Featο
wokwi: Support Arduino
Add
DutFactory
to create dut object inside the test functions
Fixο
multiprocessing with context instead of set_start_method globally on macos
v1.8.4 (2024-04-23)ο
Fixο
non-standard default baud rate
v1.8.3 (2024-04-09)ο
Fixο
change baud when flash
v1.8.2 (2024-04-02)ο
Featο
idf: support
flash
other IdfApp object
Fixο
unity: change json files related log level from info to debug
deprecate
use_esptool
args correctlywrong app.binary_path if app_path is different with cwd
v1.8.1 (2024-03-01)ο
Fixο
idf: check sdkconfig items while
erase_flash
v1.8.0 (2024-02-23)ο
Featο
support βesp-flash-force to run esptool.flash with the force flag
Refactorο
call esptool.main() instead of implementing on our own
v1.7.0 (2024-02-14)ο
Featο
wokwi: support for specifying simulation timeout
support expect with
not_matching
keyword
v1.6.4 (2024-01-22)ο
Fixο
unity: avoid missing attr
message
infailure
nodes
v1.6.3 (2024-01-18)ο
Fixο
wokwi: run in interactive mode
v1.6.2 (2024-01-15)ο
Featο
wokwi: preliminary esp32p4 support
Fixο
use socket bind to get allowed port
v1.6.1 (2024-01-04)ο
Fixο
qemu: fix qmp client missing event loop in main thread
v1.6.0 (2024-01-02)ο
Featο
Support qemu qmp
Fixο
idf: make LinuxDut inherit from IdfUnityDutMixin
unity: remove extra time sleep inside multi-stage tests
v1.5.0 (2023-12-29)ο
Featο
use gdb_panic_server from esp_idf_panic_decoder instead static $IDF_PATH/tools/gdb_panic_server.py
Fixο
unity: make single board test procedure more robust
v1.4.2 (2023-12-04)ο
Featο
unity: Support data transfer with signal in multi-dut unity test cases
Fixο
added interrupt if one of the test was failed
remove testcase name postfix
v1.4.1 (2023-11-27)ο
Refactorο
change threads to generator functions
change logic of threading control in CaseTester for MultiDev
v1.4.0 (2023-11-07)ο
Featο
wokwi: Support wokwi
Fixο
clear all references for the message queue
v1.3.5 (2023-09-13)ο
Featο
Support hard_reset without stub
add local cache for port-target-cache between session
v1.3.4 (2023-07-10)ο
Fixο
arduino: separated flash settings for each target
v1.3.3 (2023-07-05)ο
arduino: Support target esp32h2 and esp32c6
v1.3.2 (2023-06-14)ο
Fixο
qemu: qemu-system-xtensa < 8.0.0 only support 4MB flash size
qemu: calculate flash image size when βflash_sizeβ not available
qemu: qemu flash image generated by esptool, support windows as well
v1.3.1 (2023-06-06)ο
Fixο
unity: stop sleep 1 second in subcases
confirm_write with pattern or string
v1.3.0 (2023-05-31) (yanked)ο
Featο
idf:
IdfApp
add new propertyis_xtensa
,is_riscv32
idf: add
confirm_write
method to make sure the write happensidf: add
run_single_board_case
functionidf: expose pytest_embedded_idf.UnittestMenuCase
qemu: support flash encryption workflow
qemu: support riscv32 targets, remove target restriction
Fixο
qemu: Add more idf non-target related functions when enabling service
idf
v1.2.5 (2023-04-11)ο
Featο
add log in system-out of the junit report
Fixο
idf: lazy import optional dependencies
idf: skip decode panic output when no elf file
v1.2.4 (2023-03-10)ο
Featο
idf: support loadable app with bin file
Fixο
illegal xml chars for all types of test cases
remove 1.1 added unused argument
start_time
Refactorο
improve logging and use βshell=Falseβ in
DuplicateStdoutPopen
refine errors and warnings
v1.2.3 (2023-02-06)ο
Fixο
illegal xml chars
serial: support rfc2217 connections
v1.2.2 (2023-01-29)ο
Fixο
teardown skipped when setting up period failed for multi-dut
leaking file descriptors
v1.2.1 (2023-01-05)ο
Fixο
idf:
LinuxDut.write
failed sinceserial
isNone
v1.2.0 (2022-12-29)ο
Featο
idf: support running tests on linux targets
Fixο
ImportError when install
pytest_embedded
only
v1.1.1 (2022-12-08)ο
Fixο
idf: load_ram could use
flash_project_args
file as well
v1.1.0 (2022-12-05)ο
Featο
add ββcheck-duplicatesβ cli option to check if there were duplicated test case names or test script names.
idf: add
run_all_single_board_cases()
toIdfDut
. This function would record duration time for each unity test case even itβs unfinished.idf: add fixture
unity_tester
to test multi device unity test cases (beta)jtag: add cli option
--no-gdb
to stop create gdb instance automatically
Fixο
idf: erase_all when hit the port-app cache cause no binary got flashed
idf: set correct toolchain prefix for RISC-V targets
jtag: initialize openocd/gdb processes earlier than app/serial
v1.0.2 (2022-11-07)ο
Fixο
jtag: stop redirecting openocd output to pexpect process
esp: drop port-app cache when
erase_flash
esp: erase flash before
flash
when set--erase-all
Refactorο
rewrite set/drop/hit cache code
v1.0.1 (2022-10-28)ο
Featο
support set file extension of the log file
Fixο
_meta.logdir
should be thetest_case_tempdir
, change to function-scoperemove unused cli option ββreorder-by-app-pathβ
v1.0.0 (2022-10-20)ο
Featο
add fixture
msg_queue
add fixture
session_root_logdir
and cli option--root-logdir
add fixture
dut_index
anddut_total
add fixture
port_target_cache
,port_app_cache
simplify import path by adding more object to
__all__
improve logging in
DuplicateStdoutPopen
instanceslive_print_call
could accept kwargsmsg_queue
andexpect_returncode
idf: Support panic handler output for RISC-V targets
serial: support bind ports by USB device location
esp:
EspSerial.use_esptool
could accept kwargshard_reset_after
andno_stub
esp: add
EsptoolArgs
esp: support bind ports by
esptool
read_mac
esp: support loadable elf
jtag: support flash via JTAG
jtag: support loadable elf
Fixο
remove
autouse=True
for fixturesession_tempdir
add micro second digits to
session_tempdir
make DuplicateStdoutPopen logs under
session_tmpdir
multi-dut \r\n messed-up the log
idf: use empty list or dict for default values
Refactorο
use multiprocessing.Process with Queue. Only
serial
instance redirect withthreading.Thread
instance.
Breaking Changesο
DuplicateStdoutPopen
and all subclassesremove
create_forward_io_thread()
, the redirect process would be auto-createdrename
send()
towrite()
in order to keep the consistency with other classes
remove
DuplicateStdout
. Now you may usecontextlib.redirect_stdout(msg_queue)
insteadremove
DuplicateStdoutMixin
esp: Support
esptool>4.0
onlyjtag: remove
JtagDut
. useSerialDut
or its subclasses instead
v0.8.2 (2022-08-23)ο
Fixο
esp: UnboundLocalError when specify beta_target and port together
v0.8.1 (2022-08-22)ο
Fixο
parse error when unity test case name with colon
v0.8.0 (2022-08-22)ο
Featο
esp: support
beta_target
Fixο
idf: parse_unity_menu subcases index to int
v0.7.10 (2022-08-04)ο
Fixο
multi dut with single junit report
v0.7.9 (2022-08-02)ο
Fixο
merge junit report error when multi-dut
v0.7.8 (2022-07-28)ο
Fixο
remove asci color code in expect failed exception
Featο
idf: add function to parse the case lists from unit test menu
v0.7.7 (2022-07-26)ο
Fixο
wrong xml detected when
_session_tempdir
stash is not initializedissue when fixture value is not str
v0.7.6 (2022-07-25)ο
Fixο
raise exception only if dut
isinstance
Dut
with failure casesrecord session_tempdir into
config.stash
Featο
esp: add fixture
esptool_baud
serial: move fixture
baud
to serviceserial
v0.7.5 (2022-07-11)ο
Fixο
cli option ββerase-flashβ conflict with function
erase_flash()
v0.7.4 (2022-07-11)ο
Fixο
idf: use fixed major version instead of major.minor for esp-coredump
serial: port occupied before init finished
Featο
esp: Add
--erase-flash
option to erase the flash before programming
v0.7.3 (2022-06-06)ο
Fixο
esp: fix esptool import
v0.7.2 (2022-06-01)ο
Fixο
esp: loose esptool version dependency. remove the upper limit
v0.7.1 (2022-05-25)ο
Featο
idf: add cli option ββskip-check-coredumpβ
Fixο
idf: make elf file detection optional
v0.7.0 (2022-05-09)ο
Featο
idf: added erase_flash and erase_partition functionality
Fixο
idf: KeyError when not enabled coredump related configs
v0.7.0rc3 (2022-05-07)ο
Fixο
esp: remove cryptography version limit
v0.7.0rc2 (2022-05-07)ο
Fixο
improve debug string
idf: non-iterable error when flash with encrypted mode
v0.7.0rc1 (2022-04-25)ο
Featο
add method
parse_multi_dut_args
Breaking Changesο
rename
apply_count_generator
tomulti_dut_generator_fixture
rename
apply_count
tomulti_dut_fixture
rename
parse_configuration
tomulti_dut_argument
v0.7.0rc0 (2022-04-15)ο
Featο
support 3.7+ python
idf: add cli option ββerase-nvsβ
idf: parse coredump when teardown dut
idf: use flasher_args.json to flash files. Require less files
serial: add stop_redirect_thread method and disable_redirect_thread context manager
Fixο
esp: fix requirements for rpi
serial: use other serial type as well
v0.6.2 (2022-03-18)ο
Fixο
esp: stubbed loader can never read serial because of redirect_io_thread
Featο
add
expect_all
keyword forexpect
andexpect_exact
functions
v0.6.1 (2022-03-18)ο
Fixο
esp: esptool wrong boot mode issue
esp: sort ports before auto detect port target
v0.6.0 (2022-03-08)ο
v0.6.0rc1 (2022-03-04)ο
Fixο
apply_count
for non-iterable items
Featο
esp: add
hard_reset
method
v0.6.0rc0 (2022-02-22)ο
Fixο
jtag: -gdb-set could pass multiple args
log: flush to sys.stdout instantly
log: multi-dut now would print source prefix
unity case name now could include spaces
would raise correctly when
expect
a list pattern failed
Featο
esp: add use_esptool decorator to auto connect before and hard reset after
esp: cache port and target
idf: add βconfirm-target-elf-sha256 cli option
idf: add
dump_flash
method inIdfSerial
idf: add attr
bin_file
in IdfAppidf: add flashed elf related methods in
IdfSerial
idf: add IdfDut class
idf: cache port and app
cache port/target, port/app_path_build_dir if possible. use pytest 7.0 feature stash
extract the binary_path to the
App
classlog the log folders while setup for test case
the logging.error would turn to be derived error
use pytest>=7.0
v0.5.1 (2022-01-21)ο
Fixο
serial: write to pexpect process until β\nβ
v0.5.0 (2022-01-21)ο
Featο
unity: fail at the end if unity test case failed, try run more tests
unity: set expect_unity_test_output timeout to 60s
v0.5.0rc1 (2022-01-18)ο
Featο
qemu: default image path move to
APP_PATH/BUILD_DIR/IMAGE_NAME
add
Dut.expect_unity_test_output
methodadd fixture
test_case_tempdir
make import pytest-embedded easier
show log file location when expect functions failed
show pexpect process full log file location when expect function failed
Fixο
jtag: use real file logging instead of pipe
qemu:
dut.write
to qemu process correctlyqemu: re-generate qemu image. add cli option ββskip-regenerate_imageβ
serial:
dut.write()
could acceptstr
data, auto add\n
endingensure use default value set in class if not specified in cli or param
raise idf app not parsable error if binary path not parsable
Breaking Changesο
log: thread-safe print instead of logging.info
remove
expect_list
v0.5.0rc0 (2022-01-06)ο
Featο
arduino: Add Arduino service
esp: simplify esptool call process
esp: use env var
ESPPORT
for ββportβ andESPBAUD
for ββbaudβesp: use suggest flash baudrate if lower
log: log buffer as error when no matched pattern while expecting
windows: Add Windows support
Fixο
esp: different dut will not use the same ports anymore
macos: multiprocessing pickle error
windows: make setup.py installable
make the hook function to apply parallel count as the last step
Breaking Changesο
log: remove
source
argument in allDuplicatedStdout
related functionsqemu: remove cli option
qemu-log-path
v0.4.5 (2021-11-29)ο
Featο
real-time logging
add
expect_list
andexpect_exact
method toDUT
classadd parallel run cli options
Fixο
idf: Run hard reset when skipping auto flash
v0.4.4 (2021-11-18)ο
Fixο
qemu: add the missing
build_dir
to the parentIdfApp
use realpath instead
Featο
base: use the folder where
test_file_path
locates as the defaultapp_path
idf: replace parse binary config from sdkconfig to sdkconfig.json
idf: add cli option βbuild_dirβ
v0.4.3 (2021-11-16)ο
Featο
return
re.Match
ifdut.expect()
succeededidf: add option
--skip-autoflash
v0.4.2 (2021-10-25)ο
Fixο
add version limit or armv71(rpi)
Featο
add dut count at the start of each line
v0.4.1 (2021-08-26)ο
Fixο
run close method only when initialized correctly
correct the error message when service required package not installed
pexpect process would echo the input, set echo to off
v0.4.0 (2021-08-25)ο
Fixο
create folder failed when specifying a file under current folder
Featο
add multi DUT support, use βcountβ option to duplicate fixtures
use βembedded-servicesβ option to extend functionalities instead of activating plugins.
v0.3.2 (2021-08-12)ο
Fixο
jtag: do not import idf package
v0.3.1 (2021-07-09)ο
Fixο
idf: optional dependency with
pytest-embedded-serial-esp
while import
v0.3.0 (2021-07-06)ο
Featο
qemu: rename package to
pytest-embedded-qemu
, with optional dependencypytest-embedded-idf
jtag: add dependency
pytest-embedded-serial
, remove optional requirementspytest-embedded-serial-esp
idf: rename module
dut
toserial
, overrideserial
if satisfy the optional dependencyesp: rename module
dut
toserial
, overrideserial
fixtureserial: extract serial into a standalone fixture
base: Add fixture
pexpect_proc
v0.2.0 (2021-06-29)ο
Featο
jtag: add jtag support
log: add LivePrintPopen custom Popen class
qemu:
qemu_cli_args
andqemu_extra_args
now can be set via cli and override via parameterizationserial: make serial port could be overridden by parameterization
Fixο
log: use rstrip instead of strip to keep the logsβ indentation
v0.1.1 (2021-06-16)ο
Featο
qemu: check image_path exist or not and target chip type while running
qemu: move
qemu_cli_args
andqemu_extra_args
from cli args to parametrize option
Fixο
idf: add base dependency
v0.1.0 (2021-06-11)ο
Featο
base: add App class
base: add plugin
redirect
to duplicate and redirectsys.stdout
base: App support encrypt files
base: class App read target from sdkconfig file
base: fixture
redirect
could have argumentsource
idf: make serial/esp dependencies optional
idf: move idf related app into IDFApp
idf: move the flash specific code into idf plugin
idf: simplify flash files, encrypt files parsing
print: redirect esptool print to pexpect
qemu: Move qemu to single fixture
qemu-idf: add qemu-idf
serial: move serial related into serial plugin
serial: support flash by serial
serial: support pexpect from serial
serial_esp: move esp related serial into a standalone plugin
duplicate stdout to file descriptor
move redirect stdout to pexpect process into a reusable decorator
re-organize code. move esp related serial into embedded-serial-esp
rename serial_dut/serial_esp to dut to keep consistency
rename to pytest-embedded
update feature list after review
use dynamic import, but not nested plugins
use multi plugins to attach the method to the DUT class
writing feature list and some initial design
Fixο
base: remove redundant double quote in sdkconfig
log: fix the subprocess.popen issue while redirecting sys.stdout
app_path would use test script path if not set
small fixes about examples and type hint
typing βlistβ not available before python 3.9