news 2026/9/14 10:37:57

JDK 的 make test 测试摘要怎么读?FAIL 与 ERROR 标记和 test-results 结果目录在哪

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JDK 的 make test 测试摘要怎么读?FAIL 与 ERROR 标记和 test-results 结果目录在哪

JDK 的 make test 测试摘要怎么读?FAIL 与 ERROR 标记和 test-results 结果目录在哪

【免费下载链接】jdkJDK main-line development https://openjdk.org/projects/jdk项目地址: https://gitcode.com/GitHub_Trending/jd/jdk

本地构建过 JDK 之后,用make test跑完一轮测试,终端会打印一份固定的 Test summary。新手最常卡住的两个问题:看到>> jtreg:jdk/test:tier1 ... <<这种行不知道该不该管、FAILERROR两列到底有什么区别,以及测试失败的详细日志到底存在哪个目录里。本文基于 JDK 仓库自带的 doc/testing.md 与 doc/building.md,说明这份摘要的读法、两种非 PASS 标记的含义,以及test-results结果目录的定位方式。

前提:已经本地构建过 JDK

make test的前提是“已在本地完成 JDK 构建”(doc/testing.md 原文:“Assuming you've built the JDK locally”)。默认主目标test以构建出的 jdk-image 作为被测对象。如果你的工作流是反复修改源码、需要加快重建速度,文档给出了替代目标exploded-test,它使用 exploded image 而不是 jdk-image;注意并非所有测试都能在 exploded image 上成功运行,这是可选分支,不是默认路径。

另外,JTReg 是 JDK 的主力测试框架,configure必须能找到 JTReg。如果没有被自动识别,用--with-jtreg=<path to jtreg home>指向 JTReg home(即包含lib/jtreg.jar的顶层目录),或者在运行configure前设置JT_HOME环境变量。

运行测试并等待摘要输出

最简单的启动方式:

make test

这会对 JDK 运行一组默认测试,并在结束后打印统一格式的摘要。也可以只跑某个分组,例如:

make test-tier1 make test TEST="jdk_lang"

make test-tier1等价于make test TEST="tier1",后者更利于 shell 补全。如果源码没改动、只想重跑测试,可以用test-only代替test,它不依赖源码与 test image 的重建。

逐列读取 Test summary

测试跑完后会输出类似下面的摘要(以下为源文档中的示例结果,具体数字以你自己运行的输出为准):

============================== Test summary ============================== TEST TOTAL PASS FAIL ERROR >> jtreg:jdk/test:tier1 1867 1865 2 0 << jtreg:langtools/test:tier1 4711 4711 0 0 jtreg:nashorn/test:tier1 133 133 0 0 ============================== TEST FAILURE

判断规则在文档里只有一条:

  • TOTAL 不等于 PASS 的行就是失败行,会被>> ... <<标记出来以便快速定位。摘要下方还会打印TEST FAILURE段。
  • 只要存在测试失败,make test会以非零退出码结束——脚本或 CI 里可以直接用退出码判断这一轮是否通过。

摘要中的 TEST 列是全限定测试描述符(例如jtreg:jdk/test:tier1),能看出结果来自哪个测试框架、哪个测试根、哪个分组。

FAIL 与 ERROR 有什么区别

文档的原文解释是:非 PASS 测试的分类在各测试框架之间略有差异,ERROR是一个兜底分类,用于“既没有 PASS、也没有被框架归类为 FAIL”的测试。出现 ERROR 可能意味着测试框架本身的错误、超时或其他问题。

也就是说,读到摘要时:

  • FAIL > 0:框架明确判定该测试失败,去结果目录看该测试的输出即可。
  • ERROR > 0:不一定是测试逻辑本身失败,框架错误、超时也会归到这一列,需要结合结果目录里的日志进一步看。文档到此为止,没有对 ERROR 给出更细的判别表,不要按经验自行扩展成固定结论。

FAILERROR合计等于TOTAL - PASS,所以“哪一行需要跟进”只看>> ... <<标记就够了。

test-results 结果目录在哪

每个测试的结果都存放在构建输出目录下的test-results中。doc/testing.md 的写法是:

build/$BUILD/test-results/$TEST_ID

其中$BUILD在 doc/building.md 中被定义为该配置的构建输出目录build/<configuration name><configuration name>configure时生成或指定的配置名,如linux-x64-server-release)。两点提醒:

  1. TEST_ID是全限定测试描述符的“path-safe”转换,即把:/换成_。文档给出的例子:jtreg:jdk/test:tier1对应TEST_IDjtreg_jdk_test_tier1
  2. 最省事的定位方式:每个测试结果目录的完整路径会在测试结束时的日志里直接打印,直接从结尾日志里复制即可,不必手工拼接。

