测试

V8 包含一个测试框架,允许您测试引擎。该框架允许您运行我们自己的测试套件(包含在源代码中)和其他测试套件,例如 Test262 测试套件

运行 V8 测试 #

使用 gm,您只需在任何构建目标后附加 .check 即可运行其测试,例如:

gm x64.release.check
gm x64.optdebug.check # recommended: reasonably fast, with DCHECKs.
gm ia32.check
gm release.check
gm check # builds and tests all default platforms

gm 会自动构建运行测试所需的任何目标。您也可以限制要运行的测试

gm x64.release test262
gm x64.debug mjsunit/regress/regress-123

如果您已经构建了 V8,您可以手动运行测试

tools/run-tests.py --outdir=out/ia32.release

同样,您可以指定要运行的测试

tools/run-tests.py --outdir=ia32.release cctest/test-heap/SymbolTable/* mjsunit/delete-in-eval

使用 --help 运行脚本以了解其其他选项。

运行更多测试 #

要运行的默认测试集不包括所有可用测试。您可以在 gmrun-tests.py 的命令行中指定其他测试套件

运行微基准测试 #

test/js-perf-test 下,我们有微基准测试来跟踪功能性能。有一个专门的运行器用于这些测试:tools/run_perf.py。像这样运行它们

tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 test/js-perf-test/JSTests.json

如果您不想运行所有 JSTests,您可以提供一个 filter 参数

tools/run_perf.py --arch x64 --binary-override-path out/x64.release/d8 --filter JSTests/TypedArrays test/js-perf-test/JSTests.json

更新检查器测试预期 #

更新测试后,您可能需要为其重新生成预期文件。您可以通过运行以下命令来实现

tools/run-tests.py --regenerate-expected-files --outdir=ia32.release inspector/debugger/set-instrumentation-breakpoint

这在您想了解测试输出如何改变时也很有用。首先使用上面的命令重新生成预期文件,然后检查与

git diff

更新字节码预期(重新基线) #

有时字节码预期可能会发生变化,导致 cctest 失败。要更新黄金文件,请通过运行以下命令构建 test/cctest/generate-bytecode-expectations

gm x64.release generate-bytecode-expectations

…然后通过将 --rebaseline 标志传递给生成的二进制文件来更新默认的输入集

out/x64.release/generate-bytecode-expectations --rebaseline

更新后的黄金文件现在位于 test/cctest/interpreter/bytecode_expectations/ 中。

添加新的字节码预期测试 #

  1. cctest/interpreter/test-bytecode-generator.cc 中添加一个新的测试用例,并指定一个具有相同测试名称的黄金文件。

  2. 构建 generate-bytecode-expectations

    gm x64.release generate-bytecode-expectations
  3. 运行

    out/x64.release/generate-bytecode-expectations --raw-js testcase.js --output=test/cctest/interpreter/bytecode-expectations/testname.golden

    其中 testcase.js 包含添加到 test-bytecode-generator.cc 的 JavaScript 测试用例,testname 是在 test-bytecode-generator.cc 中定义的测试名称。