הגדרת חבילת בדיקה עבור הקוד שלך עשויה להרגיש כמו מכשול שאתה לא מוכן אליו, אבל הספרייה הזו לוקחת הרבה מהמאמץ.

בדיקות הן חלק חיוני בפיתוח תוכנה. זה עוזר לתפוס באגים מוקדם ומפחית את הסבירות לטעויות בהמשך הקו.

Pytest היא אחת ממסגרות הבדיקה הפופולריות ביותר עבור Python. זה מאפשר לך לכתוב מבחנים קטנים וקריאים שיכולים להתרחב ככל שהיישום שלך גדל. למד כיצד להגדיר ולהשתמש ב- Pytest עם קוד Python שלך.

הגדרת Pytest

לפני התקנת Pytest, עדיף ליצור סביבה וירטואלית כדי לבודד את סביבת הבדיקה שלך, כדי שתוכל למנוע התנגשויות עם חבילות ותלות אחרות.

כדי ליצור סביבה וירטואלית, הפעל את הפקודה הבאה לפני התקנת Pytest.

בדיקות python -m venv

פעולה זו תיצור סביבה וירטואלית חדשה בשם בדיקות בספרייה הנוכחית שלך. כדי להפעיל את הסביבה, הפעל את הפקודה הזו אם אתה ב-Linux או Mac:

בדיקות מקור / bin / להפעיל

עבור Windows, הפעל את הפקודה הזו:

בדיקות\\סקריפטים\\להפעיל

כדי להתקין Pytest, אתה יכול להשתמש ב-pip, מנהל החבילות של Python, עם הפקודה הזו בטרמינל שלך:

pip התקנת pytest

אם אין לך Pip, אל תדאג; אתה יכול התקן את Pip ב-Windows, Mac ו-Linux.

instagram viewer

הפעל את הפקודה הבאה כדי לבדוק אם התקנת את Pytest כהלכה.

pytest --גרסה

זה אמור להחזיר את מספר הגרסה המותקנת.

יצירת המבחן הראשון שלך

שקול את הפונקציה הבאה שמוסיפה שני מספרים ומחזירה את התוצאה.

defadd_numbers(א, ב):
לַחֲזוֹר a + b

כמה דברים עלולים להשתבש עם הפונקציה הזו. לדוגמה, שקול מה קורה אם אתה קורא לפונקציה עם ערכים לא מספריים כגון None או ערך מסוג מחרוזת. אלו הם חלק ממקרי הקצה הפוטנציאליים שעלולים לגרום לפונקציה להיכשל.

אחת הבדיקות הראשונות שאתה כותב צריך לבדוק האם הפונקציה מחזירה את התוצאה הצפויה. לשם כך, אתה יכול להשתמש במילת המפתח assert כדי להשוות את הפלט בפועל של הפונקציה לפלט הצפוי. במקרה של הפונקציה add_numbers, פונקציית הבדיקה עשויה להיראות כך:

deftest_add_numbers():
לִטעוֹן add_numbers(2, 3) == 5
לִטעוֹן add_numbers(-1, 1) == 0
לִטעוֹן add_numbers(0, 0) == 0

פונקציית בדיקה זו כוללת שלוש הצהרות assert, שכל אחת מהן משווה את הפלט של הפונקציה add_numbers לערך צפוי. הבדיקה הראשונה בודקת שהוספת 2 ו-3 מחזירה 5, הבדיקה השנייה בודקת שהוספת -1 ו-1 מחזירה 0, והבדיקה השלישית בודקת שהוספת 0 ו-0 מחזירה 0.

כיצד להריץ בדיקות עם Pytest

לאחר שכתבת את המבחנים שלך, השלב הבא הוא להפעיל אותם. כדי לעשות זאת עם Pytest, נווט אל הספרייה המכילה את קובץ הבדיקה שלך והפעל את הפקודה pytest:

pytest

אם הכל עובד כמצופה, תראה הודעה המציינת שכל הבדיקות עברו בהצלחה. עם זאת, אם אחת מההצהרות נכשלת, Pytest ידווח על שגיאה ויראה לך את ערכי הקלט שגרמו לכשל.

לדוגמה, נניח שהרצת את פונקציית הבדיקה הבאה עבור הפונקציה add_numbers:

deftest_add_numbers():
לִטעוֹן add_numbers(2, 3) == 6
לִטעוֹן add_numbers(-1, 1) == 0
לִטעוֹן add_numbers(0, 0) == 0

