Skip to content

JasonLeeSwag/swag_Automation_QA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SWAG 自動化測試專案

此專案使用 Robot Framework 實現 SWAG 平台的自動化測試,包含 Web UI 測試和 API 測試。

作者:Jason Lee
聯絡方式:crazy85128x@gmail.com

目錄

環境需求

作業系統支援

  • Windows 10/11
  • macOS 10.15+
  • Linux (Ubuntu 20.04+)

基礎環境

  • Python 3.12.x 或以上
  • pip (Python 套件管理工具)
  • Chrome 瀏覽器 (最新版本)
  • Git

安裝說明

Windows 安裝步驟

# 1. 安裝 Python 3.12.x
# 從 https://www.python.org/downloads/ 下載並安裝

# 2. 克隆專案
git https://github.com/JasonLeeSwag/swag_Automation_QA
cd swag_Automation_QA

# 3. 建立虛擬環境
python -m venv venv
.\venv\Scripts\activate

# 4. 安裝依賴套件
pip install -r requirements.txt

macOS/Linux 安裝步驟

# 1. 安裝 Python 3.12.x
# macOS: 
brew install python@3.12
# Linux: 
sudo apt-get install python3.12

# 2. 克隆專案
git clone https://github.com/crazy85128x/SWAG-Automation-QA
cd swag_Automation_QA

# 3. 建立虛擬環境
python3 -m venv venv
source venv/bin/activate

# 4. 安裝依賴套件
pip install -r requirements.txt

專案結構

swag_Automation_QA/
├── TestCase/                          # 測試案例
│   ├── login/                         # 登入相關測試
│   │   ├── Login.robot               # UI 登入測試
│   │   └── Login_API.robot           # API 登入測試
│   ├── myprofile/                     # 個人資料相關測試
│   │   └── Myprofile.robot
│   ├── register/                      # 註冊相關測試
│   │   ├── Register.robot            # UI 註冊測試
│   │   └── Register_API.robot        # API 註冊測試
│   └── video/                         # 影片相關測試
│       └── Video.robot
│
├── keyword/                           # 關鍵字定義
│   └── swag/
│       ├── Swag.sources.robot        # 共用資源定義
│       ├── component/                # 共用元件
│       │   └── Swag_Footer.robot
│       ├── domain/                   # 領域服務
│       │   └── Swag_LoginService.robot
│       └── page/                     # 頁面物件
│           ├── Swag_Home.robot
│           ├── login/
│           │   └── Swag_Login.robot
│           ├── myprofile/
│           │   └── settings/
│           │       └── Swag_Settings.robot
│           ├── register/
│           │   └── Swag_Register.robot
│           └── video/
│               └── Swag_Video.robot
│
├── robotframework/                     # 框架核心組件
│   ├── API/                          # API 測試框架
│   │   ├── API.robot
│   │   └── api_sources.robot
│   ├── browser/                      # 瀏覽器操作相關
│   │   ├── AlertAction.robot
│   │   ├── BrowserAction.robot
│   │   └── ... (其他瀏覽器相關操作)
│   ├── robot_lib/                    # Python 自定義庫
│   │   ├── Calculate.py
│   │   ├── Chrome.py
│   │   └── ... (其他 Python 模組)
│   └── utilities/                    # 工具類庫
│       ├── FileUtils.robot
│       ├── StringUtils.robot
│       └── ... (其他工具類)
│
├── reports/                           # 測試報告
│   ├── login_api_report_*.txt
│   └── register_api_report_*.txt
│
├── TestData/                          # 測試資料
│   ├── test_data01.jpg
│   └── test_data02.jpg
│
├── data/                              # 測試資料目錄
├── country.yaml                       # 國家設定
├── data.yaml                          # 基礎測試資料
├── qat_domain.yaml                    # 測試環境配置
├── requirements.txt                   # 依賴套件清單
└── README.md                          # 專案說明文件

目錄說明

TestCase/

  • 存放所有測試案例檔案
  • 依功能模組分類組織
  • 每個測試檔案對應一個具體功能模組的測試

keyword/swag/

  • component/: 存放可重用的頁面元件
  • page/: 依照頁面功能分類的頁面物件
  • domain/: 業務邏輯相關的服務層
  • Swag.sources.robot: 共用資源定義

data/

  • test_data/: 測試所需的資料檔案
  • config/: 環境配置相關檔案
  • api/: API測試相關資料

resources/

  • drivers/: 瀏覽器驅動程式
  • scripts/: 輔助腳本檔案

results/

  • logs/: 測試執行日誌
  • reports/: 測試報告
  • screenshots/: 測試失敗時的截圖

