• Integration Testing
    • ROS / MAVROS Tests
      • Execute Tests
      • Write a new MAVROS test (Python)
        • 1.) Create a new test script
        • 2.) Run the new test only
        • 3.) Add new test node to launch file

    Integration Testing

    This is about end to end integration testing. Tests are executed automatically (Jenkins CI)

    ROS / MAVROS Tests

    Prerequisites:

    • JMAVSim Simulation
    • Gazebo
    • ROS and MAVROS

    Execute Tests

    To run the complete MAVROS test suite:

    1. cd <Firmware_clone>
    2. source integrationtests/setup_gazebo_ros.bash $(pwd)
    3. rostest px4 mavros_posix_tests_iris.launch

    Or with GUI to see what’s happening:

    1. rostest px4 mavros_posix_tests_iris.launch gui:=true headless:=false

    Write a new MAVROS test (Python)

    Note Currently in early stages, more streamlined support for testing (helper classes/methods etc.) to come.

    1.) Create a new test script

    Test scripts are located in integrationtests/python_src/px4_it/mavros/. See other existing scripts for examples. Also please consult the official ROS documentation on how to use unittest.

    Empty test skeleton:

    1. #!/usr/bin/env python
    2. # [... LICENSE ...]
    3. #
    4. # @author Example Author <author@example.com>
    5. #
    6. PKG = 'px4'
    7. import unittest
    8. import rospy
    9. import rosbag
    10. from sensor_msgs.msg import NavSatFix
    11. class MavrosNewTest(unittest.TestCase):
    12. """
    13. Test description
    14. """
    15. def setUp(self):
    16. rospy.init_node('test_node', anonymous=True)
    17. rospy.wait_for_service('mavros/cmd/arming', 30)
    18. rospy.Subscriber("mavros/global_position/global", NavSatFix, self.global_position_callback)
    19. self.rate = rospy.Rate(10) # 10hz
    20. self.has_global_pos = False
    21. def tearDown(self):
    22. pass
    23. #
    24. # General callback functions used in tests
    25. #
    26. def global_position_callback(self, data):
    27. self.has_global_pos = True
    28. def test_method(self):
    29. """Test method description"""
    30. # FIXME: hack to wait for simulation to be ready
    31. while not self.has_global_pos:
    32. self.rate.sleep()
    33. # TODO: execute test
    34. if __name__ == '__main__':
    35. import rostest
    36. rostest.rosrun(PKG, 'mavros_new_test', MavrosNewTest)

    2.) Run the new test only

    1. # Start simulation
    2. cd <Firmware_clone>
    3. source integrationtests/setup_gazebo_ros.bash $(pwd)
    4. roslaunch px4 mavros_posix_sitl.launch
    5. # Run test (in a new shell):
    6. cd <Firmware_clone>
    7. source integrationtests/setup_gazebo_ros.bash $(pwd)
    8. rosrun px4 mavros_new_test.py

    3.) Add new test node to launch file

    In launch/mavros_posix_tests_irisl.launch add new entry in test group:

    1. <group ns="$(arg ns)">
    2. [...]
    3. <test test-name="mavros_new_test" pkg="px4" type="mavros_new_test.py" />
    4. </group>

    Run the comlpete test suite as described above.