פרויקט בדיקות אוטומציה | SauceDemo

תיעוד בדיקות מקיף · STP · STD · STR

GK
גיל קלמן  |  Gil Kalman
Quality Assurance Engineer
Playwright (Python)
pytest
Allure Report
Page Object Model
WebFlows Layer
Version 1.0
Date April 2026
SUT SauceDemo v1.0
Test Cases 20
Pass Rate 100 %
📋
Software Test Plan – STP
תוכנית הבדיקות | SauceDemo E-Commerce Platform
STP-SAUCEDEMO-001 · v1.0

מסמך זה מגדיר את תוכנית הבדיקות המלאה עבור מערכת SauceDemo. הבדיקות מומשו בפריימוורק Playwright (Python) עם pytest, תוך שימוש בארכיטקטורת Page Object Model ושכבת WebFlows לתזמור פעולות מורכבות. כלל התוצאות מתועדות ב-Allure Report.

1.0 · INTRODUCTION

מבוא

הפרויקט בודק את saucedemo.com — אפליקציית ווב המדמה חנות אינטרנטית עם תהליכי התחברות, קטלוג מוצרים, עגלת קניות ותשלום. כל הטסטים ממוקמים בקובץ test_cases/test_saucedemo.py ומאורגנים ב-5 Classes לפי @allure.suite.

2.0 · TEST OBJECTIVES

מטרות הבדיקה

  • אימות תהליך ה-Login לסוגי משתמשים שונים
  • אימות תצוגת מוצרים, כמות ומיון
  • בדיקת פונקציונליות עגלת הקניות
  • אימות תהליך ה-Checkout מקצה לקצה
  • בדיקת ניווט ו-Logout מהאפליקציה

ארכיטקטורת הפריימוורק – Framework Architecture

🧪
test_saucedemo.py
Test Classes
⚙️
WebFlows
web_workflow.py
📄
Page Objects
LoginPage · InventoryPage · CartPage · CheckoutPage
🌐
Playwright
Browser Automation
PAGE OBJECT MODEL

שכבת Page Objects

  • LoginPage — שדות login, כפתור, error
  • InventoryPage — מוצרים, מיון, עגלה, logout
  • CartPage — פריטים, remove, checkout
  • CheckoutPage — step-one, overview, complete
WEBFLOWS LAYER

שכבת WebFlows

  • login_valid() — standard_user / secret_sauce
  • add_item_to_cart(slug)
  • go_to_cart() / proceed_to_checkout()
  • fill_checkout_info(fn, ln, zip)
  • logout() — burger menu → logout link
PYTEST FIXTURES (conftest.py)

Fixtures ונתוני קנפיגורציה

  • web_workflow — מכיל את WebFlows + page
  • context — Playwright BrowserContext
  • trace / video / screenshot — לפי data.xml
  • capture_console_logs — autouse, כל טסט
ALLURE & MARKERS

דיווח ו-Markers

  • @allure.suite — קיבוץ לפי מודול
  • @allure.title — שם תיאורי לכל טסט
  • @pytest.mark.smoke — 8 טסטים
  • @pytest.mark.regression — 12 טסטים

3.0 · היקף הבדיקה – Test Scope

IN SCOPE – בתחום הבדיקה

✅ נבדק

  • Login — valid, locked, invalid, empty fields
  • Products — count, title, sorting (3 אפשרויות)
  • Cart — add, remove, badge count
  • Checkout — validation, overview total, E2E flow
  • Navigation — logout ← burger menu
OUT OF SCOPE – מחוץ לתחום

🚫 לא נבדק

  • בדיקות API / Backend
  • בדיקות עומס / ביצועים
  • בדיקות אבטחה
  • Mobile / Responsive
  • problem_user / performance_glitch_user

4.0 · גישת הבדיקה – Test Approach

METHODOLOGY

מתודולוגיה

בדיקות Black-Box פונקציונליות באמצעות Playwright עם Chromium. כל Class מגדיר autouse fixture לחיבור והכנת מצב ראשוני. טסטי Smoke מריצים את הנתיב המוצלח הקריטי; Regression מכסה גבולות ונתיבים שליליים.

USER UNDER TEST

משתמש הבדיקה

  • standard_user / secret_sauce — ראשי
  • locked_out_user — בדיקת נעילה (negative)
  • wrong_user / wrong_pass — credentials שגויים
  • Empty username / Empty password — boundary tests

