測試

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 中定義的測試名稱。