Rosanswers logo

Hi all,

I am writing some tests for my ROS2 Python package. I want to specify different levels of tests (unittest, integrationtests, system tests, ...) and run them with colcon test . I have the different tests in subfolders in the test directory:

├── launch
│   └── example.launch.py
├── my_pkg
│   ├── __init__.py
│   ├── my_node.py
│   ├── publisher.py
│   ├── subscriber.py
│   └── transformer.py
├── package.xml
├── README.md
├── resource
│   └── my_pkg
├── setup.cfg
├── setup.py
└── test
    ├── integrationtest
    │   └── test_integration.py
    └── unittest
        ├── test_pytest.py
        └── test_unittest.py

Colcon detects all tests, what is great. But sometimes I only want run e.g. the tests in the directory unittests. That woult be useful, because some of my integration or system tests needs a long time!

Are there any possibilities to run a specific subfolder of the test directory with colcon test? Have colcon some command line arguments for this? Or is there another way to go?

Originally posted by lmiller on ROS Answers with karma: 219 on 2021-03-29

Post score: 0

Original comments

Comment by shonigmann on 2021-03-29:
Someone can correct me if I am wrong, but from my understanding of colcon test, there isn't a built-in way of selecting to only run tests from a given sub-folder of a package.

A workaround that comes to mind would be to create sub-packages (e.g. my_pkg_integrationtest, my_pkg_unittest) and to list them in my_pkg's package.xml as test_dependencies.

But I'd be surprised if there wasn't someone more knowledgeable out there with a better solution than that

Comment by lmiller on 2021-03-30:
Thanks for your reply. My first thought was also that I could call up the various tests via side-/sub-packages. However, I dont like the structure of my repository with too many sub-packages. As a current workaround I call pytest instead of colcon test like:

python3 -m pytest my_pkg/test/integrationtest

If someone has another way to call the tests only from a subfolder please let me know!


1 Answer 1


Rosanswers logo

colcon simply invokes the unit testing framework used by each package when colcon test is being called.

If that testing framework has command line options to select/deselect specific tests you can easily provide them through colcon. E.g. for pytest you can use colcon test --pytest-args ... and use any of the sophisticated options like:

Originally posted by Dirk Thomas with karma: 16276 on 2021-04-14

This answer was ACCEPTED on the original site

Post score: 2


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.