테스트 작성

MicroPython의 테스트는 tests/ 경로에 위치합니다. 다음은 주요 디렉터리와 run-tests.py 러너 스크립트의 목록입니다:

.
 ├── basics
 ├── extmod
 ├── float
 ├── micropython
 ├── run-tests.py
 ...

테스트를 분류하기 위해 하위 폴더가 유지됩니다. 기존 폴더 중 하나 또는 새 폴더에 새 파일을 만들어 테스트를 추가하세요. 이 tests 폴더 외부에 사용자 정의 테스트를 만드는 것도 가능하며, 이는 사용자 정의 포트에 권장됩니다.

예를 들어, tests/unix/ 하위 디렉터리의 print.py 파일에 다음 코드를 추가하세요:

def print_one():
    print(1)

print_one()

테스트를 실행하면 이 테스트가 테스트 출력에 나타나야 합니다:

$ cd ports/unix
$ make tests
skip  unix/extra_coverage.py
pass  unix/ffi_callback.py
pass  unix/ffi_float.py
pass  unix/ffi_float2.py
pass  unix/print.py
pass  unix/time.py
pass  unix/time2.py

테스트는 테스트 대상의 출력을 CPython의 출력과 비교하여 실행됩니다. 따라서 모든 테스트는 print 문을 사용하여 테스트 결과를 나타내야 합니다.

CPython과 비교할 수 없는 테스트(즉 micropython 고유 기능)의 경우, 비교를 위한 기준으로 사용될 .py.exp 파일을 제공할 수 있습니다.

Unix 포트 외의 대상에서 실행할 때 유용한 또 다른 테스트 실행 방법은 다음과 같습니다:

$ cd tests
$ ./run-tests.py

그런 다음 보드에서 실행하려면:

$ ./run-tests.py -t /dev/ttyACM0

그리고 특정 테스트 집합(예: 디렉터리)만 실행하려면:

$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py

run-tests.py 사용하기

run-tests.py 스크립트는 테스트 실행을 사용자 정의하기 위한 여러 매개변수를 지원합니다:

대상 및 장치 선택:

  • -t, --test-instance

-t 옵션은 테스트 인스턴스에 대해 다음을 허용합니다:

  • unix - MICROPY_MICROPYTHON 환경 변수로 지정된 MicroPython의 unix 포트를 사용합니다(이는 호스트 플랫폼에 따라 unix 또는 windows 포트의 표준 변형으로 기본 설정됩니다)

  • webassembly - MICROPY_MICROPYTHON_MJS 환경 변수로 지정된 MicroPython의 webassembly 포트를 사용합니다(이는 webassembly 포트의 표준 변형으로 기본 설정됩니다)

  • port:<device> - 주어진 시리얼 포트 장치에 연결하여 사용합니다

  • a<n> - /dev/ttyACM<n>에 연결하여 사용합니다

  • u<n> - /dev/ttyUSB<n>에 연결하여 사용합니다

  • c<n> - COM<n>에 연결하여 사용합니다

  • exec:<command> - 명령을 실행하고 그 stdin/stdout에 연결합니다

  • execpty:<command> - 명령을 실행하고 출력된 /dev/pts/<n> 장치에 연결합니다

  • <a>.<b>.<c>.<d> - 주어진 IPv4 주소에 연결합니다

  • 그 외의 것은 시리얼 포트를 지정합니다

테스트 선택:

  • -d, --test-dirs - 실행할 하나 이상의 테스트 디렉터리를 지정합니다

  • -i, --include REGEX - 정규식 패턴과 일치하는 테스트를 포함합니다

  • -e, --exclude REGEX - 정규식 패턴과 일치하는 테스트를 제외합니다

  • files - 실행할 특정 테스트 파일

실행 옵션:

  • --emit <EMITTER> - MicroPython 에미터, EMITTER는 bytecode 또는 native일 수 있습니다. 기본값: bytecode

  • --via-mpy - 먼저 .py 파일을 .mpy로 컴파일합니다

  • --heapsize - 테스트의 힙 크기를 설정합니다

  • -j, --jobs N - 동시에 실행할 테스트 수

--via-mpy 를 사용할 때 특정 버전의 mpy-cross 를 사용하려면 MICROPY_MPYCROSS 환경 변수를 설정하세요.

결과 관리:

  • -r, --result-dir - 테스트 결과를 위한 디렉터리. 기본값: results/

  • --print-failures - 실패한 테스트의 diff를 표시하고 종료합니다

  • --clean-failures - 이전에 실패한 테스트의 .exp 및 .out 파일을 삭제합니다

  • --run-failures - 이전에 실패한 테스트만 다시 실행합니다

예시:

# Run only basic tests with native emitter
$ ./run-tests.py --emit native -d basics extmod

# Run tests excluding async functionality
$ ./run-tests.py -e async

# Run tests matching *_pep_*
$ ./run-tests.py -i *_pep_*

# Run specific test files in parallel
$ ./run-tests.py -j 4 basics/list*.py

# Test on a connected OpenMV Cam
$ ./run-tests.py -t /dev/ttyACM0
# or
$ ./run-tests.py -t a0

# Re-run only failed tests from previous run
$ ./run-tests.py --run-failures