You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM部署AWS K8s Ingress后Playwright测试频繁Fetch失败求助

问题描述

我通过CI/CD流水线将Blazor WASM页面部署到AWS Kubernetes集群,部署完成后用Playwright执行UI测试,此前测试均正常运行。近期配置了基于Ingress控制器的TLS终止,Web服务器置于Ingress控制器后方(此前通过LoadBalancer服务直接访问)。修改后Playwright测试频繁失败:页面空白,控制台报Fetch错误:

Request failed, reason: net::ERR_FAILED URL: https://myurl.com/_framework/System.Text.Json.dll
console.error at https://myurl.com/_framework/System.Text.Json.dll:0:0: Failed to load resource: net::ERR_FAILED
Error: TypeError Failed to fetch; undefined TypeError: Failed to fetch
    at ut.loadResourceWithoutCaching (https://myurl.com/_framework/blazor.webassembly.js:1:49765)
    at ut.loadResourceWithCaching (https://myurl.com/_framework/blazor.webassembly.js:1:49496) 

尽管Chrome报Fetch错误,但Ingress控制器日志显示文件已成功传输:

172.31.22.142 - - [19/Oct/2022:14:17:13 +0000] "GET /_framework/System.Text.Json.dll HTTP/2.0" 200 97900 "https://myurl.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/107.0.5304.18 Safari/537.36" 40 0.053 [build-pr1289-container-name-web-5002] [] 172.31.18.225:80 97900 0.052 200 97a336ce1e2f4cfb775437cf583fc621
172.31.22.142 - - [19/Oct/2022:14:18:11 +0000] "GET /_framework/System.Text.Json.dll HTTP/2.0" 200 97900 "https://myurl.com/dashboard" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/107.0.5304.18 Safari/537.36" 40 0.002 [build-pr1289-container-name-web-5002] [] 172.31.18.225:80 97900 0.000 200 66a4a2b9f804c882453a13685cb8771b

报错并非固定某一文件,均发生在blazor.webassembly.js加载dll的初始化阶段。手动访问网站基本正常,仅偶现该错误。使用的Microsoft AspNetCore Blazor库版本为6.0.10。

排查方向与解决方案

1. 部署后服务未完全初始化(最高概率)

测试在部署完成后立即执行,此时Kubernetes Pod虽标记为就绪,但Kestrel/Blazor服务可能尚未完成启动,导致Playwright请求时出现资源加载中断。

  • 解决方法:
    • 在CI/CD流水线中添加延迟:用kubectl wait等待Pod就绪后,再延迟30-60秒执行测试;
    • 配置健康检查接口,轮询接口返回成功后再启动测试。

2. Ingress控制器的TLS/HTTP2配置问题

启用TLS和HTTP2后,可能存在传输中断问题(如HTTP2流重置、超时设置过短):

  • 临时禁用HTTP2,改用HTTP1.1测试是否解决问题;
  • 检查Ingress的proxy-read-timeout、proxy-send-timeout参数,适当调大超时时间,避免大文件传输被中断;
  • 验证TLS证书链是否完整,无头浏览器的证书校验逻辑可能与普通浏览器存在差异。

3. Blazor WASM资源加载限制

Blazor初始化时并行加载多个dll,Ingress或Kestrel的并发连接限制可能导致部分请求失败:

  • 调高Kestrel的MaxConcurrentConnections配置;
  • 在Blazor项目中启用资源压缩(设置BlazorWebAssemblyEnableCompression为true),减小资源体积;
  • 确认Ingress的缓存策略配置正确,避免资源被提前截断。

4. Playwright无头浏览器适配问题

无头Chrome的网络策略与普通浏览器存在差异:

  • 在Playwright启动时添加--disable-web-security参数排查(仅用于测试,禁止生产环境使用);
  • 增加页面等待逻辑,等待Blazor初始化完成后再执行测试:
    await page.waitForEvent('console', msg => msg.text().includes('Blazor initialized'));
    

内容的提问来源于stack exchange,提问作者otori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:50:19