הטענה הראשונה תיכשל מכיוון שהערך הצפוי היה 6, אך הערך בפועל היה 5 (הסכום של 2 ו-3). Pytest יחזיר את ההודעה הבאה:

הודעה זו מציגה לך את ערכי הקלט שגרמו לערך וגם אומרת לך מה הערך האמיתי צריך להיות. זה מקל על זיהוי ותיקון מהיר של שגיאות בקוד שלך.

שימוש ב- Pytest.raises כדי לקבוע חריגים

כעת, בואו נכתוב מבחן לכיסוי אחד ממקרי הקצה של הפונקציה add_numbers. כאשר אתה מעביר ארגומנט לא מספרי כמו None לפונקציה, Python אמור להעלות חריג TypeError.

אתה כבר אמור להיות טיפול בחריגים בתוכניות Python שלך, ואתה יכול לבדוק שגם הקוד שלך מעלה אותם בצורה נכונה.

לשם כך, העתק את פונקציית הבדיקה הבאה לקובץ שלך. הוא משתמש במנהל ההקשר pytest.raises כדי לבדוק אם קריאה לפונקציה add_number עם "None" מעלה חריג TypeError.

יְבוּא pytest

deftest_add_numbers_with_invalid_inputs():
עם pytest.raises (TypeError):
add_numbers(אף אחד, 2)

לאחר מכן הפעל את Pytest משורת הפקודה. אם החריג לא יועלה, המבחן ייכשל.

אתה יכול ללכת רחוק יותר ולבדוק את הפרטים של הודעת החריגה. מנהל ההקשר מייצר אובייקט ExceptionInfo עם הפרטים.

לדוגמה, בפונקציית בדיקה זו, טען את הודעת החריגה כך:

deftest_add_numbers_with_invalid_inputs():
עם pytest.raises(טעות הקלדה) כפי ש exc_info:
add_numbers(אף אחד, 2)

לִטעוֹן exc_info.value.args[0] == "סוג אופרנד(ים) לא נתמך עבור +: 'NoneType' ו-'int'"

אם ההודעה לא תואמת את ההודעה בבדיקה, Pytest יציין כשל.

כיצד להשתמש בבדיקות פרמטריות כדי לבדוק כניסות מרובות בבת אחת

במקום לקרוא ידנית לפונקציה עם מספר כניסות כמו זה:

deftest_add_numbers():
לִטעוֹן add_numbers(2, 3) == 6
לִטעוֹן add_numbers(-1, 1) == 0
לִטעוֹן add_numbers(0, 0) == 0

Pytest מספקת תכונת בדיקה עם פרמטר המאפשרת לך לעשות את אותו הדבר ביתר קלות. כך תוכל לשכתב את פונקציית הבדיקה למעלה:

יְבוּא pytest

@pytest.mark.parametrize("א, ב, צפוי", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0)
])
deftest_add_numbers(א, ב, צפוי):
לִטעוֹןadd_numbers(א, ב)== צפוי

כיצד להריץ בדיקות מרובות

עד כה, כתבת רק שני מבחנים עבור הפונקציה add_numbers. לפונקציות מורכבות יותר עם יותר מבחנים, מומלץ לקבץ אותן בכיתה.

לדוגמה, כך תיצור מחלקת בדיקה עבור הפונקציה add.

מעמדTestAddFunction:
@pytest.mark.parametrize("a, b, צפוי", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
defתוספת_לבדיקה_עם_מספרים(עצמי, א, ב, צפוי):
לִטעוֹן add_numbers (a, b) == צפוי

deftest_add_numbers_with_invalid_inputs(עצמי):
עם pytest.raises (TypeError) כפי ש exc_info:
add_numbers(אף אחד, 2)
לִטעוֹן exc_info.value.args[0] == "סוג אופרנד(ים) לא נתמך עבור +: 'NoneType' ו-'int'"

שימו לב שעליכם להקדים את שם המחלקה עם "Test" כדי ש-Pytest יוכל לזהות אותה כמחלקת בדיקה ולהפעיל אותה.

ל- Pytest יש עוד הרבה תכונות

באמצעות Pytest, אתה יכול לוודא אוטומטית שהקוד שלך עובד כפי שאתה מצפה. Pytest מציעה תכונות רבות אחרות כגון מתקנים המאפשרים לך להגדיר ולהפיל נתוני בדיקה וסימנים להגדרת מטא נתונים על פונקציות הבדיקה שלך.

בנוסף, אתה יכול לשלב את Pytest בצנרת ה-CI שלך ולהתחיל להריץ בדיקות באופן אוטומטי ורציף כאשר אתה משנה את הקוד שלך.