![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.0.10 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-07-16 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Michel Hidalgo
Authors
- Dirk Thomas
- Esteve Fernandez
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are avilalbe to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the proccess under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
1.0.10 (2025-07-16)
1.0.9 (2025-06-06)
1.0.8 (2025-03-25)
1.0.7 (2024-11-25)
1.0.6 (2024-05-17)
1.0.5 (2024-02-16)
1.0.4 (2023-01-10)
- Allow ReadyToTest() usage in event handler (#681)
- Inherit markers from generate_test_description (#670) (#674)
- Contributors: Nikolai Morin, mergify[bot]
1.0.3 (2022-10-18)
- Fix Typo (#641) (#644)
- Switch to using a comprehension for process_names. (#614) (#615)
- Contributors: mergify[bot]
1.0.2 (2022-05-10)
1.0.1 (2022-04-13)
1.0.0 (2022-04-12)
- Removed the deprecated [ready_fn]{.title-ref} feature (#589)
- Contributors: William Woodall
0.23.1 (2022-04-08)
0.23.0 (2022-03-30)
0.22.0 (2022-03-28)
0.21.1 (2022-03-01)
- Added case for instances of ExecuteLocal in resolveProcess function (#587)
- Add compatitibility with pytest 7 (#592)
- Contributors: Matt Lanting, Shane Loretz
0.21.0 (2022-01-14)
- Renamed three files from example_processes (#573)
- Fix launch_testing README.md proc keyword to process. (#554) (#560)
- Contributors: Jacob Perron, Khush Jain
0.20.0 (2021-11-29)
- Declare frontend group dependency & use explicit dependencies in launch_testing (#520)
- Update maintainers to Aditya Pande and Michel Hidalgo (#559)
- Updated maintainers (#555)
- First prototype of native pytest plugin for launch based tests (#528)
- Adding Executable description class (#454)
- Add a "hello world" style example (#532)
- Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, Ivan Santiago Paunovic, roger-strain
0.19.0 (2021-07-15)
0.18.0 (2021-06-18)
0.17.0 (2021-04-06)
0.16.0 (2021-03-19)
- Use unittest.mock instead of mock (#487)
- Contributors: Michel Hidalgo
0.15.0 (2021-01-25)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
launch_xml | |
launch_yaml | |
osrf_pycommon | |
ament_copyright | |
ament_flake8 | |
ament_pep257 |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 3.4.5 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2025-07-28 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Brandon Ong
- William Woodall
Authors
- Dirk Thomas
- Esteve Fernandez
- Michel Hidalgo
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are available to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the process under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
3.4.5 (2025-06-23)
3.4.4 (2025-04-02)
- Merge pull request #834 from ros2/mergify/bp/jazzy/pr-833 Fix function params indentation (backport #833)
- Fix function params indentation (#833) (cherry picked from commit 151b024a7cfac06f0d56798cbe87ab180b9ea3ab)
- Contributors: Alejandro Hernández Cordero, Christophe Bedard
3.4.3 (2024-12-18)
3.4.2 (2024-04-16)
- Fix a warning in modern unittest. (#773) Newer versions of unittest no longer store an errors list; instead, they store a result, which then stores an error list. Update the code here to be able to deal with either version.
- Contributors: Chris Lalancette
3.4.1 (2024-03-28)
- Add consider_namespace_packages=False (#766)
- Contributors: Tony Najjar
3.4.0 (2024-02-07)
3.3.0 (2024-01-24)
3.2.1 (2023-12-26)
3.2.0 (2023-10-04)
- to open expected outpout file with an encoding parameter (#717)
- Contributors: Chen Lihui
3.1.0 (2023-09-08)
3.0.1 (2023-09-07)
3.0.0 (2023-08-21)
2.2.1 (2023-07-11)
2.2.0 (2023-06-07)
2.1.0 (2023-04-27)
2.0.1 (2023-04-12)
2.0.0 (2023-04-11)
- Improve type checking (#679)
- Contributors: Hervé Audren
1.4.1 (2023-02-24)
- Fixed typos (#692)
- Contributors: Alejandro Hernández Cordero
1.4.0 (2023-02-14)
- Allow ReadyToTest() usage in event handler (#665)
- Inherit markers from generate_test_description (#670)
- [rolling] Update maintainers - 2022-11-07 (#671)
- Contributors: Audrow Nash, Nikolai Morin, Scott K Logan
1.3.0 (2022-11-02)
1.2.0 (2022-09-13)
- Fix Typo (#641)
- ReadyToTest action timeout using decorator (#625)
- Switch to using a comprehension for process_names. (#614)
- Contributors: Chris Lalancette, Deepanshu Bansal, Kenji Brameld
1.1.0 (2022-04-29)
1.0.1 (2022-04-13)
1.0.0 (2022-04-12)
- Removed the deprecated [ready_fn]{.title-ref} feature (#589)
- Contributors: William Woodall
0.23.1 (2022-04-08)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
launch_xml | |
launch_yaml | |
osrf_pycommon | |
ament_copyright | |
ament_flake8 | |
ament_pep257 |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 3.8.2 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | kilted |
Last Updated | 2025-07-28 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Brandon Ong
- William Woodall
Authors
- Dirk Thomas
- Esteve Fernandez
- Michel Hidalgo
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are available to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the process under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
3.8.2 (2025-06-23)
3.8.1 (2025-04-18)
- Fix function params indentation (#833)
- Contributors: Christophe Bedard
3.8.0 (2025-02-27)
- Cleanup the launch dependencies. (#819)
- Contributors: Chris Lalancette
3.7.1 (2024-12-20)
3.7.0 (2024-11-20)
- Add test_xmllint to all of the ament_python packages. (#804)
- Contributors: Chris Lalancette
3.6.1 (2024-07-29)
3.6.0 (2024-06-25)
3.5.1 (2024-06-17)
- Add mechanism to disable workaround for dependency groups (#775)
- Contributors: Scott K Logan
3.5.0 (2024-04-26)
3.4.2 (2024-04-16)
- Fix a warning in modern unittest. (#773) Newer versions of unittest no longer store an errors list; instead, they store a result, which then stores an error list. Update the code here to be able to deal with either version.
- Contributors: Chris Lalancette
3.4.1 (2024-03-28)
- Add consider_namespace_packages=False (#766)
- Contributors: Tony Najjar
3.4.0 (2024-02-07)
3.3.0 (2024-01-24)
3.2.1 (2023-12-26)
3.2.0 (2023-10-04)
- to open expected outpout file with an encoding parameter (#717)
- Contributors: Chen Lihui
3.1.0 (2023-09-08)
3.0.1 (2023-09-07)
3.0.0 (2023-08-21)
2.2.1 (2023-07-11)
2.2.0 (2023-06-07)
2.1.0 (2023-04-27)
2.0.1 (2023-04-12)
2.0.0 (2023-04-11)
- Improve type checking (#679)
- Contributors: Hervé Audren
1.4.1 (2023-02-24)
- Fixed typos (#692)
- Contributors: Alejandro Hernández Cordero
1.4.0 (2023-02-14)
- Allow ReadyToTest() usage in event handler (#665)
- Inherit markers from generate_test_description (#670)
- [rolling] Update maintainers - 2022-11-07 (#671)
- Contributors: Audrow Nash, Nikolai Morin, Scott K Logan
1.3.0 (2022-11-02)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
osrf_pycommon | |
launch_xml | |
launch_yaml | |
ament_copyright | |
ament_flake8 | |
ament_pep257 | |
ament_xmllint |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 3.9.2 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | rolling |
Last Updated | 2025-07-29 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Brandon Ong
- William Woodall
Authors
- Dirk Thomas
- Esteve Fernandez
- Michel Hidalgo
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are available to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the process under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
3.9.2 (2025-07-29)
- Fix Setuptoolsdeprecations (#898)
- Contributors: mosfet80
3.9.1 (2025-06-19)
- Make sure to install py.typed files (#886)
- Add remaining [py.typed]{.title-ref} (#884)
- Updated [launch]{.title-ref} typings (#831)
- Contributors: Christophe Bedard, Michael Carlstrom
3.9.0 (2025-04-24)
3.8.1 (2025-04-18)
- Fix function params indentation (#833)
- Contributors: Christophe Bedard
3.8.0 (2025-02-27)
- Cleanup the launch dependencies. (#819)
- Contributors: Chris Lalancette
3.7.1 (2024-12-20)
3.7.0 (2024-11-20)
- Add test_xmllint to all of the ament_python packages. (#804)
- Contributors: Chris Lalancette
3.6.1 (2024-07-29)
3.6.0 (2024-06-25)
3.5.1 (2024-06-17)
- Add mechanism to disable workaround for dependency groups (#775)
- Contributors: Scott K Logan
3.5.0 (2024-04-26)
3.4.2 (2024-04-16)
- Fix a warning in modern unittest. (#773) Newer versions of unittest no longer store an errors list; instead, they store a result, which then stores an error list. Update the code here to be able to deal with either version.
- Contributors: Chris Lalancette
3.4.1 (2024-03-28)
- Add consider_namespace_packages=False (#766)
- Contributors: Tony Najjar
3.4.0 (2024-02-07)
3.3.0 (2024-01-24)
3.2.1 (2023-12-26)
3.2.0 (2023-10-04)
- to open expected outpout file with an encoding parameter (#717)
- Contributors: Chen Lihui
3.1.0 (2023-09-08)
3.0.1 (2023-09-07)
3.0.0 (2023-08-21)
2.2.1 (2023-07-11)
2.2.0 (2023-06-07)
2.1.0 (2023-04-27)
2.0.1 (2023-04-12)
2.0.0 (2023-04-11)
- Improve type checking (#679)
- Contributors: Hervé Audren
1.4.1 (2023-02-24)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
osrf_pycommon | |
launch_xml | |
launch_yaml | |
ament_copyright | |
ament_flake8 | |
ament_pep257 | |
ament_xmllint |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.0.10 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-07-16 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Michel Hidalgo
Authors
- Dirk Thomas
- Esteve Fernandez
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are avilalbe to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the proccess under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
1.0.10 (2025-07-16)
1.0.9 (2025-06-06)
1.0.8 (2025-03-25)
1.0.7 (2024-11-25)
1.0.6 (2024-05-17)
1.0.5 (2024-02-16)
1.0.4 (2023-01-10)
- Allow ReadyToTest() usage in event handler (#681)
- Inherit markers from generate_test_description (#670) (#674)
- Contributors: Nikolai Morin, mergify[bot]
1.0.3 (2022-10-18)
- Fix Typo (#641) (#644)
- Switch to using a comprehension for process_names. (#614) (#615)
- Contributors: mergify[bot]
1.0.2 (2022-05-10)
1.0.1 (2022-04-13)
1.0.0 (2022-04-12)
- Removed the deprecated [ready_fn]{.title-ref} feature (#589)
- Contributors: William Woodall
0.23.1 (2022-04-08)
0.23.0 (2022-03-30)
0.22.0 (2022-03-28)
0.21.1 (2022-03-01)
- Added case for instances of ExecuteLocal in resolveProcess function (#587)
- Add compatitibility with pytest 7 (#592)
- Contributors: Matt Lanting, Shane Loretz
0.21.0 (2022-01-14)
- Renamed three files from example_processes (#573)
- Fix launch_testing README.md proc keyword to process. (#554) (#560)
- Contributors: Jacob Perron, Khush Jain
0.20.0 (2021-11-29)
- Declare frontend group dependency & use explicit dependencies in launch_testing (#520)
- Update maintainers to Aditya Pande and Michel Hidalgo (#559)
- Updated maintainers (#555)
- First prototype of native pytest plugin for launch based tests (#528)
- Adding Executable description class (#454)
- Add a "hello world" style example (#532)
- Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, Ivan Santiago Paunovic, roger-strain
0.19.0 (2021-07-15)
0.18.0 (2021-06-18)
0.17.0 (2021-04-06)
0.16.0 (2021-03-19)
- Use unittest.mock instead of mock (#487)
- Contributors: Michel Hidalgo
0.15.0 (2021-01-25)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
launch_xml | |
launch_yaml | |
osrf_pycommon | |
ament_copyright | |
ament_flake8 | |
ament_pep257 |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.17.2 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | galactic |
Last Updated | 2022-12-02 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- William Woodall
- Michel Hidalgo
Authors
- Pete Baughman
- Dirk Thomas
- Esteve Fernandez
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are avilalbe to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
In older style tests, a function called ready_fn
is declared as an argument to generate_test_description
and must be plumbed into the launch description with an OpaqueFunction
.
This method has been fully replaced by the ReadyToTest
action and is therefore deprecated.
def generate_test_description(ready_fn):
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example
launch.actions.OpaqueFunction(function=lambda context: ready_fn()),
])
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the proccess under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes.
File truncated at 100 lines see the full file
Changelog for package launch_testing
0.17.2 (2022-12-02)
- Inherit markers from generate_test_description (#675)
- Fix Typo (#643)
- Add compatitibility with pytest 7 (#629)
- Mention that ready_fn in generate_test_description is deprecated (#623)
- Switch to using a comprehension for process_names. (#616)
- Contributors: Bi0T1N, Chris Lalancette, Kenji Brameld, Scott K Logan, Shane Loretz
0.17.1 (2022-04-28)
- Fix launch_testing README.md proc keyword to process. (#554) (#561) Co-authored-by: Michael McConnell <<Michael.McConnell-2@leidos.com>>
- Contributors: Jacob Perron
0.17.0 (2021-04-06)
0.16.0 (2021-03-19)
- Use unittest.mock instead of mock (#487)
- Contributors: Michel Hidalgo
0.15.0 (2021-01-25)
0.14.0 (2020-12-08)
0.13.0 (2020-11-04)
- Update package maintainers (#465)
- Contributors: Michel Hidalgo
0.12.0 (2020-08-18)
0.11.1 (2020-08-14)
0.11.0 (2020-08-04)
- Disable cleanup of test cases once they have been run (#406)
- Fix max() with empty sequence (#440)
- Use unittest.TestCase.id() for pytest failure reprs. (#436)
- Use unittest.TestCase.id() to put together jUnit XML output. (#435)
- Claim ownership (#433)
- Contributors: Dirk Thomas, Michel Hidalgo, Scott K Logan, William Woodall
0.10.2 (2020-05-26)
- Set junit_family to xunit2 in pytest.ini
- Stop using implicit variables in example testing.
- Switch to from_parent to remove deprecation warning.
- Fix new flake8 errors. (#420)
- Remove uses of deprecated ready_fn. (#419)
- Contributors: Chris Lalancette, Michel Hidalgo
0.10.1 (2020-05-08)
- fixed depcrecation warning of imp to importlib (issue #387) (#407)
- wait_for_ouput() repr includes actual text (#408)
- Contributors: Shane Loretz, Zahi Kakish
0.10.0 (2020-04-24)
- Improve jUnit output for launch tests when run with py.test (#404)
- avoid deprecation warning, use from_parent (#402)
- Warn that old-style ready_fn and test attributes will be deprecated (#346)
- more verbose test_flake8 error messages (same as ros2/launch_ros#135)
- stop using constructors deprecated in pytest 5.4 (#391)
- Add the ability to assert in stdout or stderr. (#378)
- Add delay parameter to retry_on_failure decorator (#390)
- Make RegisterEventHandler describe its sub-entities (#386)
- Import test file without contaminating sys.modules (#360)
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 2.0.4 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | iron |
Last Updated | 2024-06-24 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Brandon Ong
- William Woodall
Authors
- Dirk Thomas
- Esteve Fernandez
- Michel Hidalgo
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are available to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the process under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
2.0.4 (2024-06-24)
-
Add consider_namespace_packages=False (#766) (#778)
* Add consider_namespace_packages=False (cherry picked from commit 07f43328054c03067b470d1c9bd707cb1e52d691) Co-authored-by: Tony Najjar <<tony.najjar.1997@gmail.com>>
-
Contributors: mergify[bot]
2.0.3 (2024-04-19)
2.0.2 (2023-07-14)
2.0.1 (2023-04-12)
2.0.0 (2023-04-11)
- Improve type checking (#679)
- Contributors: Hervé Audren
1.4.1 (2023-02-24)
- Fixed typos (#692)
- Contributors: Alejandro Hernández Cordero
1.4.0 (2023-02-14)
- Allow ReadyToTest() usage in event handler (#665)
- Inherit markers from generate_test_description (#670)
- [rolling] Update maintainers - 2022-11-07 (#671)
- Contributors: Audrow Nash, Nikolai Morin, Scott K Logan
1.3.0 (2022-11-02)
1.2.0 (2022-09-13)
- Fix Typo (#641)
- ReadyToTest action timeout using decorator (#625)
- Switch to using a comprehension for process_names. (#614)
- Contributors: Chris Lalancette, Deepanshu Bansal, Kenji Brameld
1.1.0 (2022-04-29)
1.0.1 (2022-04-13)
1.0.0 (2022-04-12)
- Removed the deprecated [ready_fn]{.title-ref} feature (#589)
- Contributors: William Woodall
0.23.1 (2022-04-08)
0.23.0 (2022-03-30)
0.22.0 (2022-03-28)
0.21.1 (2022-03-01)
- Added case for instances of ExecuteLocal in resolveProcess function (#587)
- Add compatitibility with pytest 7 (#592)
- Contributors: Matt Lanting, Shane Loretz
0.21.0 (2022-01-14)
- Renamed three files from example_processes (#573)
- Fix launch_testing README.md proc keyword to process. (#554) (#560)
- Contributors: Jacob Perron, Khush Jain
0.20.0 (2021-11-29)
- Declare frontend group dependency & use explicit dependencies in launch_testing (#520)
- Update maintainers to Aditya Pande and Michel Hidalgo (#559)
- Updated maintainers (#555)
- First prototype of native pytest plugin for launch based tests (#528)
- Adding Executable description class (#454)
- Add a "hello world" style example (#532)
- Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, Ivan
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
launch_xml | |
launch_yaml | |
osrf_pycommon | |
ament_copyright | |
ament_flake8 | |
ament_pep257 |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.0.10 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-07-16 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Michel Hidalgo
Authors
- Dirk Thomas
- Esteve Fernandez
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are avilalbe to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the proccess under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
1.0.10 (2025-07-16)
1.0.9 (2025-06-06)
1.0.8 (2025-03-25)
1.0.7 (2024-11-25)
1.0.6 (2024-05-17)
1.0.5 (2024-02-16)
1.0.4 (2023-01-10)
- Allow ReadyToTest() usage in event handler (#681)
- Inherit markers from generate_test_description (#670) (#674)
- Contributors: Nikolai Morin, mergify[bot]
1.0.3 (2022-10-18)
- Fix Typo (#641) (#644)
- Switch to using a comprehension for process_names. (#614) (#615)
- Contributors: mergify[bot]
1.0.2 (2022-05-10)
1.0.1 (2022-04-13)
1.0.0 (2022-04-12)
- Removed the deprecated [ready_fn]{.title-ref} feature (#589)
- Contributors: William Woodall
0.23.1 (2022-04-08)
0.23.0 (2022-03-30)
0.22.0 (2022-03-28)
0.21.1 (2022-03-01)
- Added case for instances of ExecuteLocal in resolveProcess function (#587)
- Add compatitibility with pytest 7 (#592)
- Contributors: Matt Lanting, Shane Loretz
0.21.0 (2022-01-14)
- Renamed three files from example_processes (#573)
- Fix launch_testing README.md proc keyword to process. (#554) (#560)
- Contributors: Jacob Perron, Khush Jain
0.20.0 (2021-11-29)
- Declare frontend group dependency & use explicit dependencies in launch_testing (#520)
- Update maintainers to Aditya Pande and Michel Hidalgo (#559)
- Updated maintainers (#555)
- First prototype of native pytest plugin for launch based tests (#528)
- Adding Executable description class (#454)
- Add a "hello world" style example (#532)
- Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, Ivan Santiago Paunovic, roger-strain
0.19.0 (2021-07-15)
0.18.0 (2021-06-18)
0.17.0 (2021-04-06)
0.16.0 (2021-03-19)
- Use unittest.mock instead of mock (#487)
- Contributors: Michel Hidalgo
0.15.0 (2021-01-25)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
launch_xml | |
launch_yaml | |
osrf_pycommon | |
ament_copyright | |
ament_flake8 | |
ament_pep257 |
System Dependencies
Name |
---|
python3-pytest |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged launch_testing at Robotics Stack Exchange
![]() |
launch_testing package from launch repolaunch launch_pytest launch_testing launch_testing_ament_cmake launch_xml launch_yaml test_launch_testing |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.0.10 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | Tools for launching multiple processes and for writing tests involving multiple processes. |
Checkout URI | https://github.com/ros2/launch.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-07-16 |
Dev Status | DEVELOPED |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Aditya Pande
- Michel Hidalgo
Authors
- Dirk Thomas
- Esteve Fernandez
- Pete Baughman
- William Woodall
launch_testing
This tool is a framework for launch integration testing. For example:
- The exit codes of all processes are available to the tests.
- Tests can check that all processes shut down normally, or with specific exit codes.
- Tests can fail when a process dies unexpectedly.
- The stdout and stderr of all processes are available to the tests.
- The command-line used to launch the processes are avilalbe to the tests.
- Some tests run concurrently with the launch and can interact with the running processes.
Quick start example
Start with the launch_testing
example good_proc_launch_test.py
.
Run the example by doing:
launch_test test/launch_testing/examples/good_proc_launch_test.py
launch_test
will launch the nodes found in the generate_test_description
function, run the tests from the TestGoodProcess
class, shut down the launched nodes, and then run the tests from the TestProcessOutput
class.
The Launch Description
def generate_test_description():
return launch.LaunchDescription([
launch.actions.ExecuteProcess(
cmd=[path_to_process],
),
# Start tests right away - no need to wait for anything in this example.
# In a more complicated launch description, we might want this action happen
# once some process starts or once some other event happens
launch_testing.actions.ReadyToTest()
])
The generate_test_description
function should return a launch.LaunchDescription
object that launches the system to be tested.
The launch description needs to include a ReadyToTest
action to signal to the test framework that it’s safe to start the active tests.
In the above example, there is no need to delay the start of the tests so the ReadyToTest
action is a peer to the process under test and will signal to the framework that it’s safe to start around the same time the ExecuteProcess
action is run.
Active Tests
Any classes that inherit from unittest.TestCase
and not decorated with the post_shutdown_test
descriptor will be run concurrently with the proccess under test.
These tests are expected to interact with the running processes in some way.
Post-Shutdown Tests
Any classes that inherit from unittest.TestCase
that are decorated with the post_shutdown_test
descriptor will be run after the launched processes have been shut down.
These tests have access to the exit codes and the stdout of all of the launched processes, as well as any data created as a side-effect of running the processes.
Exit Codes and Standard Out
The launch_testing
framework automatically adds some member fields to each test case so that the tests can access process output and exit codes.
-
self.proc_info
- a ProcInfoHandler object -
self.proc_output
- an IoHandler object
These objects provide dictionary like access to information about the running processes. They also contain methods that the active tests can use to wait for a process to exit or to wait for specific output.
Assertions
The launch_testing
framework automatically records all stdout from the launched processes as well as the exit codes from any processes that are launched.
This information is made available to the tests via the proc_info
and proc_output
object.
These objects can be used by one of several assert methods to check the output or exit codes of the process:
launch_testing.asserts.assertInStdout(proc_output, msg, process, cmd_args=None, *, strict_proc_matching=True)
Asserts that a message is found in the stdout of a particular process.
-
msg
:The text to look for in the process standard out
-
process
:Either the process name as a string, or a
launch.actions.ExecuteProcess
object that was used to start the process. PassNone
or an empty string to search all processes. -
cmd_args
:When looking up processes by process by name,
cmd_args
can be used to disambiguate multiple processes with the same name. -
strict_proc_matching
:When looking up a process by name,
strict_proc_matching=True
will make it an error to match multiple processes. This prevents an assert from accidentally passing if the output came from a different process than the one the user was expecting.
launch_testing.asserts.assertExitCodes(proc_info, allowable_exit_codes=[EXIT_OK], process, cmd_args=None, *, strict_proc_matching=True)
Asserts that the specified processes exited with a particular exit code.
-
allowable_exit_codes
:
File truncated at 100 lines see the full file
Changelog for package launch_testing
1.0.10 (2025-07-16)
1.0.9 (2025-06-06)
1.0.8 (2025-03-25)
1.0.7 (2024-11-25)
1.0.6 (2024-05-17)
1.0.5 (2024-02-16)
1.0.4 (2023-01-10)
- Allow ReadyToTest() usage in event handler (#681)
- Inherit markers from generate_test_description (#670) (#674)
- Contributors: Nikolai Morin, mergify[bot]
1.0.3 (2022-10-18)
- Fix Typo (#641) (#644)
- Switch to using a comprehension for process_names. (#614) (#615)
- Contributors: mergify[bot]
1.0.2 (2022-05-10)
1.0.1 (2022-04-13)
1.0.0 (2022-04-12)
- Removed the deprecated [ready_fn]{.title-ref} feature (#589)
- Contributors: William Woodall
0.23.1 (2022-04-08)
0.23.0 (2022-03-30)
0.22.0 (2022-03-28)
0.21.1 (2022-03-01)
- Added case for instances of ExecuteLocal in resolveProcess function (#587)
- Add compatitibility with pytest 7 (#592)
- Contributors: Matt Lanting, Shane Loretz
0.21.0 (2022-01-14)
- Renamed three files from example_processes (#573)
- Fix launch_testing README.md proc keyword to process. (#554) (#560)
- Contributors: Jacob Perron, Khush Jain
0.20.0 (2021-11-29)
- Declare frontend group dependency & use explicit dependencies in launch_testing (#520)
- Update maintainers to Aditya Pande and Michel Hidalgo (#559)
- Updated maintainers (#555)
- First prototype of native pytest plugin for launch based tests (#528)
- Adding Executable description class (#454)
- Add a "hello world" style example (#532)
- Contributors: Aditya Pande, Audrow Nash, Christophe Bedard, Ivan Santiago Paunovic, roger-strain
0.19.0 (2021-07-15)
0.18.0 (2021-06-18)
0.17.0 (2021-04-06)
0.16.0 (2021-03-19)
- Use unittest.mock instead of mock (#487)
- Contributors: Michel Hidalgo
0.15.0 (2021-01-25)
File truncated at 100 lines see the full file
Package Dependencies
Deps | Name |
---|---|
ament_index_python | |
launch | |
launch_xml | |
launch_yaml | |
osrf_pycommon | |
ament_copyright | |
ament_flake8 | |
ament_pep257 |
System Dependencies
Name |
---|
python3-pytest |