目錄
1 簡介
FATE 是一個擴展的回歸測試套件,在客戶端用於測試,在伺服器端用於結果彙整和呈現。
本文檔的第一部分說明如何從您的 FFmpeg 原始碼目錄使用 FATE 來測試您的 ffmpeg 二進制檔案。第二部分描述如何運行 FATE 以將結果提交至 FFmpeg 的 FATE 伺服器。
您隨時可以造訪此網站查看公開的 FATE 結果
這特別推薦給所有貢獻 FFmpeg 原始碼的人員,因為可以查看他們的最新貢獻是否在某些平台上造成測試失敗。這通常發生在開發者無法在其平台上進行測試的情況下。
本文檔的第二部分描述如何運行 FATE 以將您的結果提交至 FFmpeg 的 FATE 伺服器。如果您想要提交您的結果,請務必檢查您的 CPU、作業系統和編譯器的組合是否已列在上述網站上。
在第三部分,您可以找到 FATE makefile 目標和變數的完整列表。
2 從您的 FFmpeg 原始碼目錄使用 FATE
如果您想在您的機器上運行 FATE,您需要準備好範例。您可以透過 build 目標 fate-rsync 取得範例。從頂層原始碼目錄使用此命令
make fate-rsync SAMPLES=fate-suite/ make fate SAMPLES=fate-suite/
上述命令透過命令行傳遞 makefile 變數來設定範例位置。也可以在原始碼配置時透過使用 --samples=<範例目錄路徑> 調用 configure 來設定範例位置。之後,您可以調用 makefile 目標,而無需設定 SAMPLES makefile 變數。以下命令說明了這一點
./configure --samples=fate-suite/ make fate-rsync make fate
另一種告知 FATE 範例目錄位置的方法是確保環境變數 FATE_SAMPLES 包含您的範例目錄路徑。這可以透過例如將該變數放入您的 shell 設定檔或在您的互動式會話中設定它來實現。
FATE_SAMPLES=fate-suite/ make fate
不要在範例路徑中使用 ’~’ 字元來表示主目錄。由於 shell 的細微差別,這將導致 FATE 失敗。
請注意,某些斷言預設為停用,因此請注意在配置時設定 --assert-level=<level>,例如,當尋求盡可能高的測試覆蓋率時
./configure --assert-level=2
請注意,提高斷言級別可能會對效能產生影響。
要取得完整的測試列表,請運行命令
make fate-list
您可以透過指定列表中帶有 fate-
前綴的相應元素來指定要運行的測試子集,例如
make fate-ffprobe_compact fate-ffprobe_xml
這使得在發生故障時更容易運行一些測試,而無需運行完整的測試套件。
要使用自訂包裝器來運行測試,請將 --target-exec 傳遞給 configure
或設定 TARGET_EXEC Make 變數。
3 將結果提交至 FFmpeg 結果彙整伺服器
要將您的結果提交到伺服器,您應該從 FFmpeg 原始碼透過 shell 腳本 tests/fate.sh 運行 fate。此腳本需要以配置文件作為其第一個參數來調用。
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"
根據配置範本,建立適合您需求的配置。slot
配置變數可以是任何尚未使用的字串,但建議您按照以下模式命名它 ‘arch-os-compiler-compiler version’。配置文件本身將在 shell 腳本中被 sourced,因此可以使用所有 shell 功能。這使您能夠根據您的建置需求設定環境。
對於您的首次測試運行,fate_recv
變數應該為空或被註解掉。這將像往常一樣運行所有內容,但會省略將結果提交到伺服器。以下檔案應存在於配置文件中指定的 $workdir 中
- configure.log
- compile.log
- test.log
- report
- version
當您一切正常運作時,您可以建立 SSH 金鑰對,並將公鑰發送給 FATE 伺服器管理員,可以透過電子郵件地址 fate-admin@ffmpeg.org 聯絡。
配置您的 SSH 客戶端以在使用該金鑰連接到 FATE 伺服器時使用公鑰身份驗證。也不要忘記檢查伺服器的身份並接受其主機金鑰。這通常可以透過手動運行您的 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 套件
如果您需要上傳範例,請發送郵件至 samples-request。
這是給在 fate 套件伺服器上擁有帳戶的開發人員使用的。如果您上傳新的範例,請確保它們盡可能小,每個客戶端的空間、網路頻寬等等都會受益於更小的測試案例。另請記住,較舊的 checkout 使用現有的範例檔案,這實際上意味著通常不要替換、刪除或覆蓋檔案,因為這很可能會破壞較舊的 checkout 或發布版本。此外,提交所需的所有範例應在 push 之前(最好是 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 目標
- fate-rsync
下載/同步範例檔案到配置的範例目錄。
- fate-list
將列出所有 fate/回歸測試目標。
- fate-list-failing
列出上次執行失敗的 fate 測試。
- fate-clear-reports
移除先前測試執行的測試報告(擺脫 fate-list-failing 中可能過時的結果)。
- fate
運行 FATE 測試套件(需要 fate-suite 資料集)。
5.2 Makefile 變數
V
詳細程度,可以設定為 0、1 或 2。
- 0:僅顯示測試參數
- 1:僅顯示測試中使用的命令
- 2:顯示所有內容
SAMPLES
在 make 時指定或覆蓋 FATE 範例的路徑,它僅在運行回歸測試時有意義。
THREADS
指定運行回歸測試時要使用的線程數,這對於檢測與線程相關的回歸非常有用。
此變數可以設定為字串 "random",選擇性地後跟一個數字,例如 "random99"。這將導致每個測試使用隨機數量的線程。如果指定了數字,則將其用作最大線程數,否則最大值為 16。
如果測試失敗,則用於測試的線程計數將寫入 errfile。
THREAD_TYPE
指定要測試的線程策略,可以是 ‘slice’ 或 ‘frame’,預設為 ‘slice+frame’
CPUFLAGS
指定 CPU 標誌。
TARGET_EXEC
指定或覆蓋用於運行測試的包裝器。
TARGET_EXEC
選項提供了一種在valgrind
、qemu-user
或wine
中包裝 FATE 運行的方式,或透過ssh
在遠端目標上運行的方式。GEN
設定為 ‘1’ 以產生遺失或不符的參考。
HWACCEL
指定運行回歸測試時要使用的硬體加速,預設使用 ‘none’。
KEEP
設定為 ‘1’ 以在測試成功時保留 fate 測試產生的臨時檔案。預設為 ‘0’,這會移除這些檔案。當測試失敗時,始終保留檔案。
5.3 範例
make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
本文檔於 2025 年 1 月 21 日 使用 makeinfo 生成。
託管由 telepoint.bg 提供