為什麼 Web App 測試 MCP 連線勝過讀程式碼

靜態閱讀一個 Web 應用程式,只能知道程式碼想做什麼,卻看不出瀏覽器實際會怎麼處理它。多數使用者看得見的缺陷,都住在這兩者之間的落差裡;而當越來越多程式碼來自一個從未看過畫面實際渲染的 AI Agent,這道落差只會越拉越大。

程式碼審查抓不到的問題

殘留下來的狀態

  • 彈出視窗關掉後留下捲動鎖定,篩選條件被帶進一個根本不合理的情境。

  • 只有在第二次互動時才看得到,在 diff 裡永遠看不見。

資料還沒到就先渲染

  • 頁面畫好了,請求也回來了,畫面卻沒有重新渲染。

  • 實際操作應用程式就能穩定重現,否則幾乎看不出來。

第二個帳號

  • 那些只在開發者自己的登入狀態下成立、換個人就不成立的擁有權與可見性假設。

本機開發

Web App 的開發工作,在任何東西被部署之前就已經在 localhost 上進行了;只能連到公開 URL 的檢查來得太晚,改變不了你正在做的東西。本機目標是支援的,所以你還在動手時就能用這項檢查,而不是等到部署之後。目前的運作細節請見 說明文件。

設定方式

MCP 伺服器與 CLI 是分開的套件,發佈名稱為 @testsprite/testsprite-mcp。你用儀表板取得的 API 金鑰把它加進編輯器的 MCP 設定,編輯器會以子行程的方式執行它。Claude Code、Cursor、Windsurf、VS Code、GitHub Copilot 與 Trae 都支援;實際設定方式因用戶端而異,詳見 MCP 安裝說明文件。

先涵蓋哪些流程

  • 註冊、登出、登入。 生成出來的 Web App 最常見的全面失效。

  • 建立一筆資料,然後重新整理頁面。 區分「畫面更新了」與「紀錄真的存在」。

  • 以第二個帳號走一次主要流程。 抓出那些內建在開發者自己登入狀態裡的權限假設。

三種狀態的陷阱

Web App 特別的地方在於,同一個功能可以同時處在三種互相不一致的狀態,而大多數執行期的 bug 就是它們之間的歧異。

伺服器上有一筆紀錄。瀏覽器的記憶體裡有一份副本。而使用者心裡有一個以剛才看到的畫面建立起來的認知模型。一個刪除動作若移除了紀錄與記憶體中的副本,畫面上那一列卻還在,使用者就會確信刪除失敗了。反過來,一個只更新畫面、沒有更新伺服器的儲存動作,結果正好相反。

實際的後果是:只看其中一種狀態的檢查,證明不了什麼。動作之後馬上驗證畫面,測的是瀏覽器裡的那份副本;重新整理之後再驗證,測的是伺服器;把同一個動作做兩次,測的是第一次有沒有留下什麼。這三者加起來,就涵蓋了大部分真正會傳到使用者手上的問題,而且沒有一項需要讀程式碼。

接著,讓它在工作階段結束後依然有效

MCP 連線顧的是改動發生的那一刻。回歸測試則需要同樣的檢查持續執行,不管有沒有人坐在鍵盤前。

  • GitHub App 是一個在 TestSprite 儀表板裡設定的 webhook。它會監聽你的 pipeline 本來就會產生的部署事件,所以你的儲存庫完全不用改。

  • GitHub Actions 則把這個步驟放進你自己的 workflow,從終端機完成設定。目前的指令請見 CLI 儲存庫。

TestSprite 能檢查、而 diff 做不到的事

它會打開執行中的應用程式並實際操作,而這是看見上述三種失效的唯一方式。互動之後殘留的狀態、永遠追不上資料的渲染,以及換第二個帳號就不一樣的行為,在原始碼裡全都看不見,一用起來卻一目了然。

因為這條連線就位在 AI Agent 的循環裡,檢查是改動過程的一部分,而不是事後才補。AI Agent 會建立測試案例、執行、讀出落差、再迭代,而你看到的是結果,不是中間來回的過程。

最後你得到的,是一組每次改動都會重新驗證的流程;於是那個權限假設、那個過期的篩選條件,不會在發現它的那次工作階段結束後,又悄悄跑回來。

它需要我的原始碼嗎?

不需要。它透過介面操作執行中的應用程式並回報行為。你的 AI Agent 本來就有程式碼。

它可以測試本機的開發伺服器嗎?

前端測試可以,透過從你機器建立的通道。純後端的本機目標仍然需要一個可連線的 URL。

那些需要真實電子郵件或付款的流程呢?

用測試模式和專用帳號。任何會造成真實第三方副作用的流程,更適合當成刻意安排的人工檢查來處理。

一個 Web App 該有多少項檢查?

先從上面那三項開始,之後每遇到一個真正踩到的 bug 就加一項。跟著真實失效走的涵蓋率,勝過為了衝百分比而做的涵蓋率。

這跟 CLI 是同一回事嗎?

能力相同,入口不同。MCP 適合在編輯器裡進行的工作,CLI 適合腳本與 pipeline。

簡單說

打開應用程式,不要只是讀它。

Web App 測試 MCP 連線讓 AI Agent 找出殘留狀態、資料未到先渲染,以及第二個帳號才會出現的問題,這些都是 diff 看不出來的。先涵蓋登入、資料留存與第二個帳號,接著讓這些檢查在工作階段結束後繼續跑下去。