5.0 · סביבת הבדיקה – Test Environment

Application URLhttps://www.saucedemo.com
OSWindows 11 Pro
BrowserChromium (via Playwright)
Automation FrameworkPlaywright sync_api (Python)
LanguagePython 3.12
Test Runnerpytest 8.x
ReportingAllure Report (@allure.suite / @allure.title)
ArtifactsScreenshots (on failure) · Traces (retain-on-failure) · Console logs
IDEPyCharm
VCSGit / GitHub

6.0 · קריטריוני כניסה ויציאה – Entry / Exit Criteria

ENTRY CRITERIA

תנאי פתיחה

  • האפליקציה נגישה ב-URL המוגדר
  • Playwright מותקן וה-browser זמין
  • כל ה-fixtures ב-conftest.py תקינים
  • data.xml מוגדר עם base_url ו-browser
EXIT CRITERIA

תנאי סגירה

  • כל 20 הטסטים בוצעו
  • 100% ממרקר Smoke עברו
  • אחוז Pass כולל ≥ 80%
  • דוח STR נכתב ואושר

7.0 · לוח זמנים – Schedule

STP – Test PlanningWeek 1 · Days 1–2
STD + Framework Setup (POM / WebFlows)Week 1 · Days 3–5
Test Implementation (20 TCs)Week 2 · Days 1–3
Execution + Allure ReportsWeek 2 · Days 4–5
STR Writing & Sign-offWeek 3 · Day 1

8.0 · משאבים ותפקידים – Resources & Roles

QA Engineer / AuthorGil Kalman
Framework DeveloperGil Kalman
ToolsPyCharm · Playwright · pytest · Allure · Git · GitHub
📝
Software Test Description – STD
תיאור מקרי הבדיקה | test_cases/test_saucedemo.py
STD-SAUCEDEMO-001 · v1.0

כל מקרי הבדיקה שאובים מ-test_cases/test_saucedemo.py. הם מאורגנים ב-5 Classes עם @allure.suite ונחלקים ל-8 טסטי Smoke ו-12 טסטי Regression. הצעדים הינם קריאות ל-WebFlows ו-Page Objects ישירות מהקוד.

TS-01
Saucedemo – Login
5 TCs · class TestLogin
TC IDAllure Title / FunctionMarkerPreconditionsTest StepsExpected Result
TC-01-01 Valid login navigates to products pagetest_valid_login smoke page navigated to base URL (SauceDemo)
  1. web_workflow.login_valid()
  2. → fills standard_user / secret_sauce
  3. → clicks [data-test="login-button"]
expect(page).to_have_url(".../inventory.html")
TC-01-02 Locked out user sees error messagetest_locked_out_user regression page navigated to base URL
  1. web_workflow.login("locked_out_user", "secret_sauce")
expect(login_page.error_message).to_be_visible()
TC-01-03 Invalid credentials shows error messagetest_invalid_credentials regression page navigated to base URL
  1. web_workflow.login("wrong_user", "wrong_pass")
expect(login_page.error_message).to_be_visible()
TC-01-04 Empty username shows error messagetest_empty_username regression page navigated to base URL
  1. web_workflow.login("", "secret_sauce")
expect(login_page.error_message).to_be_visible()
TC-01-05 Empty password shows error messagetest_empty_password regression page navigated to base URL
  1. web_workflow.login("standard_user", "")
expect(login_page.error_message).to_be_visible()
TS-02
Saucedemo – Products
5 TCs · class TestProducts · autouse: login_valid()
TC IDAllure Title / FunctionMarkerPreconditionsTest StepsExpected Result
TC-02-01 Products page displays 6 itemstest_product_count smoke Logged in as standard_user → /inventory.html
  1. Count [data-test="inventory-item"] elements
expect(inventory_items).to_have_count(6)
TC-02-02 Products page title is 'Products'test_products_title smoke Logged in → /inventory.html
  1. Read [data-test="title"] text
expect(title).to_have_text("Products")
TC-02-03 Sort by Name Z to Atest_sort_name_z_to_a regression Logged in → /inventory.html
  1. inv.sort_by("Name (Z to A)")
  2. Read item_names.first.inner_text()
== "Test.allTheThings() T-Shirt (Red)"
TC-02-04 Sort by Price low to hightest_sort_price_low_to_high regression Logged in → /inventory.html
  1. inv.sort_by("Price (low to high)")
  2. Read item_prices.first.inner_text()
== "$7.99"
TC-02-05 Sort by Price high to lowtest_sort_price_high_to_low regression Logged in → /inventory.html
  1. inv.sort_by("Price (high to low)")
  2. Read item_prices.first.inner_text()
== "$49.99"
TS-03
Saucedemo – Cart
5 TCs · class TestCart · autouse: login_valid()
TC IDAllure Title / FunctionMarkerPreconditionsTest StepsExpected Result
TC-03-01 Cart badge shows 1 after adding one itemtest_cart_badge_after_add smoke Logged in → /inventory.html
  1. add_item_to_cart("sauce-labs-backpack")
  2. → clicks [data-test="add-to-cart-sauce-labs-backpack"]
expect(cart_badge).to_have_text("1")
TC-03-02 Cart badge shows 2 after adding two itemstest_cart_badge_two_items regression Logged in → /inventory.html
  1. add_item_to_cart("sauce-labs-backpack")
  2. add_item_to_cart("sauce-labs-bike-light")
expect(cart_badge).to_have_text("2")
TC-03-03 Cart contains added itemtest_cart_contains_item smoke Logged in → /inventory.html
  1. add_item_to_cart("sauce-labs-backpack")
  2. go_to_cart() → /cart.html
  3. Check items count and first item name
expect(cart_items).to_have_count(1)
expect(item_names.first).to_have_text("Sauce Labs Backpack")
TC-03-04 Remove item from carttest_remove_item_from_cart regression Logged in → backpack in cart → /cart.html
  1. add_item_to_cart("sauce-labs-backpack")
  2. go_to_cart()
  3. remove_item_from_cart("sauce-labs-backpack")
expect(cart_items).to_have_count(0)
TC-03-05 Cart badge disappears after removing only itemtest_cart_badge_disappears_after_remove regression Logged in → /inventory.html
  1. add_item_to_cart("sauce-labs-backpack")
  2. remove_item_from_inventory("sauce-labs-backpack")
  3. → clicks [data-test="remove-sauce-labs-backpack"]
expect(cart_badge).not_to_be_visible()
TS-04
Saucedemo – Checkout
4 TCs · class TestCheckout · autouse: login + add backpack + go_to_cart + proceed_to_checkout
TC IDAllure Title / FunctionMarkerPreconditionsTest StepsExpected Result
TC-04-01 Missing first name shows errortest_checkout_missing_first_name regression At checkout step-one (login_and_add fixture)
  1. Fill last_name_field = "User"
  2. Fill postal_code_field = "12345"
  3. Click continue_btn
expect(error_message).to_be_visible()
TC-04-02 Missing postal code shows errortest_checkout_missing_postal_code regression At checkout step-one
  1. Fill first_name_field = "Test"
  2. Fill last_name_field = "User"
  3. Click continue_btn (no postal code)
expect(error_message).to_be_visible()
TC-04-03 Checkout step two – overview shows correct item totaltest_checkout_overview_total smoke At checkout step-one (backpack = $29.99)
  1. fill_checkout_info("Test","User","12345")
  2. → fills all fields + clicks Continue → step-two
  3. Read [data-test="subtotal-label"]
expect(subtotal_label).to_contain_text("29.99")
TC-04-04 E2E – complete purchase shows confirmationtest_complete_purchase smoke At checkout step-one
  1. fill_checkout_info("Test","User","12345")
  2. finish_order() → clicks [data-test="finish"]
expect(complete_header).to_have_text("Thank you for your order!")
expect(page).to_have_url(".../checkout-complete.html")
TS-05
Saucedemo – Navigation
1 TC · class TestNavigation · autouse: login_valid()
TC IDAllure Title / FunctionMarkerPreconditionsTest StepsExpected Result
TC-05-01 Logout redirects to login pagetest_logout smoke Logged in → /inventory.html
  1. web_workflow.logout()
  2. → clicks #react-burger-menu-btn
  3. → clicks [data-test="logout-sidebar-link"]
expect(page).to_have_url("https://www.saucedemo.com/")
expect(login_button).to_be_visible()
📊
Software Test Report – STR
דוח תוצאות ביצוע הבדיקות | SauceDemo E-Commerce Platform
STR-SAUCEDEMO-001 · v1.0

הבדיקות בוצעו ב-Chromium עם standard_user כמשתמש ראשי. כל 20 מקרי הבדיקה בוצעו בהצלחה. תאריך ביצוע: אפריל 2026.

20
סה"כ מקרי בדיקה
Total Test Cases
8
Smoke Tests
@pytest.mark.smoke
12
Regression Tests
@pytest.mark.regression
20
עברו בהצלחה
100% Pass Rate ✓
התפלגות תוצאות הבדיקה
100% PASS
Pass (20 / 20)
Fail (0)
Blocked (0)

תוצאות לפי חבילת בדיקה – Per Suite

TS-01 Login (5)
5 / 5
TS-02 Products (5)
5 / 5
TS-03 Cart (5)
5 / 5
TS-04 Checkout (4)
4 / 4
TS-05 Navigation (1)
1 / 1

תוצאות מפורטות – Detailed Execution Results

TC IDAllure TitleSuiteMarkerStatusActual Result
TC-01-01Valid login navigates to products pageTS-01smokePASSRedirected to /inventory.html ✓
TC-01-02Locked out user sees error messageTS-01regressionPASSError message visible on login page ✓
TC-01-03Invalid credentials shows error messageTS-01regressionPASSError message visible ✓
TC-01-04Empty username shows error messageTS-01regressionPASSValidation error triggered ✓
TC-01-05Empty password shows error messageTS-01regressionPASSValidation error triggered ✓
TC-02-01Products page displays 6 itemsTS-02smokePASSinventory-item count = 6 ✓
TC-02-02Products page title is 'Products'TS-02smokePASStitle text = "Products" ✓
TC-02-03Sort by Name Z to ATS-02regressionPASSFirst item = "Test.allTheThings() T-Shirt (Red)" ✓
TC-02-04Sort by Price low to highTS-02regressionPASSFirst price = "$7.99" ✓
TC-02-05Sort by Price high to lowTS-02regressionPASSFirst price = "$49.99" ✓
TC-03-01Cart badge shows 1 after adding one itemTS-03smokePASScart_badge text = "1" ✓
TC-03-02Cart badge shows 2 after adding two itemsTS-03regressionPASScart_badge text = "2" ✓
TC-03-03Cart contains added itemTS-03smokePASScount = 1; name = "Sauce Labs Backpack" ✓
TC-03-04Remove item from cartTS-03regressionPASScart_items count = 0 ✓
TC-03-05Cart badge disappears after removing only itemTS-03regressionPASScart_badge not_to_be_visible() ✓
TC-04-01Missing first name shows errorTS-04regressionPASSError message visible on step-one ✓
TC-04-02Missing postal code shows errorTS-04regressionPASSError message visible on step-one ✓
TC-04-03Overview shows correct item totalTS-04smokePASSsubtotal_label contains "29.99" ✓
TC-04-04E2E – complete purchase shows confirmationTS-04smokePASScomplete_header = "Thank you for your order!" · URL = /checkout-complete.html ✓
TC-05-01Logout redirects to login pageTS-05smokePASSURL = saucedemo.com/ · login_button visible ✓

יומן ליקויים – Defect Log

אין ליקויים פתוחים – No Defects Found

כלל 20 מקרי הבדיקה עברו בהצלחה. לא אותרו ליקויים פונקציונליים בסבב זה עבור standard_user. הסביבה הייתה יציבה לאורך כל ריצת הבדיקות.

📌 סיכום ומסקנות – Summary & Conclusions

  • סבב הבדיקות הושלם בהצלחה מלאה — 20/20 PASS (100%), מעל קריטריון היציאה.
  • כל 8 טסטי Smoke עברו — ניתן להמשיך לסביבת UAT.
  • כל 12 טסטי Regression עברו — תהליכי גבול ו-negative מאומתים.
  • ה-framework (Playwright + POM + WebFlows + Allure) פעל בצורה תקינה ויציבה.
  • תשתית ה-conftest כוללת צילומי מסך אוטומטיים, Traces ו-Console logs לכל כשל עתידי.
  • המלצה: מאשר שחרור. אין ממצאים חוסמים.
GK
גיל קלמן · Gil Kalman
Quality Assurance Engineer · Automation Testing
Execution Date: April 2026
Report Version: 1.0 · Final