برنامه نویسی

وظایف خود را با استفاده از Pytest خودکار کنید: راهنمای عملی با مثال

Summarize this content to 400 words in Persian Lang
اتوماسیون بخش مهمی از توسعه و آزمایش نرم افزار مدرن است. باعث صرفه جویی در زمان، کاهش خطاهای دستی و تضمین ثبات در بین فرآیندها می شود. چارچوب Pytest یکی از محبوب ترین و قدرتمندترین ابزارها برای خودکارسازی وظایف در پایتون، به ویژه در تست است. این سبک وزن است، استفاده از آن آسان است و افزونه ها و ویژگی های داخلی متعددی را برای ساده سازی فرآیند اتوماسیون ارائه می دهد.

در این مقاله، بهترین راه‌ها برای خودکارسازی وظایف با استفاده از چارچوب Pytest را بررسی می‌کنیم. ما از طریق سه مثال عملی صحبت خواهیم کرد که نشان می دهد چگونه Pytest می تواند انواع مختلف وظایف را به طور موثر خودکار کند.

چرا Pytest؟قبل از بررسی مثال‌ها، بیایید در مورد اینکه چرا Pytest یک انتخاب عالی برای اتوماسیون وظایف است بحث کنیم:

سادگی: Pytest دارای یک نحو ساده و مختصر است که نوشتن و خواندن موارد تست را آسان می کند.توسعه پذیری: با طیف گسترده ای از پلاگین ها و قلاب ها، Pytest را می توان برای پشتیبانی از نیازهای مختلف آزمایش گسترش داد.فیکسچرها: Pytest فیکسچرهایی را ارائه می‌کند که یک ویژگی قدرتمند برای تنظیم پیش‌شرط‌ها یا حالت‌ها برای آزمایش‌ها هستند و قابلیت استفاده مجدد را افزایش می‌دهند.یکپارچه سازی: Pytest به خوبی با ابزارهای دیگر از جمله پلتفرم های CI/CD ادغام می شود و اتوماسیون انتها به انتها را امکان پذیر می کند.

مثال 1: خودکار کردن تست API با PytestAPI ها ستون فقرات بسیاری از برنامه ها هستند و اطمینان از قابلیت اطمینان آنها بسیار مهم است. Pytest، همراه با کتابخانه درخواست ها، خودکار کردن تست API را آسان می کند.

مرحله 1: کتابخانه های مورد نیاز را نصب کنیدابتدا مطمئن شوید که Pytest و کتابخانه درخواست ها را نصب کرده اید:

pip install pytest requestsمرحله 2: اسکریپت تست را بنویسیدبیایید یک درخواست ساده GET را به یک API عمومی مانند JSONPlaceholder، یک API REST آنلاین جعلی برای آزمایش، خودکار کنیم.

`درخواست های وارداتوارد کردن پای تست

BASE_URL = “https://jsonplaceholder.typicode.com”

@pytest.fixturedef api_client():# این فیکسچر یک شی جلسه برای ایجاد درخواست های API فراهم می کندsession = requests.Session()جلسه بازدهsession.close()

def test_get_posts(api_client):# یک درخواست GET برای واکشی پست ها ارسال کنیدanswer = api_client.get(f”{BASE_URL}/posts”)# ادعاهااظهار answer.status_code == 200assert len(response.json()) > 0، “هیچ پستی یافت نشد”`

توضیح:Fixture (api_client): این فیکسچر یک جلسه قابل استفاده مجدد را برای درخواست HTTP تنظیم می کند و اطمینان می دهد که ما نیازی به ایجاد یک جلسه جدید در هر بار نداریم.تابع تست (test_get_posts): این تابع یک درخواست GET را به نقطه پایانی /posts ارسال می کند و تأیید می کند که:کد وضعیت 200 است که نشان دهنده موفقیت است.پاسخ شامل حداقل یک پست است.مرحله 3: تست را اجرا کنیدبرای اجرای تست، دستور زیر را اجرا کنید:

ضربه شدیدکد را کپی کنیدpytest -v test_api.pyچرا این کار می کنداین تست مختصر و قابل استفاده مجدد است و از تجهیزات Pytest برای مدیریت راه‌اندازی و خرابی استفاده می‌کند.خروجی Pytest نشان می‌دهد که کدام تست‌ها قبول شده یا شکست خورده‌اند، و ردیابی قابلیت اطمینان API را در طول زمان آسان می‌کند.

مثال 2: تست خودکار رابط کاربری وب با Pytest و Seleniumتست رابط کاربری وب تضمین می کند که ظاهر یک برنامه مطابق انتظار عمل می کند. Pytest را می توان با سلنیوم ترکیب کرد تا این وظایف را به طور موثر انجام دهد.

مرحله 1: کتابخانه های مورد نیاز را نصب کنیدPytest، Selenium و WebDriver Manager را نصب کنید:

pip install pytest selenium webdriver-managerمرحله 2: اسکریپت تست را بنویسیددر اینجا نحوه خودکارسازی یک تست ساده رابط کاربری وب که عملکرد جستجو در Google را تأیید می کند، آمده است:

«وارد کردن پایتستاز وب درایور واردات سلنیوماز selenium.webdriver.common.by import Byاز selenium.webdriver.common.keys کلیدهای وارداتاز webdriver_manager.chrome وارد کردن ChromeDriverManager

@pytest.fixtureمرورگر def():# Chrome WebDriver را تنظیم کنیدراننده = webdriver.Chrome(ChromeDriverManager().install())راننده بازدهdriver.quit()

def test_google_search(مرورگر):# به Google برویدbrowser.get(“https://www.google.com”)`{% endraw %}

# Find the search box and enter a query
search_box = browser.find_element(By.NAME, “q”)
search_box.send_keys(“Pytest Automation”)
search_box.send_keys(Keys.RETURN)

# Assert that results are shown
results = browser.find_elements(By.CSS_SELECTOR, “div.g”)
assert len(results) > 0, “No search results found”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:Fixture (مرورگر): این فیکسچر یک نمونه Chrome WebDriver را با استفاده از webdriver-manager راه‌اندازی می‌کند و اطمینان می‌دهد که پس از هر آزمایش به درستی بسته شده است.تابع تست (test_google_search): این تابع:صفحه اصلی گوگل را باز می کند.«اتوماسیون پایست» را جستجو می کند.ادعا می کند که جستجو حداقل یک نتیجه را نشان می دهد.مرحله 3: تست را اجرا کنیدتست را با:

{% خام %}pytest -v test_ui.pyچرا این کار می کندفیکسچر Pytest نمونه مرورگر را مدیریت می‌کند و راه‌اندازی و حذف تست را تمیز و کارآمد می‌کند.با استفاده از سلنیوم، اسکریپت مانند یک کاربر واقعی با صفحه وب در تعامل است و از عملکرد UI همانطور که انتظار می رود اطمینان حاصل می کند.مثال 3: اعتبارسنجی خودکار داده ها با پایتست و پانداهااعتبارسنجی داده ها در مهندسی داده، تجزیه و تحلیل و فرآیندهای ETL بسیار مهم است. Pytest می تواند وظایف اعتبارسنجی داده ها را با استفاده از کتابخانه پانداها خودکار کند.

مرحله 1: کتابخانه های مورد نیاز را نصب کنیدمطمئن شوید که Pytest و Pandas نصب شده اند:

pip install pytest pandasمرحله 2: اسکریپت تست را بنویسیدبیایید یک کار را خودکار کنیم که در آن تأیید کنیم که یک مجموعه داده شرایط خاصی را برآورده می کند (مثلاً بدون مقادیر تهی، انواع داده های صحیح و غیره).

«وارد کردن پایتستپانداها را به صورت PD وارد کنید

@pytest.fixturedef sample_data():# یک DataFrame نمونه ایجاد کنیدداده = {“نام”: [“Alice”, “Bob”, “Charlie”, “David”]،”سن”: [25, 30, 35, 40]،”ایمیل”: [“alice@example.com”, “bob@example.com”, None, “david@example.com”]}df = pd.DataFrame(داده)بازگشت df

def test_data_not_null(sample_data):# بررسی کنید که آیا مقادیر تهی در DataFrame وجود دارد یا خیرassert sample_data.isnull().sum().sum() == 0، “داده حاوی مقادیر null است”

def test_age_column_type(sample_data):# بررسی کنید که ستون “سن” از نوع عدد صحیح باشدادعای نمونه_داده[‘age’].dtype == 'int64'، “ستون Age از نوع عدد صحیح نیست”`توضیح:Fixture (sample_data): این فیکسچر یک DataFrame نمونه را تنظیم می‌کند و یک مجموعه داده را شبیه‌سازی می‌کند که می‌تواند در آزمایش‌های متعدد مورد استفاده مجدد قرار گیرد.تابع تست (test_data_not_null): این تست بررسی می‌کند که آیا مقادیر تهی در DataFrame وجود دارد یا خیر و در صورت یافتن آن ناموفق است.تابع تست (test_age_column_type): این تست تأیید می کند که ستون سن از نوع صحیح است و از سازگاری داده ها اطمینان می یابد.مرحله 3: تست را اجرا کنیدتست را با:

pytest -v test_data.pyچرا این کار می کندانعطاف پذیری Pytest اجازه آزمایش های داده محور را می دهد و اطمینان می دهد که مجموعه داده ها معیارهای مورد انتظار را برآورده می کنند.این فیکسچر تنظیم و تغییر داده های آزمایشی را بدون تکرار کد آسان می کند.بهترین روش ها برای خودکارسازی وظایف با Pytestاز فیکسچرها برای راه‌اندازی و حذف استفاده کنید: فیکسچرها به مدیریت کارآمد راه‌اندازی و خراب کردن کمک می‌کنند و آزمایش‌های شما را مدولار و قابل استفاده مجدد می‌کنند.پلاگین های اهرمی: Pytest دارای پلاگین های مختلفی است (به عنوان مثال، pytest-html برای گزارش های HTML، pytest-xdist برای اجرای موازی) برای افزایش تلاش های اتوماسیون شما.Parameterize Tests: از @pytest.mark.parametrize برای آزمایش چندین مجموعه داده یا ورودی استفاده کنید و تکرار کد را کاهش دهید.ادغام با خطوط لوله CI/CD: تست های Pytest را با ابزارهای CI/CD مانند Jenkins یا GitHub Actions برای آزمایش مداوم ادغام کنید.

نتیجه گیریPytest یک ابزار قدرتمند برای خودکارسازی انواع وظایف، از تست API و وب UI گرفته تا اعتبارسنجی داده ها است. سادگی آن، همراه با انعطاف پذیری و پشتیبانی گسترده افزونه، آن را به یک انتخاب عالی برای توسعه دهندگان و مهندسان QA تبدیل می کند. با استفاده از ویژگی های Pytest مانند فیکسچرها، پارامترسازی و ادغام با خطوط لوله CI/CD، می توانید چارچوب های اتوماسیون قوی، قابل نگهداری و مقیاس پذیر بسازید.

اگر به دنبال خودکارسازی گردش کار یا بهبود فرآیند تست خود هستید، Pytest یک نقطه شروع عالی است. تست مبارک!

اتوماسیون بخش مهمی از توسعه و آزمایش نرم افزار مدرن است. باعث صرفه جویی در زمان، کاهش خطاهای دستی و تضمین ثبات در بین فرآیندها می شود. چارچوب Pytest یکی از محبوب ترین و قدرتمندترین ابزارها برای خودکارسازی وظایف در پایتون، به ویژه در تست است. این سبک وزن است، استفاده از آن آسان است و افزونه ها و ویژگی های داخلی متعددی را برای ساده سازی فرآیند اتوماسیون ارائه می دهد.

در این مقاله، بهترین راه‌ها برای خودکارسازی وظایف با استفاده از چارچوب Pytest را بررسی می‌کنیم. ما از طریق سه مثال عملی صحبت خواهیم کرد که نشان می دهد چگونه Pytest می تواند انواع مختلف وظایف را به طور موثر خودکار کند.

چرا Pytest؟
قبل از بررسی مثال‌ها، بیایید در مورد اینکه چرا Pytest یک انتخاب عالی برای اتوماسیون وظایف است بحث کنیم:

سادگی: Pytest دارای یک نحو ساده و مختصر است که نوشتن و خواندن موارد تست را آسان می کند.
توسعه پذیری: با طیف گسترده ای از پلاگین ها و قلاب ها، Pytest را می توان برای پشتیبانی از نیازهای مختلف آزمایش گسترش داد.
فیکسچرها: Pytest فیکسچرهایی را ارائه می‌کند که یک ویژگی قدرتمند برای تنظیم پیش‌شرط‌ها یا حالت‌ها برای آزمایش‌ها هستند و قابلیت استفاده مجدد را افزایش می‌دهند.
یکپارچه سازی: Pytest به خوبی با ابزارهای دیگر از جمله پلتفرم های CI/CD ادغام می شود و اتوماسیون انتها به انتها را امکان پذیر می کند.

مثال 1: خودکار کردن تست API با Pytest
API ها ستون فقرات بسیاری از برنامه ها هستند و اطمینان از قابلیت اطمینان آنها بسیار مهم است. Pytest، همراه با کتابخانه درخواست ها، خودکار کردن تست API را آسان می کند.

مرحله 1: کتابخانه های مورد نیاز را نصب کنید
ابتدا مطمئن شوید که Pytest و کتابخانه درخواست ها را نصب کرده اید:

pip install pytest requests
مرحله 2: اسکریپت تست را بنویسید
بیایید یک درخواست ساده GET را به یک API عمومی مانند JSONPlaceholder، یک API REST آنلاین جعلی برای آزمایش، خودکار کنیم.

`درخواست های واردات
وارد کردن پای تست

BASE_URL = “https://jsonplaceholder.typicode.com”

@pytest.fixture
def api_client():
# این فیکسچر یک شی جلسه برای ایجاد درخواست های API فراهم می کند
session = requests.Session()
جلسه بازده
session.close()

def test_get_posts(api_client):
# یک درخواست GET برای واکشی پست ها ارسال کنید
answer = api_client.get(f”{BASE_URL}/posts”)
# ادعاها
اظهار answer.status_code == 200
assert len(response.json()) > 0، “هیچ پستی یافت نشد”`

توضیح:
Fixture (api_client): این فیکسچر یک جلسه قابل استفاده مجدد را برای درخواست HTTP تنظیم می کند و اطمینان می دهد که ما نیازی به ایجاد یک جلسه جدید در هر بار نداریم.
تابع تست (test_get_posts): این تابع یک درخواست GET را به نقطه پایانی /posts ارسال می کند و تأیید می کند که:
کد وضعیت 200 است که نشان دهنده موفقیت است.
پاسخ شامل حداقل یک پست است.
مرحله 3: تست را اجرا کنید
برای اجرای تست، دستور زیر را اجرا کنید:

ضربه شدید
کد را کپی کنید
pytest -v test_api.py
چرا این کار می کند
این تست مختصر و قابل استفاده مجدد است و از تجهیزات Pytest برای مدیریت راه‌اندازی و خرابی استفاده می‌کند.
خروجی Pytest نشان می‌دهد که کدام تست‌ها قبول شده یا شکست خورده‌اند، و ردیابی قابلیت اطمینان API را در طول زمان آسان می‌کند.

مثال 2: تست خودکار رابط کاربری وب با Pytest و Selenium
تست رابط کاربری وب تضمین می کند که ظاهر یک برنامه مطابق انتظار عمل می کند. Pytest را می توان با سلنیوم ترکیب کرد تا این وظایف را به طور موثر انجام دهد.

مرحله 1: کتابخانه های مورد نیاز را نصب کنید
Pytest، Selenium و WebDriver Manager را نصب کنید:

pip install pytest selenium webdriver-manager
مرحله 2: اسکریپت تست را بنویسید
در اینجا نحوه خودکارسازی یک تست ساده رابط کاربری وب که عملکرد جستجو در Google را تأیید می کند، آمده است:

«وارد کردن پایتست
از وب درایور واردات سلنیوم
از selenium.webdriver.common.by import By
از selenium.webdriver.common.keys کلیدهای واردات
از webdriver_manager.chrome وارد کردن ChromeDriverManager

@pytest.fixture
مرورگر def():
# Chrome WebDriver را تنظیم کنید
راننده = webdriver.Chrome(ChromeDriverManager().install())
راننده بازده
driver.quit()

def test_google_search(مرورگر):
# به Google بروید
browser.get(“https://www.google.com”)`{% endraw %}

# Find the search box and enter a query
search_box = browser.find_element(By.NAME, "q")
search_box.send_keys("Pytest Automation")
search_box.send_keys(Keys.RETURN)

# Assert that results are shown
results = browser.find_elements(By.CSS_SELECTOR, "div.g")
assert len(results) > 0, "No search results found"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:
Fixture (مرورگر): این فیکسچر یک نمونه Chrome WebDriver را با استفاده از webdriver-manager راه‌اندازی می‌کند و اطمینان می‌دهد که پس از هر آزمایش به درستی بسته شده است.
تابع تست (test_google_search): این تابع:
صفحه اصلی گوگل را باز می کند.
«اتوماسیون پایست» را جستجو می کند.
ادعا می کند که جستجو حداقل یک نتیجه را نشان می دهد.
مرحله 3: تست را اجرا کنید
تست را با:

{% خام %}pytest -v test_ui.py
چرا این کار می کند
فیکسچر Pytest نمونه مرورگر را مدیریت می‌کند و راه‌اندازی و حذف تست را تمیز و کارآمد می‌کند.
با استفاده از سلنیوم، اسکریپت مانند یک کاربر واقعی با صفحه وب در تعامل است و از عملکرد UI همانطور که انتظار می رود اطمینان حاصل می کند.
مثال 3: اعتبارسنجی خودکار داده ها با پایتست و پانداها
اعتبارسنجی داده ها در مهندسی داده، تجزیه و تحلیل و فرآیندهای ETL بسیار مهم است. Pytest می تواند وظایف اعتبارسنجی داده ها را با استفاده از کتابخانه پانداها خودکار کند.

مرحله 1: کتابخانه های مورد نیاز را نصب کنید
مطمئن شوید که Pytest و Pandas نصب شده اند:

pip install pytest pandas
مرحله 2: اسکریپت تست را بنویسید
بیایید یک کار را خودکار کنیم که در آن تأیید کنیم که یک مجموعه داده شرایط خاصی را برآورده می کند (مثلاً بدون مقادیر تهی، انواع داده های صحیح و غیره).

«وارد کردن پایتست
پانداها را به صورت PD وارد کنید

@pytest.fixture
def sample_data():
# یک DataFrame نمونه ایجاد کنید
داده = {
“نام”: [“Alice”, “Bob”, “Charlie”, “David”]،
“سن”: [25, 30, 35, 40]،
“ایمیل”: [“alice@example.com”, “bob@example.com”, None, “david@example.com”]}
df = pd.DataFrame(داده)
بازگشت df

def test_data_not_null(sample_data):
# بررسی کنید که آیا مقادیر تهی در DataFrame وجود دارد یا خیر
assert sample_data.isnull().sum().sum() == 0، “داده حاوی مقادیر null است”

def test_age_column_type(sample_data):
# بررسی کنید که ستون “سن” از نوع عدد صحیح باشد
ادعای نمونه_داده[‘age’].dtype == 'int64'، “ستون Age از نوع عدد صحیح نیست”`
توضیح:
Fixture (sample_data): این فیکسچر یک DataFrame نمونه را تنظیم می‌کند و یک مجموعه داده را شبیه‌سازی می‌کند که می‌تواند در آزمایش‌های متعدد مورد استفاده مجدد قرار گیرد.
تابع تست (test_data_not_null): این تست بررسی می‌کند که آیا مقادیر تهی در DataFrame وجود دارد یا خیر و در صورت یافتن آن ناموفق است.
تابع تست (test_age_column_type): این تست تأیید می کند که ستون سن از نوع صحیح است و از سازگاری داده ها اطمینان می یابد.
مرحله 3: تست را اجرا کنید
تست را با:

pytest -v test_data.py
چرا این کار می کند
انعطاف پذیری Pytest اجازه آزمایش های داده محور را می دهد و اطمینان می دهد که مجموعه داده ها معیارهای مورد انتظار را برآورده می کنند.
این فیکسچر تنظیم و تغییر داده های آزمایشی را بدون تکرار کد آسان می کند.
بهترین روش ها برای خودکارسازی وظایف با Pytest
از فیکسچرها برای راه‌اندازی و حذف استفاده کنید: فیکسچرها به مدیریت کارآمد راه‌اندازی و خراب کردن کمک می‌کنند و آزمایش‌های شما را مدولار و قابل استفاده مجدد می‌کنند.
پلاگین های اهرمی: Pytest دارای پلاگین های مختلفی است (به عنوان مثال، pytest-html برای گزارش های HTML، pytest-xdist برای اجرای موازی) برای افزایش تلاش های اتوماسیون شما.
Parameterize Tests: از @pytest.mark.parametrize برای آزمایش چندین مجموعه داده یا ورودی استفاده کنید و تکرار کد را کاهش دهید.
ادغام با خطوط لوله CI/CD: تست های Pytest را با ابزارهای CI/CD مانند Jenkins یا GitHub Actions برای آزمایش مداوم ادغام کنید.

نتیجه گیری
Pytest یک ابزار قدرتمند برای خودکارسازی انواع وظایف، از تست API و وب UI گرفته تا اعتبارسنجی داده ها است. سادگی آن، همراه با انعطاف پذیری و پشتیبانی گسترده افزونه، آن را به یک انتخاب عالی برای توسعه دهندگان و مهندسان QA تبدیل می کند. با استفاده از ویژگی های Pytest مانند فیکسچرها، پارامترسازی و ادغام با خطوط لوله CI/CD، می توانید چارچوب های اتوماسیون قوی، قابل نگهداری و مقیاس پذیر بسازید.

اگر به دنبال خودکارسازی گردش کار یا بهبود فرآیند تست خود هستید، Pytest یک نقطه شروع عالی است. تست مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا