튜토리얼 메뉴이 페이지의 목차

FATE FFmpeg 자동 테스트 환경

1. 소개

FATE는 클라이언트 측의 확장된 회귀 제품군이자 서버 측의 결과 집계 및 표시를 위한 수단입니다.

이 문서의 첫 번째 부분에서는 FFmpeg 소스 디렉터리에서 FATE를 사용하여 ffmpeg 바이너리를 테스트하는 방법을 설명합니다. 두 번째 부분에서는 FATE를 실행하여 결과를 FFmpeg의 FATE 서버에 제출하는 방법을 설명합니다.

어떤 방식으로든 다음 웹사이트를 방문하면 공개적으로 볼 수 있는 FATE 결과를 볼 수 있습니다.

http://fate.ffmpeg.org/

일부 플랫폼의 일부 테스트가 최근 기여로 인해 중단되었는지 확인할 수 있으므로 FFmpeg에 소스 코드를 기여하는 모든 사람들에게 특히 권장됩니다. 이는 일반적으로 개발자가 테스트할 수 없는 플랫폼에서 발생합니다.

이 문서의 두 번째 부분에서는 FATE를 실행하여 결과를 FFmpeg의 FATE 서버에 제출하는 방법을 설명합니다. 결과를 제출하려면 CPU, OS 및 컴파일러 조합이 위에 언급된 웹사이트에 이미 나열되어 있지 않은지 확인하세요.

세 번째 부분에서는 FATE makefile 대상 및 변수의 포괄적인 목록을 찾을 수 있습니다.

2 FFmpeg 소스 디렉토리에서 FATE 사용

컴퓨터에서 FATE를 실행하려면 샘플이 있어야 합니다. 빌드 대상 Fate-rsync를 통해 샘플을 얻을 수 있습니다. 최상위 소스 디렉터리에서 다음 명령을 사용하세요.

make fate-rsync SAMPLES=fate-suite/
make fate       SAMPLES=fate-suite/

위 명령은 명령줄을 통해 makefile 변수를 전달하여 샘플 위치를 설정합니다. --samples=<샘플 디렉터리 경로>로 구성을 호출하여 소스 구성 시 샘플 위치를 설정할 수도 있습니다. 나중에 SAMPLES makefile 변수를 설정하지 않고도 makefile 대상을 호출할 수 있습니다. 이는 다음 명령으로 설명됩니다.

./configure --samples=fate-suite/
make fate-rsync
make fate

FATE에 샘플 디렉터리의 위치를 알리는 또 다른 방법은 환경 변수 FATE_SAMPLES에 샘플 디렉터리 경로가 포함되어 있는지 확인하는 것입니다. 이는 다음과 같은 방법으로 달성할 수 있습니다. 해당 변수를 쉘 프로필에 넣거나 대화형 세션에서 설정합니다.

FATE_SAMPLES=fate-suite/ make fate

홈 디렉터리를 나타내기 위해 샘플 경로에 '~' 문자를 넣지 마십시오. 쉘의 미묘한 차이로 인해 FATE가 실패하게 됩니다.

일부 주장은 기본적으로 비활성화되어 있으므로 --assert-level=<level> 구성 시, 예: 가능한 가장 높은 테스트 범위를 추구할 때:

./configure --assert-level=2

어설션 수준을 높이면 성능에 영향을 미칠 수 있습니다.

전체 테스트 목록을 얻으려면 다음 명령을 실행하십시오.

make fate-list

운명 접두사가 있는 목록에서 해당 요소를 지정하여 실행할 테스트의 하위 집합을 지정할 수 있습니다. 다음과 같이:

make fate-ffprobe_compact fate-ffprobe_xml

이렇게 하면 실패할 경우 전체 테스트 모음을 실행하지 않고도 몇 가지 테스트를 더 쉽게 실행할 수 있습니다.

사용자 정의 래퍼를 사용하여 테스트를 실행하려면 --target-exec를 전달하여 TARGET_EXEC Make 변수를 구성하거나 설정합니다.

3 FFmpeg 결과 집계 서버에 결과 제출

결과를 서버에 제출하려면 FFmpeg 소스에서 쉘 스크립트 테스트/fate.sh를 통해 운명을 실행해야 합니다. 이 스크립트는 구성 파일을 첫 번째 인수로 사용하여 호출해야 합니다.

tests/fate.sh /path/to/fate_config

개별 구성 변수를 설명하는 설명이 포함된 구성 파일 템플릿은 doc/fate_config.sh.template에서 찾을 수 있습니다.

언급된 구성 템플릿은 여기에서도 사용할 수 있습니다.

slot=                                    # some unique identifier
repo=git://source.ffmpeg.org/ffmpeg.git  # the source repository
#branch=release/2.6                       # the branch to test
samples=                                 # path to samples directory
workdir=                                 # directory in which to do all the work
#fate_recv="ssh -T fate@fate.ffmpeg.org" # command to submit report
comment=                                 # optional description
build_only=     # set to "yes" for a compile-only instance that skips tests
ignore_tests=

# the following are optional and map to configure options
arch=
cpu=
cross_prefix=
as=
cc=
ld=
target_os=
sysroot=
target_exec=
target_path=
target_samples=
extra_cflags=
extra_ldflags=
extra_libs=
extra_conf=     # extra configure options not covered above

#make=          # name of GNU make if not 'make'
makeopts=       # extra options passed to 'make'
#makeopts_fate= # extra options passed to 'make' when running tests,
                # defaulting to makeopts above if this is not set
#tar=           # command to create a tar archive from its arguments on stdout,
                # defaults to 'tar c'
#fate_targets=  # targets to make when running fate; defaults to "fate",
                # can be set to run a subset of tests, e.g. "fate-checkasm".

#fate_environments=  # a list of names of configurations to run tests for;
                     # each round is run with variables from ${${name}_env} set.

# One example of using fate_environments:

# target_exec="qemu-aarch64-static"
# fate_targets="fate-checkasm fate-cpu"
# fate_environments="sve128 sve256"
# sve128_env="QEMU_CPU=max,sve128=on"
# sve256_env="QEMU_CPU=max,sve256=on"

# The variables set by fate_environments can also be used explicitly
# by target_exec, e.g. like this:

# target_exec="qemu-aarch64-static -cpu \$(MY_CPU)"
# fate_targets="fate-checkasm fate-cpu"
# fate_environments="sve128 sve256"
# sve128_env="MY_CPU=max,sve128=on"
# sve256_env="MY_CPU=max,sve256=on"

구성 템플릿을 기반으로 요구 사항에 맞는 구성을 만듭니다. 슬롯 구성 변수는 아직 사용되지 않은 모든 문자열이 될 수 있지만 'arch-os-compiler-compiler version' 패턴을 준수하여 이름을 지정하는 것이 좋습니다. 구성 파일 자체는 쉘 스크립트에서 제공되므로 모든 쉘 기능을 사용할 수 있습니다. 이를 통해 빌드에 필요한 환경을 설정할 수 있습니다.

첫 번째 테스트 실행의 경우 운명_recv 변수는 비어 있거나 주석 처리되어야 합니다. 결과를 서버에 제출하는 것을 생략한다는 점을 제외하면 모든 것이 정상적으로 실행됩니다. 구성 파일에 지정된 대로 $workdir에 다음 파일이 있어야 합니다.

  • 구성.로그
  • 컴파일.로그
  • 테스트.로그
  • 보고서
  • 버전

모든 것이 제대로 작동하면 SSH 키 쌍을 생성하고 전자 메일 주소 FATE-admin@ffmpeg.org로 연락할 수 있는 FATE 서버 관리자에게 공개 키를 보낼 수 있습니다.

FATE 서버에 연결할 때 해당 키로 공개 키 인증을 사용하도록 SSH 클라이언트를 구성하십시오. 또한 서버의 신원을 확인하고 호스트 키를 승인하는 것을 잊지 마십시오. 일반적으로 SSH 클라이언트를 수동으로 실행하고 키를 수락한 후 종료하면 됩니다. FATE 서버의 지문은 다음과 같습니다.

'RSA'

d3:f1:83:97:a4:75:2b:a6:fb:d6:e8:aa:81:93:97:51

'ECDSA'

76:9f:68:32:04:1e:d5:d4:ec:47:3f:dc:fc:18:17:86

FATE 서버에 연결하는 데 문제가 있는 경우 하나 이상의 -v 옵션을 사용하여 ssh 명령을 실행해 보는 것이 도움이 될 수 있습니다. SSH 구성 및 인증 프로세스에 관한 자세한 출력을 얻어야 합니다.

이제 남은 것은 Fate.sh 스크립트 실행과 샘플 디렉터리 동기화를 자동화하는 것뿐입니다.

4 Fate Suite에 새로운 샘플 업로드

샘플 업로드가 필요한 경우 샘플 요청으로 메일을 보내주세요.

이는 Fate Suite 서버에 계정이 있는 개발자를 위한 것입니다. 새 샘플을 업로드하는 경우 샘플이 가능한 작은지 확인하고 각 클라이언트의 공간, 네트워크 대역폭 등이 더 작은 테스트 사례에서 이점을 얻을 수 있도록 하십시오. 또한 이전 체크아웃은 기존 샘플 파일을 사용한다는 점을 명심하세요. 즉, 실제로는 이전 체크아웃이나 릴리스가 손상될 수 있으므로 파일을 교체, 제거 또는 덮어쓰지 않는다는 의미입니다. 또한 커밋에 필요한 모든 샘플은 푸시 전, 이상적으로는 24시간 전에 업로드되어야 합니다. 샘플을 자주 업로드하기 위해 계정이 필요하거나 이를 통해 다른 사람을 돕고 싶다면 ffmpeg-devel에 메일을 보내세요.

#First update your local samples copy:
rsync -vauL --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X fate-suite.ffmpeg.org:/home/samples/fate-suite/ ~/fate-suite

#Then do a dry run checking what would be uploaded:
rsync -vanL --no-g --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X ~/fate-suite/ fate-suite.ffmpeg.org:/home/samples/fate-suite

#Upload the files:
rsync -vaL  --no-g --chmod=Dg+s,Duo+x,ug+rw,o+r,o-w,+X ~/fate-suite/ fate-suite.ffmpeg.org:/home/samples/fate-suite

5 FATE makefile 대상 및 변수

5.1 Makefile 타겟

운명-rsync

구성된 샘플 디렉터리에 샘플 파일을 다운로드/동기화합니다.

운명 목록

모든 운명/회귀 테스트 대상을 나열합니다.

운명

FATE 테스트 스위트를 실행하십시오(fate-suite 데이터세트 필요).

5.2 Makefile 변수

V

상세 수준은 0, 1 또는 2로 설정할 수 있습니다.

0: 테스트 인수만 표시

1: 테스트에 사용된 명령만 표시

2: 모든 것을 보여줘

견본

작성 시 FATE 샘플에 대한 경로를 지정하거나 재정의합니다. 이는 회귀 테스트를 실행하는 동안에만 의미가 있습니다.

스레드

회귀 테스트를 실행하는 동안 사용할 스레드 수를 지정하면 스레드 관련 회귀를 감지하는 데 매우 유용합니다.

이 변수는 문자열 "random"으로 설정될 수 있으며 선택적으로 "random99"와 같은 숫자가 뒤에 올 수 있습니다. 이렇게 하면 각 테스트에서 임의의 개수의 스레드를 사용하게 됩니다. 숫자를 지정하면 최대 스레드 수로 사용되며, 지정하지 않으면 16이 최대값입니다.

테스트가 실패하는 경우 테스트에 사용된 스레드 수가 errfile에 기록됩니다.

THREAD_TYPE

기본적으로 '슬라이스+프레임'으로 '슬라이스' 또는 '프레임' 중 어떤 스레딩 전략 테스트를 지정합니다.

CPU플래그

CPU 플래그를 지정합니다.

TARGET_EXEC

테스트를 실행하는 데 사용되는 래퍼를 지정하거나 재정의합니다. TARGET_EXEC 옵션은 valgrind, qemu-user 또는 wine으로 래핑되거나 SSH를 통해 원격 대상에서 FATE를 실행하는 방법을 제공합니다.

세대

누락되거나 일치하지 않는 참조를 생성하려면 '1'로 설정합니다.

화셀

회귀 테스트를 실행하는 동안 사용할 하드웨어 가속을 지정합니다. 기본적으로 '없음'이 사용됩니다.

유지하다

테스트가 성공할 때 운명 테스트에 의해 생성된 임시 파일을 유지하려면 '1'로 설정합니다. 기본값은 '0'이며, 이러한 파일을 제거합니다. 테스트가 실패하면 파일은 항상 유지됩니다.

5.3 예

make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
댓글 목록
로드 중..