Python הפך לשפה המובילה לאוטומציה של בדיקות תוכנה. במאמר זה נלמד כיצד לבנות תשתית אוטומציה מקצועית ויעילה.
למה Python לאוטומציה?
Python מציע יתרונות רבים:
- תחביר פשוט וברור
- ספריות עשירות
- קהילה גדולה ותומכת
- אינטגרציה קלה עם כלים שונים
בחירת הפריימוורק הנכון
Pytest - הבחירה המומלצת
Pytest הוא הפריימוורק המוביל לבדיקות ב-Python:
import pytest
def test_login_success(): user = authenticate("user@example.com", "password123") assert user.is_authenticated == True def test_login_invalid_credentials(): with pytest.raises(AuthenticationError): authenticate("user@example.com", "wrong_password")
Unittest - לפרויקטים מסורתיים
Unittest מגיע built-in עם Python ומתאים לצוותים שרגילים ל-JUnit:
import unittest
class TestLogin(unittest.TestCase): def test_successful_login(self): result = login("user", "pass") self.assertTrue(result.success)
ארכיטקטורת Page Object Model
POM הוא דפוס עיצוב קריטי לאוטומציה maintainable:
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = "//input[@id='username']"
self.password_input = "//input[@id='password']"
self.login_button = "//button[@type='submit']"
def login(self, username, password):
self.driver.find_element("xpath", self.username_input).send_keys(username)
self.driver.find_element("xpath", self.password_input).send_keys(password)
self.driver.find_element("xpath", self.login_button).click()
ניהול Configuration
השתמשו ב-config files לניהול הגדרות:
# config.py import os from dotenv import load_dotenvload_dotenv()
class Config: BASE_URL = os.getenv('BASE_URL', 'https://example.com') BROWSER = os.getenv('BROWSER', 'chrome') TIMEOUT = int(os.getenv('TIMEOUT', '10'))
Data-Driven Testing
ביצוע בדיקות עם נתונים משתנים:
import pytest
@pytest.mark.parametrize("username,password,expected", [ ("valid_user", "valid_pass", True), ("invalid_user", "valid_pass", False), ("valid_user", "invalid_pass", False), ]) def test_login_scenarios(username, password, expected): result = login(username, password) assert result == expected
Fixtures ו-Setup/Teardown
ניהול נכון של משאבים:
@pytest.fixture(scope="function") def driver(): driver = webdriver.Chrome() driver.maximize_window() yield driver driver.quit()
def test_search(driver): driver.get("https://example.com") # test logic here
Reporting ו-Logging
תיעוד והדוחות הם קריטיים:
import logginglogging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('test.log'), logging.StreamHandler() ] )
logger = logging.getLogger(__name__)
def test_with_logging(): logger.info("Starting test execution") # test code logger.info("Test completed successfully")
אינטגרציה עם CI/CD
דוגמה ל-GitHub Actions:
name: Automated Testson: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.9'
- name: Install dependencies run: pip install -r requirements.txt
- name: Run tests run: pytest tests/ --html=report.html
Best Practices
- שמירה על DRY - אל תחזור על קוד
- נקיון קוד - עקבו אחר PEP 8
- טיפול בשגיאות - השתמשו ב-try/except נכון
- ממתינים אינטליגנטים - השתמשו ב-Explicit Waits
- ריבוד נכון - הפרידו בין שכבות (UI, Business Logic, Data)
סיכום
תשתית אוטומציה טובה היא השקעה ארוכת טווח. השקיעו זמן בתכנון ובארכיטקטורה נכונה מההתחלה.