如何在本地快速复现Playwright WebKit的不稳定测试用例?
本地复现Playwright WebKit间歇性测试失败的最优脚本方案
直接给你一个单bash脚本,能模拟多终端并行循环跑测试,一旦出现失败立刻终止所有进程并保留失败日志,比手动开多个终端高效得多:
#!/bin/bash # 配置参数 PARALLEL_COUNT=2 # 对应你之前开的终端数量,可按需调整 TEST_CMD="yarn nx run-many -t e2e --output-style=stream --project=webkit --skip-nx-cache" LOG_DIR="./webkit-test-logs" # 创建日志存储目录 mkdir -p "$LOG_DIR" # 定义终止所有测试进程的清理函数 cleanup() { echo "检测到测试失败,正在终止所有运行中的测试进程..." pkill -P $$ # 终止当前脚本启动的所有子进程 exit 1 } # 捕获中断信号,确保进程能被清理 trap cleanup SIGINT SIGTERM # 启动多个并行测试循环 for i in $(seq 1 $PARALLEL_COUNT); do ( echo "启动第 $i 个测试循环..." while true; do # 运行测试并将输出写入对应日志文件 $TEST_CMD > "$LOG_DIR/test-run-$i.log" 2>&1 EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then echo "第 $i 个测试循环失败,日志路径: $LOG_DIR/test-run-$i.log" # 向父进程发送中断信号触发全局清理 kill -SIGINT $$ exit $EXIT_CODE fi echo "第 $i 个测试循环完成,无失败,继续下一轮..." done ) & done # 等待后台进程运行(直到有失败触发中断) wait
使用步骤:
- 将代码保存为
reproduce-flaky-test.sh - 赋予执行权限:
chmod +x reproduce-flaky-test.sh - 运行脚本:
./reproduce-flaky-test.sh
额外优化建议:
- 如果已知不稳定用例的名称,用Playwright的
--grep参数缩小范围,能更快触发失败:
修改TEST_CMD为:TEST_CMD="yarn nx run-many -t e2e --output-style=stream --project=webkit --skip-nx-cache -- --grep='目标用例名称'" - 可调整
PARALLEL_COUNT的值(比如设为3或4),提升复现概率 - 失败测试的完整日志会保存在
webkit-test-logs目录下,直接查看对应文件即可定位问题
内容的提问来源于stack exchange,提问作者Shoreline
相关产品推荐
相关产品推荐