除了test-results,文档还指出额外的工作数据存放在test-support/$TEST_ID下(同样位于构建输出目录内)。对于某些测试框架,该目录可能包含有助于判断失败原因的信息,排查失败时两个目录都值得一看。

顺带一个相关细节:JTReg 的RETAIN关键字默认值为fail,error,即默认只保留失败和 ERROR 测试的数据,所以上面两个目录里能稳定找到的正是需要跟进的那部分测试。

一个可照做的排查顺序

  1. make test(或make test-tier1缩小范围),等 Test summary 打印完。
  2. 只看带>> ... <<的行,确认是FAIL列还是ERROR列非零:FAIL 按测试失败处理;ERROR 注意可能是框架错误或超时。
  3. 到测试结束日志中复制对应TEST_ID的结果目录路径(test-results/$TEST_ID),查看该测试的详细输出;需要时再看同名的test-support/$TEST_ID工作数据目录。
  4. make test的退出码作为这一轮是否整体通过的机器判据。

边界与限制

  • 本文只覆盖摘要本身与结果目录的定位。文档没有给出“ERROR 具体怎么逐类区分”的判定表,遇到 ERROR 时以结果目录里的实际日志为准,不要预设固定结论。
  • 默认make test使用 jdk-image 作为被测对象;换成exploded-test时部分测试可能无法成功运行,两者结果不能直接互换比较。
  • 摘要中各列的数字来自你本次实际运行的输出;本文给出的摘要只是 doc/testing.md 中的示例,不代表任何固定的预期值。

【免费下载链接】jdkJDK main-line development https://openjdk.org/projects/jdk项目地址: https://gitcode.com/GitHub_Trending/jd/jdk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 10:37:47

InstaPy 如何手动指定 geckodriver 二进制路径?

InstaPy 如何手动指定 geckodriver 二进制路径&#xff1f; 【免费下载链接】InstaPy &#x1f4f7; Instagram Bot - Tool for automated Instagram interactions 项目地址: https://gitcode.com/GitHub_Trending/in/InstaPy InstaPy 通过 Selenium 驱动 Firefox 完成自…

作者头像 李华
网站建设 2026/9/14 10:37:27

新能源电力系统调度:鲁棒优化与N-1安全校验实践

1. 项目背景与核心挑战在新能源占比持续攀升的现代电力系统中&#xff0c;调度决策面临着前所未有的复杂性。传统调度方法在高比例可再生能源场景下暴露出三个致命缺陷&#xff1a;面对风电、光伏出力的强随机性时要么过于保守导致经济性损失&#xff0c;要么过于激进带来运行风…

作者头像 李华
网站建设 2026/9/14 10:34:38

区间覆盖贪心模型:从经典问题到跳跃游戏II的解法转换

在贪心算法里&#xff0c;区间覆盖是我最常拿来跟人“安利”的一类问题。它的贪心策略看起来非常直观——每一步都选覆盖到最远处的区间&#xff0c;可真正动手写代码时&#xff0c;很多人会栽在“什么时候计数、什么时候更新边界”这些细节上。今天这篇想聊的&#xff0c;是区…

作者头像 李华
网站建设 2026/9/14 10:33:25

企业级Agent平台:从超级个体到超级团队的协作基座与落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 10:29:03

SpringBoot交友平台开发:毕业设计实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 10:27:57

MyBatis Plus SQL日志接入ELK:实现按traceId追踪请求执行链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华