پکیج تست نویسی پایتون pytest

  • 1404/01/14

مطمئناً! در اینجا یک راهنمای ساده برای نحوه‌ی کار با pytest آورده‌ام تا بتوانید تست‌نویسی در پروژه‌های خود را شروع کنید.

1. نصب pytest

اولین قدم نصب pytest است. برای نصب این پکیج کافی است دستور زیر را در ترمینال وارد کنید:

pip install pytest

این دستور pytest را به پروژه شما اضافه می‌کند.

2. ساختن تست‌ها

1. نوشتن یک تست ساده:

یک فایل به نام test_example.py ایجاد کنید و یک تست ساده بنویسید.

# test_example.py
def add(a, b):
    return a + b
def test_add():
    assert add(2, 3) == 5   # تست می‌کند که 2 + 3 باید برابر 5 باشد
    assert add(0, 0) == 0   # تست می‌کند که 0 + 0 باید برابر 0 باشد
    assert add(-1, 1) == 0  # تست می‌کند که -1 + 1 باید برابر 0 باشد
  • در اینجا، یک تابع به نام add داریم که دو عدد را با هم جمع می‌کند.
  • سپس یک تست به نام test_add نوشتیم که بررسی می‌کند آیا این تابع به درستی کار می‌کند یا نه.

2. اجرای تست‌ها:

برای اجرای تست‌ها، کافی است دستور pytest را در ترمینال اجرا کنید:

pytest

pytest به‌طور خودکار تمام فایل‌های تست که با test_ شروع می‌شوند را پیدا کرده و آن‌ها را اجرا می‌کند.

3. نتیجه‌ی اجرای تست:

اگر تست‌ها درست باشند، خروجی مشابه زیر خواهیم داشت:

============================= test session starts ==============================
collected 3 items
test_example.py . . .                                                  [100%]
============================== 3 passed in 0.01 seconds ==============================

اگر تست‌ها اشتباه باشند، pytest خطا را به شما نشان خواهد داد.

3. ویژگی‌های مهم pytest

1. استفاده از assert:

در pytest برای بررسی نتایج از دستور assert استفاده می‌کنیم. این دستور بررسی می‌کند که یک عبارت درست باشد. اگر درست باشد، تست موفق است و اگر غلط باشد، تست شکست می‌خورد.

2. گزارش‌گیری ساده:

اگر یک تست شکست بخورد، pytest گزارش دقیقی از خطاها را به شما نشان می‌دهد که می‌تواند شامل مقدار متغیرها و دلایل خطا باشد.

3. استفاده از pytest.mark.parametrize:

اگر بخواهید یک تست را با ورودی‌های مختلف اجرا کنید، می‌توانید از pytest.mark.parametrize استفاده کنید. این به شما کمک می‌کند تا تست‌ها را برای ورودی‌های مختلف بنویسید و تکرار کنید.

مثال:

import pytest
@pytest.mark.parametrize("num1, num2, result", [
    (1, 2, 3),
    (-1, 1, 0),
    (0, 0, 0)
])
def test_addition(num1, num2, result):
    assert num1 + num2 == result

در اینجا، تست test_addition برای سه جفت ورودی مختلف اجرا می‌شود.

4. استفاده از Fixtures:

در pytest می‌توانید از fixtures برای آماده‌سازی داده‌ها یا وضعیت‌ها قبل از اجرای تست استفاده کنید. Fixtures مانند setup در سایر فریم‌ورک‌ها عمل می‌کنند.

مثال استفاده از fixture:

import pytest
@pytest.fixture
def setup_data():
    return {'a': 2, 'b': 3}
def test_addition(setup_data):
    assert setup_data['a'] + setup_data['b'] == 5

در اینجا:

  • setup_data یک fixture است که داده‌هایی را قبل از هر تست آماده می‌کند.
  • سپس از این داده‌ها در تست test_addition استفاده می‌شود.

5. تست‌های مربوط به پایگاه داده:

در جنگو، اگر بخواهید تست‌هایی که نیاز به پایگاه داده دارند بنویسید، می‌توانید از دکوراتور @pytest.mark.django_db استفاده کنید.

مثال:

import pytest
from django.urls import reverse
@pytest.mark.django_db
def test_home_view(client):
    url = reverse('home')
    response = client.get(url)
    assert response.status_code == 200
    assert 'Welcome' in response.content.decode()

در اینجا:

  • @pytest.mark.django_db به pytest می‌گوید که این تست نیاز به پایگاه داده دارد.
  • client.get(url) یک درخواست GET به سرور ارسال می‌کند و بررسی می‌کنیم که پاسخ صحیح باشد.

4. اجرای تست‌ها با گزینه‌ها

pytest گزینه‌های زیادی برای تنظیمات و کنترل‌های بیشتر دارد. برخی از رایج‌ترین گزینه‌ها:

  • نمایش جزئیات بیشتر خطاها:

    pytest -v
  • اجرای تست‌های خاص (با نام فایل):

    pytest test_example.py
  • اجرای فقط تست‌های خراب:

    pytest --failed
  • اجرا با گزارش کوتاه:

    pytest --maxfail=3

5. جمع‌بندی:

  • نصب: ابتدا pytest را نصب کنید.
  • نوشتن تست‌ها: تست‌های خود را با استفاده از assert بنویسید.
  • اجرای تست‌ها: با دستور pytest تست‌ها را اجرا کنید.
  • ویژگی‌ها: از ویژگی‌هایی مانند parametrize، fixtures و دکوراتورهای دیگر برای نوشتن تست‌های پیچیده‌تر استفاده کنید.
  • گزارش‌گیری: pytest گزارش‌های دقیق و خوانا از نتایج تست‌ها ارائه می‌دهد.

6. نکات تکمیلی:

  • همیشه تست‌ها را پس از انجام تغییرات در کد اجرا کنید.
  • سعی کنید پوشش تستی (test coverage) مناسبی داشته باشید تا همه بخش‌های کد شما تست شوند.

لینک مستندات:pytest

عضویت در خبرنامه

رایگان ثبت نام کنید و اولین نفری باشید که از پست های جدید مطلع می شوید.