使用 Canary 藍圖 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Canary 藍圖

本節提供有關每個 Canary 藍圖以及每個藍圖最適合工作的詳細資訊。提供的藍圖適用於下列 Canary 類型:

  • 活動訊號監控

  • API Canary

  • 中斷的連結檢查程式

  • 視覺化監控

  • Canary 記錄器

  • GUI 工作流程

當您使用藍圖建立初期測試時,當您填寫 CloudWatch主控台中的欄位時,頁面的指令碼編輯器區域會顯示您正在建立為 Node.js 指令碼的初期測試。您也可以在此區域編輯您的 Canary 以進一步自訂。

活動訊號監控

活動訊號指令碼會載入指定的 URL,並儲存頁面的螢幕擷取畫面和 HTTP 封存檔案 (HAR 檔案)。它們也會儲存被存取 URL 的日誌。

您可以使用 HAR 檔案來檢視有關網頁的詳細效能資料。您可以分析 Web 請求的清單,並掌握效能問題,例如項目載入的時間。

若您的 Canary 使用 syn-nodejs-puppeteer-3.1 或更新的執行時間版本,您可使用活動訊號監控藍圖來監控多個 URL,並查看 Canary 執行報告之步驟摘要中每個 URL 的狀態、持續時間、相關聯的螢幕擷取畫面和失敗原因。

API Canary

API Canary 可以測試 REST API 的基本讀取和寫入功能。REST 代表具象狀態傳輸,是開發人員在建立 API 時遵循的一組規則。其中一個規則指出,指向特定 URL 的連結應該傳回一段資料。

Canary 可以使用任何 API 並測試所有類型的功能。每個 Canary 可以進行多個 API 呼叫。

在使用 syn-nodejs-2.2 或更新的執行時間版本的 Canary 中,API Canary 藍圖支援多步驟 Canary,將 API 作為 HTTP 步驟進行監控。您可以在單一 Canary 中測試多個 API。每個步驟都是個別請求,可存取不同的 URL、使用不同的標頭,並使用不同的規則來確定是否擷取標頭和回應內文。藉由不擷取標頭和回應內文,您可以防止記錄敏感資料。

API Canary 中的每個請求都包含下列資訊:

  • 端點,也就是您請求的 URL。

  • 方法,這是傳送到伺服器的請求類型。REST API 支援 GET (讀取)、POST (寫入)、PUT (更新)、PATCH (更新) 和 DELETE (刪除) 操作。

  • 標頭,同時提供資訊給用戶端和伺服器。它們用於身分驗證並提供內文內容的相關資訊。如需有效標頭的清單,請參閱 HTTP 標頭

  • 資料 (或內文),包含要傳送到伺服器的資訊。這僅用於 POST、PUT、PATCH 或 DELETE 請求。

API Canary 藍圖支援 GET 和 POST 方法。當您使用此藍圖時,必須指定標頭。例如,您可以指定 Authorization 作為 Key (鍵),並將必要的授權資料指定為該鍵的 Value (值)

如果您正在測試 POST 請求,也可以在 Data (資料) 欄位中指定要發佈的內容。

與 API Gateway 的整合

API 藍圖與 Amazon API Gateway 整合。這可讓您從與初期測試相同的 AWS 帳戶和區域中選取 API Gateway API,或從 API Gateway 上傳 Swagger 範本以進行跨帳戶和跨區域 API 監控。然後,您可以在主控台中選擇其餘的詳細資訊來建立 Canary,而不是從頭開始輸入。如需 API Gateway 的詳細資訊,請參閱什麼是 Amazon API Gateway?

使用私有 API

您可以在 Amazon API Gateway 中建立使用私有 API 的 Canary。如需詳細資訊,請參閱是否在 Amazon API Gateway 中建立私有 API?

中斷連結檢查程式會使用 document.getElementsByTagName('a') 收集您正在測試之 URL 內的所有連結。它最多只會測試您指定的連結數目,而 URL 本身可計為第一個連結。例如,如果您想要檢查包含五個連結之頁面上的所有連結,您必須指定要讓 Canary 跟隨六個連結。

中斷連結檢查程式 Canary 使用 syn-nodejs-2.0-beta 執行時間或更新版本支援下列額外的功能:

  • 提供一份報告,其中包含已檢查的連結、狀態碼、失敗原因 (如果有的話),以及來源和目的地頁面螢幕擷取畫面。

  • 檢視 Canary 結果時,您可以篩選僅查看中斷的連結,然後根據失敗的原因修正連結。

  • 此版本會擷取每個連結的附註來源頁面螢幕擷取畫面,並反白顯示找到連結的錨點。不會對隱藏的元件對象標註。

  • 您可以將此版本設定為擷取來源和目的地頁面、僅來源頁面或僅目的地頁面的螢幕擷取畫面。

  • 此版本修正了舊版中的問題,亦即,即使從第一頁湊集了更多連結,Canary 指令碼也會在第一個中斷的連結後停止。

如果您想使用 syn-1.0 更新現有 Canary,以使用新的執行時間,您必須刪除並重新建立 Canary。將現有的 Canary 更新到新的執行時間不會使這些功能可用。

中斷連結檢查程式 Canary 會偵測下列類型的連結錯誤:

  • 404 找不到網頁

  • 無效的主機名稱

  • URL 錯誤。例如,URL 缺少一個括號、有額外的斜線,或者使用錯誤的通訊協定。

  • 無效的 HTTP 回應代碼。

  • 主機伺服器傳回沒有內容也沒有回應代碼的空回應。

  • 在 Canary 執行期間,HTTP 請求不斷逾時。

  • 主機持續中斷連線,因為它設定錯誤或太忙碌。

視覺化監控藍圖

視覺化監控藍圖包含可比較在 Canary 執行期間擷取的螢幕擷取畫面與基準 Canary 執行期間擷取的螢幕擷取畫面的程式碼。如果兩個螢幕擷取畫面之間的差異超過閾值百分比,則 Canary 失敗。運行 syn-puppeteer-node-3.2 及更高版本的金絲雀支持可視化監視。目前,執行 Python 和 Selenium 的 Canary 不支援它。

視覺化監控藍圖在預設藍圖 Canary 指令碼中包含下列程式碼行,可啟用視覺化監控。

syntheticsConfiguration.withVisualCompareWithBaseRun(true);

將此行新增至指令碼之後,Canary 第一次成功執行時,它會使用該執行期間擷取的螢幕擷取畫面作為比較基準。在第一次初次測試執行之後,您可以使用 CloudWatch 主控台編輯初期測試,以執行下列任一項作業:

  • 將 Canary 的下一個執行設定為新基準。

  • 在目前的基準螢幕擷取畫面上繪製邊界,以指定要在視覺化比較期間忽略的螢幕擷取畫面區域。

  • 移除用於視覺化監控的螢幕擷取畫面。

如需有關使用 CloudWatch 主控台編輯初期測試的詳細資訊,請參閱編輯或刪除 Canary

您也可以使用nextrunlastrun參數或在 UpdateCanaryAPI 中指定初期測試執行 ID,來變更用作基準線的初期測試執行。

當您使用視覺化監控藍圖時,請輸入要擷取螢幕擷取畫面的 URL,並將差異閾值指定為百分比。執行基準後,未來執行 Canary 可偵測大於該閾值的視覺化差異,進而觸發 Canary 失敗。執行基線後,您也可以編輯 Canary,在基線螢幕擷取畫面上「繪製」邊界,這些邊界要在視覺化監控期間忽略。

視覺監控功能由 ImageMagick 開放原始碼軟體工具組提供支援。如需詳細資訊,請參閱ImageMagick

Canary 記錄器

使用初期測試記錄器藍圖,您可以使用 CloudWatch Synthetics 記錄器在網站上記錄您的點擊和輸入動作,並自動生成 Node.js 腳本,該腳本可用於創建遵循相同步驟的初期測試。S CloudWatch ynthetics 記錄器是由 Amazon 提供的谷歌瀏覽器擴展。

學分:S CloudWatch ynthetics 記錄器基於無頭記錄器。

如需詳細資訊,請參閱 使用 S CloudWatch ynthetics 記錄器的谷歌瀏覽器

GUI 工作流程建置器

GUI 工作流程建置器藍圖會驗證是否可以在您的網頁上採取動作。例如,如果您有一個包含登入表單的網頁,Canary 可以填入使用者和密碼欄位並提交表單,以確認網頁是否正常運作。

當您使用藍圖建立此類型的 Canary 時,請指定希望 Canary 在網頁上採取的動作。您可以使用的動作如下:

  • 按一下— 選取您指定的元素,並模擬使用者按一下或選擇元素。

    若要指定 Node.js 指令碼中的元素,請使用 [id=]a[class=]

    若要指定 Python 指令碼中的元素,請使用 xpath //*[@id=]//*[@class=]

  • 驗證選擇器— 驗證指定的元素是否存在於網頁上。此測試有助於驗證先前的動作是否導致正確的元素填入頁面。

    若要指定要在 Node.js 指令碼中驗證的元素,請使用 [id=]a[class=]

    若要指定要在 Python 指令碼中驗證的元素,請使用 xpath //*[@id=]//*[class=]

  • 驗證文字— 驗證指定的字串是否包含在目標元素中。此測試有助於驗證先前的動作是否導致顯示正確的文字。

    若要指定 Node.js 指令碼中的元素,請使用 div[@id=]//h1 之類的格式,因為此動作使用 Puppeteer 中的 waitForXPath 函數。

    若要指定 Python 指令碼中的元素,請使用 //*[@id=] 或 //*[@class=] 之類的 xpath 格式,因為此動作使用 Selenium 中的 implicitly_wait 函數。

  • 輸入文字— 在目標元素中寫入指定的文字。

    若要指定要在 Node.js 指令碼中驗證的元素,請使用 [id=]a[class=]

    若要指定要在 Python 指令碼中驗證的元素,請使用 xpath //*[@id=]//*[@class=]

  • 按一下並導覽— 選擇指定的元素後等待整個頁面載入。這很適合用於需要重新載入頁面時。

    若要指定 Node.js 指令碼中的元素,請使用 [id=]a[class=]

    若要指定 Python 指令碼中的元素,請使用 xpath //*[@id=]//*[@class=]

例如,以下藍圖使用 Node.js。其會按一下指定 URL 上的 firstButton,驗證是否出現了具有預期文字的預期選擇器,在 Name (名稱) 欄位中輸入名稱 Test_Customer,按一下 Login (登入) 按鈕,然後檢查下一頁的 Welcome (歡迎) 文字,驗證是否成功登入。

主控台中的建立 Canary 頁面,欄位中已填入 GUI 工作流程藍圖。

使用下列執行時間的 GUI 工作流程 Canary 也會提供針對每個 Canary 執行而執行的步驟摘要。您可以使用與每個步驟相關聯的螢幕擷取畫面和錯誤訊息,以尋找失敗的根本原因。

  • syn-nodejs-2.0 或更新版本

  • syn-python-selenium-1.0 或更新版本