測試
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
,以瞭解其其他選項。
執行更多測試 #
預設要執行的測試組不包含所有可用的測試。您可以在 gm
或 run-tests.py
的命令列上指定其他測試套件
benchmarks
(僅限於正確性;不會產生基準測試結果!)mozilla
test262
webkit
執行微基準測試 #
在 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/
中取得。
新增一個新的位元組碼預期測試 #
將一個新的測試案例新增到
cctest/interpreter/test-bytecode-generator.cc
,並指定一個與測試名稱相同的黃金檔案。建置
generate-bytecode-expectations
gm x64.release generate-bytecode-expectations
執行
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
中定義的測試名稱。