-
 

code_coverage repository

Repository Summary

Checkout URI https://github.com/mikeferguson/code_coverage.git
VCS Type git
VCS Version master
Last Updated 2023-08-29
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
code_coverage 0.4.4

README

code_coverage

ROS package to run coverage testing

Examples

  • The robot_calibration package uses this to generate coverage for C++ code using Travis-CI and Codecov.io

Usage

To use this with your ROS package:

  • Add code_coverage as a test depend in your package.xml
  • Update your CMakeLists.txt, in the testing section add the following. NOTE the order of test targets and coverage macros:
   if(CATKIN_ENABLE_TESTING AND ENABLE_COVERAGE_TESTING)
     find_package(code_coverage REQUIRED)
     # Add compiler flags for coverage instrumentation before defining any targets
     APPEND_COVERAGE_COMPILER_FLAGS()
   endif()
   
   # Add your targets here
   
   if (CATKIN_ENABLE_TESTING)
     # Add your tests here
   
     # Create a target ${PROJECT_NAME}_coverage_report
     if(ENABLE_COVERAGE_TESTING)
       set(COVERAGE_EXCLUDES "*/${PROJECT_NAME}/test*" "*/${PROJECT_NAME}/other_dir_i_dont_care_about*")
       add_code_coverage(
         NAME ${PROJECT_NAME}_coverage_report
         DEPENDENCIES _run_tests_${PROJECT_NAME}
       )
     endif()
   endif()
   
  • Note: The variable COVERAGE_EXCLUDES must have some content!
  • Now you can build and run the tests (you need a debug build to get reasonable coverage numbers):

    • if using CATKIN_MAKE:
      catkin_make -DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug
      catkin_make -DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug PACKAGE_NAME_coverage_report
  
  • if using CATKIN_TOOLS:
    catkin config --cmake-args -DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug
    catkin build
    catkin build PACKAGE_NAME -v --no-deps --catkin-make-args PACKAGE_NAME_coverage_report 
  
  • The output will print where the coverage report is located

Python rostest Support

While the C++ interface and Python-based unit tests require no modification to get coverage information, Python-based nodes run from rostest launch files need a bit of additional instrumentation turned on:

<launch>

    <!-- Add an argument to the launch file to turn on coverage -->
    <arg name="coverage" default="false"/>

    <!-- This fancy line forces nodes to generate coverage -->
    <arg name="pythontest_launch_prefix" value="$(eval 'python-coverage run -p' if arg('coverage') else '')"/>

    <!-- This node will NOT generate coverage information -->
    <node pkg="example_pkg" name="publisher_node" type="publisher_node.py" />

    <!-- But this node WILL generate coverage -->
    <node pkg="example_pkg" name="subscriber_node" type="subscriber_node.py"
          launch-prefix="$(arg pythontest_launch_prefix)" />

    <!-- The test can also generate coverage information if you include the launch-prefix -->
    <test time-limit="10" test-name="sample_rostest" pkg="example_pkg" type="sample_rostest.py"
          launch-prefix="$(arg pythontest_launch_prefix)" />

</launch>

In the CMakeLists, you will need to pass this argument:

add_rostest(example_rostest.test ARGS coverage:=ENABLE_COVERAGE_TESTING)

CONTRIBUTING

No CONTRIBUTING.md found.

Repository Summary

Checkout URI https://github.com/mikeferguson/code_coverage.git
VCS Type git
VCS Version master
Last Updated 2023-08-29
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
code_coverage 0.4.4

README

code_coverage

ROS package to run coverage testing

Examples

  • The robot_calibration package uses this to generate coverage for C++ code using Travis-CI and Codecov.io

Usage

To use this with your ROS package:

  • Add code_coverage as a test depend in your package.xml
  • Update your CMakeLists.txt, in the testing section add the following. NOTE the order of test targets and coverage macros:
   if(CATKIN_ENABLE_TESTING AND ENABLE_COVERAGE_TESTING)
     find_package(code_coverage REQUIRED)
     # Add compiler flags for coverage instrumentation before defining any targets
     APPEND_COVERAGE_COMPILER_FLAGS()
   endif()
   
   # Add your targets here
   
   if (CATKIN_ENABLE_TESTING)
     # Add your tests here
   
     # Create a target ${PROJECT_NAME}_coverage_report
     if(ENABLE_COVERAGE_TESTING)
       set(COVERAGE_EXCLUDES "*/${PROJECT_NAME}/test*" "*/${PROJECT_NAME}/other_dir_i_dont_care_about*")
       add_code_coverage(
         NAME ${PROJECT_NAME}_coverage_report
         DEPENDENCIES _run_tests_${PROJECT_NAME}
       )
     endif()
   endif()
   
  • Note: The variable COVERAGE_EXCLUDES must have some content!
  • Now you can build and run the tests (you need a debug build to get reasonable coverage numbers):

    • if using CATKIN_MAKE:
      catkin_make -DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug
      catkin_make -DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug PACKAGE_NAME_coverage_report
  
  • if using CATKIN_TOOLS:
    catkin config --cmake-args -DENABLE_COVERAGE_TESTING=ON -DCMAKE_BUILD_TYPE=Debug
    catkin build
    catkin build PACKAGE_NAME -v --no-deps --catkin-make-args PACKAGE_NAME_coverage_report 
  
  • The output will print where the coverage report is located

Python rostest Support

While the C++ interface and Python-based unit tests require no modification to get coverage information, Python-based nodes run from rostest launch files need a bit of additional instrumentation turned on:

<launch>

    <!-- Add an argument to the launch file to turn on coverage -->
    <arg name="coverage" default="false"/>

    <!-- This fancy line forces nodes to generate coverage -->
    <arg name="pythontest_launch_prefix" value="$(eval 'python-coverage run -p' if arg('coverage') else '')"/>

    <!-- This node will NOT generate coverage information -->
    <node pkg="example_pkg" name="publisher_node" type="publisher_node.py" />

    <!-- But this node WILL generate coverage -->
    <node pkg="example_pkg" name="subscriber_node" type="subscriber_node.py"
          launch-prefix="$(arg pythontest_launch_prefix)" />

    <!-- The test can also generate coverage information if you include the launch-prefix -->
    <test time-limit="10" test-name="sample_rostest" pkg="example_pkg" type="sample_rostest.py"
          launch-prefix="$(arg pythontest_launch_prefix)" />

</launch>

In the CMakeLists, you will need to pass this argument:

add_rostest(example_rostest.test ARGS coverage:=ENABLE_COVERAGE_TESTING)

CONTRIBUTING

No CONTRIBUTING.md found.