diff --git a/README.md b/README.md index 8a30ecc..c364047 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ๐Ÿงช iOS-Automation-Framework -> **ๅŸบไบŽไบ‘้นฟๅ•†ๅŸŽ็š„็งปๅŠจ็ซฏ่‡ชๅŠจๅŒ–ๆต‹่ฏ•ๆก†ๆžถ** | Appium + pytest + Allure + Jenkins CI/CD +> **ๅŸบไบŽไบ‘้นฟๅ•†ๅŸŽ็š„็งปๅŠจ็ซฏ่‡ชๅŠจๅŒ–ๆต‹่ฏ•ๆก†ๆžถ** | Appium + pytest + Allure + GitHub Actions ![Python](https://img.shields.io/badge/Python-3.9+-blue.svg) ![Framework](https://img.shields.io/badge/Framework-Appium+pytest-green.svg) @@ -20,7 +20,7 @@ | ๐Ÿ“Š **ๆ•ฐๆฎ้ฉฑๅŠจๆต‹่ฏ•** | YAML ็ฎก็†ๆต‹่ฏ•ๆ•ฐๆฎ๏ผŒๆ”ฏๆŒๅคš็Žฏๅขƒๅˆ‡ๆข | | ๐Ÿ”Œ **ๆŽฅๅฃ/UI ่”ๅŠจ** | ็ปŸไธ€ๆก†ๆžถๅŒๆ—ถๆ”ฏๆŒ API ๅ’Œ UI ๆต‹่ฏ• | | ๐Ÿ“ˆ **Allure ๆŠฅๅ‘Š** | ๅฏ่ง†ๅŒ–ๆต‹่ฏ•ๆŠฅๅ‘Š๏ผŒๆ”ฏๆŒๅކๅฒ่ถ‹ๅŠฟ | -| ๐Ÿ”„ **Jenkins CI/CD** | ่‡ชๅŠจๅŒ–ๆตๆฐด็บฟ๏ผŒๆฏๆ—ฅๆž„ๅปบๆ‰ง่กŒ | +| ๐Ÿ”„ **GitHub Actions CI** | ่‡ชๅŠจๅŒ–ๆตๆฐด็บฟ๏ผŒPR ่งฆๅ‘ๆ‰ง่กŒ | | โšก **ๆ€ง่ƒฝๆต‹่ฏ•** | ๅŸบไบŽ Locust ็š„ๅŽ‹ๅŠ›ๆต‹่ฏ•่„šๆœฌ | --- @@ -34,8 +34,8 @@ graph TD A --> C[๐Ÿ”Œ API_Automation
Requests + pytest] A --> D[โšก Performance
Locust] - B & C & D --> E[๐Ÿ› ๏ธ ๅŸบ็ก€่ฎพๆ–ฝๅฑ‚
Config / Logger / DB / Utils] - E --> F[๐Ÿš€ CI/CD ๅฑ‚
Jenkins / Fastlane / GitHub Actions] + B & C & D --> E[๐Ÿ› ๏ธ ๅŸบ็ก€่ฎพๆ–ฝๅฑ‚
Config / Logger / Utils] + E --> F[๐Ÿš€ CI/CD ๅฑ‚
GitHub Actions / Fastlane] ``` --- @@ -52,23 +52,24 @@ iOS-Automation-Framework/ โ”œโ”€โ”€ config/ # Configuration layer โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ settings.py # Global settings -โ”‚ โ””โ”€โ”€ environments.yaml # Multi-env config +โ”‚ โ”œโ”€โ”€ environments.yaml # Multi-env config +โ”‚ โ””โ”€โ”€ local.yml.example # Local config template โ”‚ โ”œโ”€โ”€ utils/ # Utility layer โ”‚ โ”œโ”€โ”€ __init__.py -โ”‚ โ”œโ”€โ”€ log_util.py # Logger +โ”‚ โ”œโ”€โ”€ log_util.py # Logger (loguru) โ”‚ โ”œโ”€โ”€ request_util.py # HTTP client โ”‚ โ”œโ”€โ”€ assertion_util.py # Assertions -โ”‚ โ”œโ”€โ”€ db_util.py # Database helper โ”‚ โ””โ”€โ”€ screenshot_util.py # Screenshot helper โ”‚ -โ”œโ”€โ”€ UI_Automation/ # UI tests (Appium) +โ”œโ”€โ”€ UI_Automation/ # UI tests (Appium + XCUITest) โ”‚ โ”œโ”€โ”€ Pages/ # Page Object Model โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ”œโ”€โ”€ base_page.py # Base page class โ”‚ โ”‚ โ”œโ”€โ”€ login_page.py # Login page โ”‚ โ”‚ โ”œโ”€โ”€ home_page.py # Home page โ”‚ โ”‚ โ”œโ”€โ”€ category_page.py # Category page +โ”‚ โ”‚ โ”œโ”€โ”€ search_page.py # Search page โ”‚ โ”‚ โ”œโ”€โ”€ product_detail_page.py # Product detail โ”‚ โ”‚ โ”œโ”€โ”€ cart_page.py # Cart page โ”‚ โ”‚ โ””โ”€โ”€ order_page.py # Order page @@ -79,7 +80,7 @@ iOS-Automation-Framework/ โ”‚ โ”‚ โ”œโ”€โ”€ test_search.py # Search tests โ”‚ โ”‚ โ”œโ”€โ”€ test_cart.py # Cart tests โ”‚ โ”‚ โ””โ”€โ”€ test_order.py # Order flow tests -โ”‚ โ”œโ”€โ”€ screenshots/ # Failure screenshots +โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ””โ”€โ”€ conftest.py # UI fixtures โ”‚ โ”œโ”€โ”€ API_Automation/ # API tests @@ -96,18 +97,14 @@ iOS-Automation-Framework/ โ”‚ โ”‚ โ”œโ”€โ”€ test_product.py # Product tests โ”‚ โ”‚ โ”œโ”€โ”€ test_cart.py # Cart tests โ”‚ โ”‚ โ””โ”€โ”€ test_order.py # Order tests -โ”‚ โ”œโ”€โ”€ data/ # Test data -โ”‚ โ”‚ โ”œโ”€โ”€ user_data.yaml # User data -โ”‚ โ”‚ โ”œโ”€โ”€ product_data.yaml # Product data -โ”‚ โ”‚ โ””โ”€โ”€ order_data.yaml # Order data -โ”‚ โ””โ”€โ”€ utils/ -โ”‚ โ””โ”€โ”€ data_loader.py # YAML data loader +โ”‚ โ””โ”€โ”€ data/ # Test data (YAML) +โ”‚ โ”œโ”€โ”€ user_data.yaml +โ”‚ โ”œโ”€โ”€ product_data.yaml +โ”‚ โ””โ”€โ”€ order_data.yaml โ”‚ โ”œโ”€โ”€ Performance/ # Performance tests โ”‚ โ””โ”€โ”€ locust_scripts/ -โ”‚ โ”œโ”€โ”€ __init__.py -โ”‚ โ”œโ”€โ”€ locustfile.py # Locust entry point -โ”‚ โ””โ”€โ”€ api_scenarios.py # Load scenarios +โ”‚ โ””โ”€โ”€ locustfile.py # Locust entry point โ”‚ โ”œโ”€โ”€ CI/ # CI/CD config โ”‚ โ”œโ”€โ”€ jenkins/ @@ -115,12 +112,10 @@ iOS-Automation-Framework/ โ”‚ โ””โ”€โ”€ fastlane/ โ”‚ โ””โ”€โ”€ Fastfile # Fastlane config โ”‚ -โ”œโ”€โ”€ Reports/ # Test report output -โ”‚ โ””โ”€โ”€ .gitkeep +โ”œโ”€โ”€ Reports/ # Test report output (git-ignored) โ”‚ โ””โ”€โ”€ docs/ # Documentation - โ”œโ”€โ”€ design.md # Design notes - โ””โ”€โ”€ api_interface.md # API reference + โ””โ”€โ”€ design.md # Design notes ``` | ็›ฎๅฝ• | ่ฏดๆ˜Ž | @@ -171,28 +166,26 @@ cp config/local.yml.example config/local.yml ### ่ฟ่กŒๆต‹่ฏ• ```bash -# ====== ่ฟ่กŒๆŽฅๅฃ่‡ชๅŠจๅŒ–ๆต‹่ฏ• ====== -# ่ฟ่กŒๆ‰€ๆœ‰ๆŽฅๅฃๆต‹่ฏ• +# ====== ๆŽฅๅฃ่‡ชๅŠจๅŒ–ๆต‹่ฏ•๏ผˆๅนถๅ‘ๆ‰ง่กŒ๏ผ‰====== pytest API_Automation/cases -v --alluredir=./Reports/api-results # ่ฟ่กŒๆŒ‡ๅฎšๆจกๅ— pytest API_Automation/cases/test_user.py -v -# ่ฟ่กŒๅนถ็”Ÿๆˆ Allure ๆŠฅๅ‘Š -pytest API_Automation/cases -v --alluredir=./Reports/api-results +# ็”Ÿๆˆ Allure ๆŠฅๅ‘Š allure generate ./Reports/api-results -o ./Reports/api-report --clean +allure open ./Reports/api-report -# ====== ่ฟ่กŒ UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ• ====== -# ๅฏๅŠจ Appium Server๏ผˆๆ–ฐ็ปˆ็ซฏ๏ผ‰ +# ====== UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ•๏ผˆไธฒ่กŒ๏ผŒ้œ€่ฆ็œŸๆœบ/ๆจกๆ‹Ÿๅ™จ๏ผ‰====== +# 1. ๅฏๅŠจ Appium Server๏ผˆๆ–ฐ็ปˆ็ซฏ๏ผ‰ appium -# ่ฟ่กŒ UI ๆต‹่ฏ• -pytest UI_Automation/Tests -v --alluredir=./Reports/ui-results \ - --driver-remote-url=http://127.0.0.1:4723 +# 2. ่ฟ่กŒ UI ๆต‹่ฏ•๏ผˆ-n 0 ่ฆ†็›– pytest.ini ็š„ๅนถๅ‘่ฎพ็ฝฎ๏ผ‰ +pytest UI_Automation/Tests -v -n 0 --alluredir=./Reports/ui-results -# ====== ่ฟ่กŒๆ€ง่ƒฝๆต‹่ฏ• ====== +# ====== ๆ€ง่ƒฝๆต‹่ฏ• ====== cd Performance/locust_scripts -locust -f locustfile.py --host=https://api.yunlu.com +locust -f locustfile.py --host=https://api-dev.yunlu.com ``` --- @@ -318,20 +311,6 @@ login_cases: --- -## ๐Ÿ“ˆ Jenkins CI/CD ้›†ๆˆ - -้กน็›ฎๅ†…็ฝฎไบ†ๅฎŒๆ•ด็š„ Jenkins Pipeline ้…็ฝฎ๏ผš - -1. **Checkout** โ†’ ไปŽ Git ๆ‹‰ๅ–ๆœ€ๆ–ฐไปฃ็  -2. **Install Dependencies** โ†’ pip install -r requirements.txt -3. **Run API Tests** โ†’ ๆ‰ง่กŒๆŽฅๅฃ่‡ชๅŠจๅŒ– -4. **Run UI Tests** โ†’ ๆ‰ง่กŒ UI ่‡ชๅŠจๅŒ– -5. **Generate Report** โ†’ ็”Ÿๆˆ Allure ๆŠฅๅ‘Š -6. **Notify** โ†’ ้’‰้’‰/ไผไธšๅพฎไฟก้€š็Ÿฅ็ป“ๆžœ - -่ฏฆ็ป†้…็ฝฎ่ฏทๅ‚่€ƒ `CI/jenkins/Jenkinsfile`ใ€‚ - ---- ## ๐Ÿค ่ดก็ŒฎๆŒ‡ๅ—