# 통합 테스트
This topic explains how to run (and extend) PX4's ROS-based integration tests.
Note
MAVSDK Integration Testing is preferred when writing new tests. Use the ROS-based integration test framework for use cases that require ROS (e.g. object avoidance).
All PX4 integraton tests are executed automatically by our Continuous Integration system.
# ROS / MAVROS 테스트
# Execute Tests
To run the MAVROS tests:
cd <PX4-Autopilot_clone>
source integrationtests/setup_gazebo_ros.bash $(pwd)
rostest px4 mavros_posix_tests_iris.launch
test /
아래에있는 테스트 스크립트를 실행하여 테스트를 직접 실행할 수도 있습니다.
예:
소스 <catkin_ws> /devel/setup.bash
cd <PX4-Autopilot_clone>
px4_sitl_default sitl_gazebo 만들기
./test/ <test_bash_script> <test_launch_file>
또는 GUI로 무슨 일이 일어나고 있는지 확인하십시오.
./test/rostest_px4_run.sh mavros_posix_tests_offboard_posctl.test
.test 파일은 integrationtests/python_src/px4_it/mavros/
에 정의된 해당 Python 테스트를 시작합니다.
./test/rostest_px4_run.sh mavros_posix_tests_offboard_posctl.test gui:=true headless:=false
The .test files launch the corresponding Python tests defined in integrationtests/python_src/px4_it/mavros/
# Write a New MAVROS Test (Python)
This section explains how to write a new python test using ROS(1)/MAVROS, test it, and add it to the PX4 test suite.
We recommend you review the existing tests as examples/inspiration (integrationtests/python_src/px4_it/mavros/ (opens new window)). The official ROS documentation also contains information on how to use unittest (opens new window) (on which this test suite is based).
To write a new test:
Create a new test script by copying the empty test skeleton below:
#!/usr/bin/env python # [... LICENSE ...] # # @author Example Author <author@example.com> # PKG = 'px4' import unittest import rospy import rosbag from sensor_msgs.msg import NavSatFix class MavrosNewTest(unittest.TestCase): """ Test description """ def setUp(self): rospy.init_node('test_node', anonymous=True) rospy.wait_for_service('mavros/cmd/arming', 30) rospy.Subscriber("mavros/global_position/global", NavSatFix, self.global_position_callback) self.rate = rospy.Rate(10) # 10hz self.has_global_pos = False def tearDown(self): pass # # General callback functions used in tests # def global_position_callback(self, data): self.has_global_pos = True def test_method(self): """Test method description""" # FIXME: hack to wait for simulation to be ready while not self.has_global_pos: self.rate.sleep() # TODO: execute test if __name__ == '__main__': import rostest rostest.rosrun(PKG, 'mavros_new_test', MavrosNewTest)
Run the new test only
- Start the simulator:
cd <PX4-Autopilot_clone> source Tools/setup_gazebo.bash roslaunch launch/mavros_posix_sitl.launch
- Run test (in a new shell):
cd <PX4-Autopilot_clone> source Tools/setup_gazebo.bash rosrun px4 mavros_new_test.py
- Start the simulator:
Add new test node to a launch file
- In
test/
create a new<test_name>.test
ROS launch file. - Call the test file using one of the base scripts rostest_px4_run.sh or rostest_avoidance_run.sh
- In
(Optional) Create a new target in the Makefile
- Open the Makefile
- Search the Testing section
- Add a new target name and call the test
For example:
tests_<new_test_target_name>: rostest @"$(SRC_DIR)"/test/rostest_px4_run.sh mavros_posix_tests_<new_test>.test
예: