网站翻译由林建有提供支持
目录
1 引言
FATE是一种客户端扩展回归测试套件,同时也是一种服务器端结果汇总和展示手段。
本文档的第一部分介绍如何从FFmpeg源目录使用FATE测试你的ffmpeg二进制文件。第二部分描述如何运行FATE以将结果提交到FFmpeg的FATE服务器。
无论如何,你都可以通过访问以下网站查看公开的FATE结果:
特别推荐给所有向FFmpeg贡献源码的人,因为可以了解某些测试是否在某些平台上因最近的贡献而失败。这通常发生在开发人员无法测试的平台上。
本文档的第二部分介绍如何运行FATE以将你的结果提交到FFmpeg的FATE服务器。如果你想提交结果,请确保你的CPU、操作系统和编译器组合尚未在上述网站中列出。
第三部分提供了关于FATE makefile目标和变量的全面列表。
2 从FFmpeg源目录使用FATE
如果你想在你的机器上运行FATE,你需要拥有所需样本。可以通过fate-rsync构建目标获取样本。在顶级源目录中使用以下命令:
make fate-rsync SAMPLES=fate-suite/ make fate SAMPLES=fate-suite/
以上命令通过命令行传递一个makefile变量来设置样本位置。也可以在源代码配置时设置样本位置,运行configure命令:--samples=<path to the samples directory>之后,你可以在不设置SAMPLESmakefile变量的情况下调用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> at configuration time, e.g. when seeking the highest possible test coverage:
./configure --assert-level=2
注意,提高断言级别可能会影响性能。
要获取测试的完整列表,请运行以下命令:
make fate-list
可以通过指定列表中对应的元素以及fate-
前缀来运行一部分测试,例如:
make fate-ffprobe_compact fate-ffprobe_xml
在发生故障时,只运行部分测试而不是整个测试套件会更容易。
如果要使用自定义包装器运行测试,请传递--target-exec给configure
或设置TARGET_EXECMake变量。
3 将测试结果提交到FFmpeg结果汇总服务器
要将结果提交到服务器,你应该通过命令行脚本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
可以是尚未使用的任何字符串,但建议按照以下模式命名:‘架构-操作系统-编译器-编译器版本’。配置文件本身将在一个shell脚本中被分析,因此可以使用所有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服务器有问题,尝试使用命令ssh
以及一个或多个-v选项可能会有所帮助。这样可以详细输出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
运行FATE测试套件(需要fate-suite数据集)。
5.2 Makefile变量
V
详细级别,可以设置为0、1或2。
- 0:仅显示测试参数
- 1:仅显示测试所使用的命令
- 2:显示所有内容
SAMPLES
指定或在生成时覆盖FATE样本路径,这只在运行回归测试时有效。
THREADS
指定运行回归测试时使用的线程数,十分适合检测线程相关的回归问题。
此变量可以设置为字符串"random",后面可选择跟随数字,例如"random99"。这将导致每个测试使用随机数量的线程。如果指定了数字,该数字将用作线程的最大数量,否则默认最大数量为16。
如果测试失败,使用的线程数将写入错误文件。
THREAD_TYPE
指定测试哪种线程策略,‘slice’ 或者 ‘frame’,默认值为‘slice+frame’
CPUFLAGS
指定CPU标志。
TARGET_EXEC
指定或覆盖用于运行测试的包装器。 选项
TARGET_EXEC
提供了一种方式,用于将FATE包装在valgrind
,qemu-user
或wine
或通过远程目标运行ssh
.GEN
设置为‘1’以生成遗失或不匹配的参考。
HWACCEL
指定运行回归测试时使用的硬件加速,默认使用‘none’。
KEEP
设置为‘1’以保留成功测试生成的临时文件。默认值为‘0’,会删除这些文件。测试失败时总是保留文件。
5.3 示例
make V=1 SAMPLES=/var/fate/samples THREADS=2 CPUFLAGS=mmx fate
本文档使用以下工具生成makeinfo.
托管服务由以下机构提供telepoint.bg