教程菜单 本页目录

FATE 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,您需要准备好样本。您可以通过构建目标 fortune-rsync 获取样本。从顶级源目录中使用此命令:

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

上述命令通过命令行传递 makefile 变量来设置样本位置。也可以在源配置时通过使用 --samples=<path to the samples directory> 调用 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

您可以通过使用 fat- 前缀指定列表中的相应元素来指定要运行的测试子集,例如:

make fate-ffprobe_compact fate-ffprobe_xml

这样,在发生故障时,无需运行完整的测试套件,即可更轻松地运行一些测试。

要使用自定义包装器运行测试,请传递 --target-exec 以配置或设置 TARGET_EXEC Make 变量。

3 将结果提交给 FFmpeg 结果聚合服务器

要将结果提交给服务器,您应该通过 FFmpeg 源中的 shell 脚本 tests/fate.sh 运行 fat。需要使用配置文件作为第一个参数来调用此脚本。

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 脚本,因此可以使用所有 shell 功能。这使您能够根据构建需要设置环境。

对于您的第一次测试运行,fate_recv 变量应为空或注释掉。这将正常运行一切,只是它会省略将结果提交到服务器。以下文件应存在于配置文件中指定的 $workdir 中:

  • configure.log
  • compile.log
  • test.log
  • report
  • version

当一切正常时,您可以创建 SSH 密钥对并将公钥发送给 FATE 服务器管理员,您可以通过电子邮件地址 fat-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套件服务器上拥有帐户的开发人员。如果您上传新样本,请确保它们尽可能小,每个客户端上的空间、网络带宽等都受益于较小的测试用例。还请记住,较旧的签出使用现有的示例文件,这意味着在实践中通常不要替换、删除或覆盖文件,因为这可能会破坏较旧的签出或版本。此外,提交所需的所有样本都应在推送前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 测试套件(需要命运套件数据集)。

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 在远程目标上运行 FATE 的方法。

GEN

设置为“1”以生成缺失或不匹配的引用。

HWACCEL

指定在运行回归测试时要使用的硬件加速,默认情况下使用“无”。

KEEP

设置为“1”以在测试成功时保留由命运测试生成的临时文件。默认值为“0”,删除这些文件。测试失败时始终保留文件。

5.3 示例

make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
本页目录