檔案命名規範

  1. 測試案例檔案:使用功能名稱,如 Login.robot
  2. 頁面物件檔案:加上 Swag_ 前綴,如 Swag_Login.robot
  3. 共用元件檔案:同樣加上 Swag_ 前綴,如 Swag_Footer.robot
  4. 設定檔案:使用小寫字母,如 data.yaml

重要檔案說明

  • requirements.txt: 列出所有 Python 依賴套件
  • README.md: 專案說明文件
  • .gitignore: Git 版本控制忽略規則

執行測試

CI/CD 自動化測試

本專案使用 GitHub Actions 實現自動化測試,支援以下觸發方式:

  1. 排程執行

    • 每週一上午 9 點自動執行
    • 執行環境:UAT
    • 執行範圍:BVT 測試
  2. Pull Request 觸發

    • 條件:PR 包含特定標籤
    • 支援兩種標籤模式:
      • fulltest:執行完整測試套件
      • e2e:根據 PR 標題智能選擇測試範圍
    • 標題關鍵字對應:
      login/sign-in    → 執行登入測試
      register/sign-up → 執行註冊測試
      video/stream/rtc → 執行影片測試
      profile/account  → 執行個人資料測試
      
  3. 手動觸發

    • 支援參數:
      • 測試環境:QAT/UAT
      • 測試類型:bvt/login/register/video/myprofile
      • 自定義網域:支援多種格式
        完整 URL:https://v3-210.app.swag.live/?lang=zh-TW
        域名:v3-210.app.swag.live
        版本號:v3-210
        子版本:v3-210.1
        

測試結果與報告

測試執行完成後會生成以下格式的報告:

[狀態圖示]-test-results-[測試類型]_Total[測試案例數]_[時間戳記].zip

例如:

  • ✅PASS-test-results-login_Total15_20241211_153000.zip
  • ❌FAIL-test-results-register_Total12_20241211_153000.zip

報告內容包含:

  • 測試執行日誌(log.html)
  • 測試結果報告(report.html)
  • 測試執行記錄(output.xml)

工作流程配置

專案的自動化測試工作流程定義在 .github/workflows/cicd.yml 中,主要包含:

  1. 工作流程觸發條件

    on:
      schedule:
        - cron: '0 9 * * 1'
      pull_request:
        types: [opened, synchronize, reopened, labeled]
      workflow_dispatch:
        # 手動觸發時的輸入參數配置
  2. 主要工作(Jobs)

    • pr_test:處理 PR 觸發的測試
    • manual_scheduled_test:處理手動和排程觸發的測試
  3. 環境設定

    • 支援 QAT/UAT 環境切換
    • 支援自定義測試網域
    • 自動備份和還原配置文件
  4. 結果處理

    • 詳細的測試案例執行統計
    • 自動化測試報告生成
    • 測試結果存檔

測試報告檔案(UI/API)

基本執行命令

# 執行特定 API 測試標籤的測試
robot TestCase/login/Login_API.robot
# 執行全部 API 測試標籤的測試
robot -i api TestCase/
# or 執行全部檔案名稱內有包含 _API 的測試
robot TestCase/**/[*_API]*.robot

# 執行特定測試檔案
robot -V data.yaml -V country.yaml -V qat_domain.yaml -i login TestCase 
robot -V data.yaml -V country.yaml -V qat_domain.yaml -i register TestCase
robot -V data.yaml -V country.yaml -V qat_domain.yaml -i video TestCase
# 執行全部測試檔案
robot -V data.yaml -V country.yaml -V qat_domain.yaml -i bvt TestCase

環境變數配置

測試執行時需要配置以下 YAML 檔案:

  • data.yaml: 基本測試資料
  • country.yaml: 國家/地區設定
  • qat_domain.yaml: 測試環境網域設定

測試撰寫規範

Page Object 模式實作原則

  1. 頁面元素定位統一管理
  2. 關鍵字應具有良好的抽象層級
  3. 測試案例應保持獨立性
  4. 避免硬編碼測試數據

元素命名規範

  • 頁面 URL: url
  • 頁面標題: title
  • 頁面標題文字: page_heading
  • 按鈕元素: xxx_btn
  • 連結元素: xxx_link
  • 輸入欄位: xxx_input

關鍵字命名規則

基本動作命名

  • 點擊動作: 點擊xxx (例如:點擊登入按鈕、點擊選單)
  • 選擇動作: 點選xxx (用於選項類操作,例如:點選性別選項、點選國家)
  • 輸入動作: 輸入xxx (例如:輸入帳號、輸入密碼)
  • 清除動作: 清除xxx (例如:清除輸入欄位、清除搜尋框)

驗證相關命名

  • 檢查動作: 檢查xxx (檢查特定元素或狀態,例如:檢查頁面標題、檢查錯誤訊息)
  • 確認動作: 確認xxx (確認特定條件或結果,例如:確認登入成功、確認訂單成立)
  • 驗證動作: 驗證xxx (較嚴謹的檢查,例如:驗證表單資料、驗證計算結果)
  • 判斷動作: 判斷xxx是否xxx (回傳布林值,例如:判斷按鈕是否可點擊、判斷元素是否存在)

頁面操作命名

  • 前往動作: 前往xxx頁面 (例如:前往首頁、前往設定頁面)
  • 切換動作: 切換至xxx (例如:切換至新視窗、切換至iframe)
  • 捲動動作: 捲動至xxx (例如:捲動至頁面底部、捲動至特定元素)
  • 重整動作: 重整xxx (例如:重整頁面、重整資料)

資料處理命名

  • 取得動作: 取得xxx (例如:取得表格資料、取得使用者資訊)
  • 設定動作: 設定xxx (例如:設定預設值、設定測試環境)
  • 儲存動作: 儲存xxx (例如:儲存表單資料、儲存設定)
  • 刪除動作: 刪除xxx (例如:刪除測試資料、刪除暫存檔)

等待相關命名

  • 等待動作: 等待xxx (例如:等待頁面載入、等待元素出現)
  • 暫停動作: 暫停xxx秒 (明確的等待時間,例如:暫停3秒)

複合動作命名

  • 登入相關: 執行xxx登入 (例如:執行一般會員登入、執行管理者登入)
  • 登出相關: 執行登出 (例如:執行系統登出、執行強制登出)
  • 流程相關: 完成xxx流程 (例如:完成註冊流程、完成購物流程)

命名規範注意事項

  1. 保持一致性:相同類型的操作使用相同的動詞
  2. 具體明確:清楚描述動作的目的和對象
  3. 適當抽象:避免過於具體的實作細節
  4. 使用中文:統一使用繁體中文命名
  5. 避免縮寫:除非是普遍認可的縮寫,否則使用完整名稱

範例說明

登入相關關鍵字

執行一般會員登入
    輸入帳號    ${USERNAME}
    輸入密碼    ${PASSWORD}
    點擊登入按鈕
    確認登入成功

表單操作關鍵字

填寫個人資料表單
    輸入姓名    ${NAME}
    點選性別選項    男
    輸入生日    ${BIRTHDAY}
    點擊送出按鈕
    確認資料更新成功

驗證相關關鍵字

判斷元素是否存在
    [Arguments]    ${element}
    ${status}=    Run Keyword And Return Status    Element Should Be Visible    ${element}
    [Return]    ${status}

這樣的命名規則更加系統化和完整,可以幫助團隊成員:

  1. 更容易理解每個關鍵字的用途
  2. 保持程式碼風格的一致性
  3. 提高測試案例的可讀性和可維護性
  4. 降低撰寫新測試案例的學習曲線

常見問題

執行測試時的 WebDriver 問題

如遇到 WebDriver 相關問題,請確認:

  1. Chrome 瀏覽器版本是否最新
  2. WebDriver 版本是否與 Chrome 版本匹配
  3. WebDriver 是否已正確安裝在系統路徑中

測試執行失敗排查

  1. 檢查網路連接狀態
  2. 確認測試環境是否正常
  3. 查看詳細的測試報告和日誌

CI/CD 相關問題

  1. PR 測試未觸發

    • 檢查 PR 是否有正確的標籤(e2e 或 fulltest)
    • 確認 PR 標題是否包含相關關鍵字
  2. 手動觸發失敗

    • 確認輸入參數是否正確
    • 檢查目標環境是否可用
  3. 測試報告問題

    • 確保測試過程中生成了必要的報告文件
    • 檢查報告文件的權限設定

參考資料

XPath 相關資源

XPath 選擇器參考

基本選擇器

//div[@class='example']                    # 使用 class 屬性
//input[@id='username']                    # 使用 id 屬性
//button[contains(@class, 'btn')]          # 使用 contains 函數

進階選擇器

//div[contains(@class, 'card')][position()=1]           # 使用位置函數
//table//tr[./td[contains(text(), '數據')]]            # 使用文字內容
//[contains(@data-test-id, 'submit')]                  # 使用自訂屬性

相對路徑選擇器

.//div[contains(@class, 'child')]                      # 當前節點下搜尋
../div[contains(@class, 'sibling')]                    # 同層節點搜尋

組合條件選擇器

//div[@class='parent' and @id='main']                  # AND 條件
//div[@class='item' or @class='card']                  # OR 條件

動態元素處理

//div[starts-with(@id, 'dynamic-')]                    # ID 開頭匹配
//div[ends-with(@class, '-container')]                 # 類別結尾匹配

Robot Framework 相關

測試自動化最佳實踐

Selenium 相關

API 測試相關

效能測試相關

持續整合/持續部署 (CI/CD)

報告與日誌分析

其他實用資源

CI/CD 相關資源

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •