FFmpeg 自動化測試環境

目錄

1 簡介

FATE 是一個擴展的回歸測試套件,在客戶端用於測試,在伺服器端用於結果彙整和呈現。

本文檔的第一部分說明如何從您的 FFmpeg 原始碼目錄使用 FATE 來測試您的 ffmpeg 二進制檔案。第二部分描述如何運行 FATE 以將結果提交至 FFmpeg 的 FATE 伺服器。

您隨時可以造訪此網站查看公開的 FATE 結果

http://fate.ffmpeg.org/

這特別推薦給所有貢獻 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 選項提供了一種在 valgrindqemu-userwine 中包裝 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 提供