!REDIRECT “https://docs.px4.io/master/ko/test_and_ci/integration_testing_mavsdk.html

MAVSDK 통합 시험

PX4는 MAVSDK를 기반으로 종단간 통합 시험을 진행할 수 있습니다.

시험 절차는 이제부터 근본적으로 SITL을 대상으로 개발하며, 지속 통합 체계(CI)에서 실행합니다. 그러나, 실제 시험도 일반화할 수 있습니다.

MAVSDK C++ 라이브러리 설치

시스템 영역(예: /usr/lib 또는 /usr/local/lib)에 MAVSDK C++ 라이브러리를 설치해야 시험을 진행할 수 있습니다.

바이너리를 그대로 설치하거나 소스코드를 컴파일하여 설치하십시오:

PX4 코드 준비

PX4 코드를 빌드하려면 다음 명령을 내리십시오:

  1. DONT_RUN=1 make px4_sitl gazebo mavsdk_tests

모든 PX4 시험 절차 실행

To run all SITL tests as defined in sitl.json, do:

  1. test/mavsdk_tests/mavsdk_test_runner.py test/mavsdk_tests/configs/sitl.json --speed-factor 10

모든 가능한 명령행 인자를 살펴보려면 다음 내용을 살펴보십시오:

  1. test/mavsdk_tests/mavsdk_test_runner.py -h
  2. usage: mavsdk_test_runner.py [-h] [--log-dir LOG_DIR] [--speed-factor SPEED_FACTOR] [--iterations ITERATIONS] [--abort-early] [--gui] [--model MODEL]
  3. [--case CASE] [--debugger DEBUGGER] [--verbose]
  4. config_file
  5. positional arguments:
  6. config_file JSON config file to use
  7. optional arguments:
  8. -h, --help show this help message and exit
  9. --log-dir LOG_DIR Directory for log files
  10. --speed-factor SPEED_FACTOR
  11. how fast to run the simulation
  12. --iterations ITERATIONS
  13. how often to run all tests
  14. --abort-early abort on first unsuccessful test
  15. --gui display the visualization for a simulation
  16. --model MODEL only run tests for one model
  17. --case CASE only run tests for one case
  18. --debugger DEBUGGER choice from valgrind, callgrind, gdb, lldb
  19. --verbose enable more verbose output

구현상 참고

  • The tests are invoked from the test runner script mavsdk_test_runner.py, which is written in Python. 이 실행 주체는 px4를 SITL 시험 용도의 가제보와 마찬가지로 시작하며, 처리 과정의 기록을 수집합니다.
  • 시험 진행 주체는 C++ 라이브러리이며, 다음 특징이 있습니다.
    • The main function to parse the arguments.
    • An abstraction around MAVSDK called autopilot_tester.
    • The actual tests using the abstraction around MAVSDK as e.g. test_multicopter_mission.cpp.
    • 시험 코드에서는 catch2 단위 시험 프레임워크를 활용합니다. 이 프레임워크를 사용하고자 하는 동기는 다음과 같습니다:
      • 함수 내부에 존재할 수 있는 시험 대상을 멈춰야 할 경우에 대해 단언(REQUIRE) 합니다(그리고 gtest 시험과 같이 최상위의 시험만 진행하는것은 아닙니다).
      • catch2에 헤더만 있는 라이브러리를 넣을 수 있기 때문에 의존 관리가 간편해집니다.
      • catch2에서 시험 과정의 유연한 조합을 허용하는 tag를 지원합니다.

활용 용어: