终端运行TestNG时如何查看测试执行的实时进度?
在终端运行TestNG时实时查看测试进度的实用方法
嘿,我懂你那种跑大型TestNG测试套件,中途想知道到底跑了多少、成功率咋样的心情——默认的log文件确实只会记录单条测试的细节,不会给实时汇总。下面给你几个实用的解决办法,从简单到灵活都有:
方法1:自定义TestNG监听器(最推荐,灵活可控)
你可以自己写个轻量的监听器,让TestNG在每完成一个测试时就输出汇总进度,不管是终端还是自定义日志文件都能搞定。
比如写个ProgressListener类:
import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; public class ProgressListener implements ITestListener { private int totalTests; private int passed = 0; private int failed = 0; private int skipped = 0; @Override public void onStart(ITestContext context) { totalTests = context.getAllTestMethods().length; System.out.println("\n=== 测试启动,总测试用例数:" + totalTests + " ==="); } @Override public void onTestSuccess(ITestResult result) { passed++; updateProgress(); } @Override public void onTestFailure(ITestResult result) { failed++; updateProgress(); } @Override public void onTestSkipped(ITestResult result) { skipped++; updateProgress(); } private void updateProgress() { int executed = passed + failed + skipped; double progressRate = (executed * 100.0) / totalTests; // 用\r实现同一行刷新,不会刷屏 System.out.printf("\r当前进度:%.1f%% | 已执行:%d/%d | 通过:%d | 失败:%d | 跳过:%d", progressRate, executed, totalTests, passed, failed, skipped); } }
写完后,在你的testng.xml里加上监听器配置:
<listeners> <listener class-name="你的包路径.ProgressListener"/> </listeners>
这样跑测试时,终端会实时更新一行进度信息,中途看终端就能一目了然。要是想把进度存到文件里,运行命令的时候加个>> test-progress.log就行,日志会实时追加。
方法2:用TestNG的 verbose 参数增强默认输出
如果不想写代码,试试给TestNG加-verbose参数,等级设为2,这样终端会实时打印每个测试方法的开始、结束状态,虽然没有直接的汇总,但你能通过滚动记录大概知道跑了多少。
比如直接用Java命令跑:
java -cp "testng.jar:你的测试类路径" org.testng.TestNG -verbose 2 testng.xml
要是用Maven跑的话,加个系统参数就行:
mvn test -Dtestng.verbose=2
这个方法简单快捷,适合临时需要看进度的场景。
方法3:用脚本实时解析TestNG的结果文件
TestNG跑的时候会在test-output目录生成testng-results.xml,这个文件会逐步更新(虽然不是实时写入磁盘,有一点延迟)。你可以写个小脚本定时读取它,解析出已执行的测试数。
比如写个简单的bash脚本,开个新终端窗口运行:
#!/bin/bash RESULTS_FILE="test-output/testng-results.xml" while true; do if [ -f "$RESULTS_FILE" ]; then total=$(grep -c "<test-method" "$RESULTS_FILE") passed=$(grep -c "status=\"PASS\"" "$RESULTS_FILE") failed=$(grep -c "status=\"FAIL\"" "$RESULTS_FILE") skipped=$(grep -c "status=\"SKIP\"" "$RESULTS_FILE") echo "$(date +"%H:%M:%S") - 进度:已执行 $total | 通过 $passed | 失败 $failed | 跳过 $skipped" else echo "测试结果文件还没生成呢..." fi sleep 5 # 每5秒查一次 done
这个脚本会每隔5秒输出一次汇总数据,缺点是依赖TestNG更新xml文件的速度,可能会慢个几秒,但胜在不用改测试代码。
内容的提问来源于stack exchange,提问作者Lyuboslav
相关产品推荐
相关产品推荐

