
JDK 构建后怎么配置 JTReg 并运行第一次 tier1 测试【免费下载链接】jdkJDK main-line development https://openjdk.org/projects/jdk项目地址: https://gitcode.com/GitHub_Trending/jd/jdk你已经在 JDK 源码目录里跑完configure和make images现在想对刚构建出的 JDK 跑一次最基本的回归测试 tier1。这条路径包含三件事让构建系统知道 JTReg 框架在哪里跑 JTReg 测试的前提、执行make test-tier1、从测试摘要和结果目录判断这次运行是否成功。以下内容依据 doc/testing.md 和 doc/building.md。前置条件JDK 源码已完成构建并能验证构建产物./build/*/images/jdk/bin/java -versionmake test这个主目标以 jdk-image 作为被测对象。tier1 属于常见顶层测试之一构建系统为这类测试生成了直接的 make 目标所以不需要手工拼测试框架参数。先让 configure 找到 JTRegJDK 的大部分测试使用 JTReg 框架configure必须知道在哪里找到它。如果 configure 没有自动探测到用--with-jtregpath to jtreg home指向 JTRegbash configure --with-jtreg/path/to/jtreg/path/to/jtreg替换为你本地的 JTReg home即包含lib/jtreg.jar的顶层目录。等价的替代方式是先在环境变量里设置JT_HOME再运行configureexport JT_HOME/path/to/jtreg bash configure关于从哪里获取 JTReg文档说明 OpenJDK 的 Adoption Group 提供近期的 jtreg 构建包做法是下载最新的.tar.gz文件并解压然后让--with-jtreg指向刚解压出来的jtreg目录获取渠道详见 doc/building.md 的 Running Tests 一节。如果你是在跑 configure 时漏掉了这一步重新带上--with-jtreg或JT_HOME执行 configure然后按构建流程继续make images再进入测试。tier1 里到底测什么tier1是最基础的测试层这个层里的测试失败意味着可能存在影响大量 Java 程序的问题。它包括 HotSpot 测试、java.base模块的核心 API 测试和javac编译器测试。由于被多名开发者每天运行tier1 的测试经过挑选和优化目标是跑得快、跑得稳文档给出的参考标准是在常用开发配置下tier1 的单个测试基本都应在 10 秒内跑完。TEST变量里的规格会被解析成完全限定的测试描述符。不指定 test root 时:tier1会展开为所有定义了 tier1 的子组件测试目录例如文档示例jtreg:$(TOPDIR)/test/hotspot/jtreg:tier1 jtreg:$(TOPDIR)/test/jdk:tier1 jtreg:$(TOPDIR)/test/langtools:tier1 ...想确认某个组件贡献了哪些测试可以直接看对应目录的TEST.groups例如 test/jdk/TEST.groups 中把tier1拆成了tier1_part1、tier1_part2、tier1_part3三组分别对应:jdk_lang、:jdk_util以及 math、serviceability sanity、foreign、vector sanity 等目录。运行第一次 tier1在 JDK 顶层目录执行make test-tier1这个目标与make test TESTtier1等价区别只是前者有直接目标、后者更适合 tab 补全也更便于做更复杂的测试选择。如何判断这次测试是否通过测试运行结束时构建系统会打印一份统一格式的摘要。下面是文档给出的样例输出数字与测试套件仅作示例实际值随环境和版本变化 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 不相等的测试会被视为失败对应行用 ... 标记方便定位样例中就是jtreg:jdk/test:tier1有 2 个 FAIL。ERROR 是兜底分类指既没通过、也没被框架判定为 failed 的测试可能表示测试框架错误、超时或其他问题。存在测试失败时make test会以非零退出值结束。结果文件落在两个位置$BUILD指build/下的配置目录build/$BUILD/test-results/$TEST_ID所有测试的结果。TEST_ID是完全限定测试描述符的路径安全形式例如jtreg:jdk/test:tier1对应的TEST_ID是jtreg_jdk_test_tier1。这个路径也会在测试运行结束的日志里打印出来。build/$BUILD/test-support/$TEST_ID额外工作数据。对某些框架该目录里可能有定位测试失败原因有用的信息。首次运行容易踩到的两个坑非 US locale如果你的 locale 不是 US一些测试很可能失败。文档给出的处理Unix 平台运行测试前设置LANGen_USexport LANGen_US make test TESTtier1Windows 或 macOS多数但不是全部情况下用JTREGVM_OPTIONS-Duser.languageen -Duser.countryUS有帮助make test TESTtier1 JTREGVM_OPTIONS-Duser.languageen -Duser.countryUS失败处理器failure handler触发 sudo 密码提示测试失败或超时时jtreg 会运行 failure handler 从系统采集诊断数据其中部分命令使用sudo。如果 sudoers 没有为这些命令做免密配置执行过程中可能弹出密码提示。文档给出两种处理方式本地运行时通常不需要采集这些额外数据可以在 configure 时加--enable-jtreg-failure-handlerno禁用 failure handler如果想保留 failure handler 又不想被提示密码需要编辑 sudoers 配置文档示例为/etc/sudoers.d/sudoers属于系统级修改需要相应权限为运行测试的用户加一条 NOPASSWD 规则例如文档中的示例johndoe ALL(ALL) NOPASSWD: /sbin/dmesg其中johndoe要替换为你运行 jtreg 测试的用户名/sbin/dmesg是 failure handler 会调用的命令之一完整命令列表在test/failure_handler/src/share/conf下的文件中。边界与后续make test依赖源码与测试镜像的构建。之后在没有源码变更的情况下反复跑测试时可以改用test-only它不依赖这部分构建能加快运行。exploded-test目标使用 exploded image 而非 jdk-image适合某些工作流缩短重建时间但并非所有测试都能在 exploded image 上成功运行对第一次 tier1 验证主路径仍然是对 jdk-image 跑test。文档对贡献者的要求是跑所改动区域的测试以及至少能负担得起的前 N 个 tier但至少要跑 tier1。tier2 覆盖更多场景更长、需要特殊配置或不太稳定的测试tier3 包含压力测试与 GUI 测试文档建议低并发TEST_JOBS1或排除 headful 测试tier4 是其余所有测试。【免费下载链接】jdkJDK main-line development https://openjdk.org/projects/jdk项目地址: https://gitcode.com/GitHub_Trending/jd/jdk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考