运行测试

本页将介绍如何在 Linux 和 Windows 环境中运行 deqp 测试、如何使用命令行参数,以及如何使用 Android 应用包。

Linux 与 Windows 环境

首先,请将以下文件及目录复制到目标中。

模块 目录 目标
执行服务器 build/execserver/execserver <dst>/execserver
EGL 模块 build/modules/egl/deqp-egl <dst>/deqp-egl
GLES2 模块 build/modules/gles2/deqp-gles2 <dst>/deqp-gles2
data/gles2 <dst>/gles2
GLES3 模块 build/modules/gles3/deqp-gles3 <dst>/deqp-gles3
data/gles3 <dst>/gles3
GLES3.1 模块 build/modules/gles31/deqp-gles31 <dst>/deqp-gles31
data/gles31 <dst>/gles31
GLES3.2 模块 build/modules/gles32/deqp-gles32 <dst>/deqp-gles32
data/gles32 <dst>/gles32

您可以在目标文件系统的任意位置部署执行服务和测试二进制文件,但是测试二进制文件需要在当前的工作目录中查找数据目录。准备就绪后,在目标设备上启动测试执行服务。有关如何启动服务的详细信息,请参阅测试执行服务一节。

命令行参数

下表列出了影响所有测试程序执行的命令行参数。

参数 说明
--deqp-case=<casename> 运行与指定模式匹配的用例。支持通配符 (*)。
--deqp-log-filename=<filename> 将测试结果写入文件,文件名由您提供。测试执行服务将在开始测试时设置文件名。
--deqp-stdin-caselist
--deqp-caselist=<caselist>
--deqp-caselist-file=<filename>
通过 stdin 或指定的参数读取用例列表。测试执行服务将根据收到的执行请求设置参数。有关用例列表格式的说明,请参阅下一节。
--deqp-test-iteration-count=<count> 覆盖迭代次数可变的测试的迭代计数。
--deqp-base-seed=<seed> 为采用随机测试的测试用例设定种子。

特定于 GLES2 及 GLES3 的参数

下表列出了特定于 GLES2 及 GLES3 的参数。
参数 说明
--deqp-gl-context-type=<type> OpenGL 上下文类型。提供的上下文类型取决于平台。在支持 EGL 的平台上,值 egl 可用于选择 EGL 上下文。
--deqp-gl-config-id=<id> 对所提供的 GL 配置 ID 运行测试。解译取决于平台。在 EGL 平台上,该配置 ID 为 EGL 配置 ID。
--deqp-gl-config-name=<name> 对已命名的 GL 配置运行测试。解译取决于平台。对于 EGL,格式为 rgb(a)<bits>d<bits>s<bits>。例如,值 rgb888s8 会选择第一个配置,其中颜色缓冲区为 RGB888,模板缓冲区为 8 位。
--deqp-gl-context-flags=<flags> 创建一个上下文。指定 robustdebug
--deqp-surface-width=<width>
--deqp-surface-height=<height>
尝试使用指定的尺寸创建表面。对这项功能的支持为可选项。
--deqp-surface-type=<type> 将指定的表面类型用作主测试渲染目标。可取类型为 windowpixmappbufferfbo
--deqp-screen-rotation=<rotation> 对于支持该参数的平台,屏幕方向的旋转增量为 90 度。

测试用例列表格式

测试用例列表有两种格式。第一种选项是在标准 ASCII 文件的单独一行中列出每个测试的全名。随着测试集的增长,重复添加前缀可能会很麻烦。为避免重复添加前缀,可使用以下所示的 trie(也称为前缀树)语法。

{nodeName{firstChild{…},…lastChild{…}}}

例如:

{dEQP-EGL{config-list,create_context{rgb565_depth_stencil}}}

会转换为以下两个测试用例:

dEQP-EGL.config_list
dEQP-EGL.create_context.rgb565_depth_stencil

Android

Android 应用包包含所需的所有组件,包括测试执行服务、测试二进制文件和数据文件。测试 Activity 是使用 EGL 的 NativeActivity(需要 Android 3.2 或更高版本)。

应用包可使用以下命令安装(所示名称为 Android CTS 包中 APK 的名称;该名称因版本而异):

adb –d install –r com.drawelements.deqp.apk

要启动测试执行服务并设置端口转发,请使用以下命令:

adb –d forward tcp:50016 tcp:50016
adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter

在开始测试之前,可执行以下命令来启用调试打印:

adb –d shell setprop log.tag.dEQP DEBUG

在没有 Android CTS 的 Android 设备上执行测试

要手动启动测试执行 Activity,请构建一个目标为 android.app.NativeActivity 的 Android Intent。这些 Activity 可以在 com.drawelements.deqp 包中找到。在 Intent 中,命令行必须以含 "cmdLine" 键的额外字符串提供。

测试日志会写入 /sdcard/dEQP-log.qpa。若测试运行无法正常启动,请查看设备日志,了解其他调试信息。

您可使用 am 实用程序从命令行启动 Activity。例如,要在支持 NativeActivity, 的平台上运行 dEQP-GLES2.info 测试,请执行以下命令。

adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \
'cmdLine "deqp --deqp-case=dEQP-GLES2.info.* --deqp-log-filename=/sdcard/dEQP-Log.qpa"'

在 Android 系统上调试

要采用 Android 系统中的 GDB 调试器运行测试,首先要运行以下两个脚本来编译并安装调试版本:

python android/scripts/build.py --native-build-type=Debug
python android/scripts/install.py

当设备上安装调试版本后,要采用主机上运行的 GDB 启动测试,请运行以下命令:

python android/scripts/debug.py \
--deqp-commandline="--deqp-log-filename=/sdcard/TestLog.qpa --deqp-case=dEQP-GLES2.functional.*"

deqp 命令行取决于要执行的测试用例和其他所需参数。脚本会在开始执行 deqp 时添加一个默认断点 (tcu::App::App)。

debug.py 脚本接受多个命令行参数用于相关操作,例如:设置调试断点、gdbserver 连接参数及要调试的其他二进制文件的路径(对于所有参数和解释,都执行 debug.py --help)。该脚本还会从目标设备中复制一些默认库,以获取符号列表。

要逐步检查驱动程序代码(例如,当 GDB 需要了解具有完整调试信息的二进制文件的位置时),请通过 debug.py 命令行参数添加更多的库。该脚本从脚本文件的第 132 行开始写出 GDB 的配置文件。您还可以提供额外的二进制路径等信息,但提供正确的命令行参数就已足够。

注意:在 Windows 上,GDB 二进制文件需要使用 libpython2.7.dll。在启动 debug.py 前,请将 <path-to-ndk>/prebuilt/windows/bin 添加到 PATH 变量中。

注意:本机代码调试不适用于 Android 4.3 及之前的所有版本。有关解决方法,请参考此公开 Bug。Android 4.4 及更高版本不包含此 Bug。