تست نویسی به زبان خیارشور(Gherkin)

تست‌نویسی یک جزء بسیار مهم و بنیادی در مهندسی نرم‌افزار است که اهمیت بسیار زیادی دارد که به منظور ارزیابی و اعتبارسنجی کیفیت و عملکرد یک نرم‌افزار یا سیستم انجام می‌شود. هدف اصلی تست نویسی، تشخیص خطاها، مشکلات و عدم انطباق با نیازمندی‌ها در نرم‌افزار است.در زیر به تعدادی از مفاهیم اساسی در مورد تست نویسی می‌پردازیم:تست کیفیتی (Quality Assurance Testing): این نوع تست به ارزیابی کیفیت کلی نرم‌افزار می‌پردازد. این تست شامل تست‌هایی مانند تست عملکردی، تست عملیاتی، تست امنیتی و ... است.تست اجرایی (Functional Testing): در این نوع تست، عملکرد و ویژگی‌های نرم‌افزار با استفاده از ورودی‌ها و شرایط مختلف ارزیابی می‌شوند تا اطمینان حاصل شود که نرم‌افزار به درستی عمل می‌کند.تست واحد (Unit Testing): در این نوع تست، توابع و واحدهای کوچکتر نرم‌افزار به صورت جداگانه تست می‌شوند. این تست‌ها به تایید درستی عملکرد هر واحد کمک می‌کنند.تست ادغامی (Integration Testing): این تست‌ها بررسی تعامل و ادغام بین مؤلفه‌ها یا واحدهای مختلف نرم‌افزار را انجام می‌دهند تا اطمینان حاصل شود که آنها با یکدیگر به درستی کار می‌کنند.تست عملکردی (Performance Testing): این نوع تست برای اندازه‌گیری کارایی و عملکرد نرم‌افزار تحت بارهای مختلف مانند ترافیک بالا یا بارهای زیاد استفاده می‌شود.تست امنیتی (Security Testing): در این نوع تست، نقاط ضعف امنیتی در نرم‌افزار بررسی می‌شوند تا مشکلات امنیتی شناسایی و رفع شوند.تست نفوذ (Penetration Testing): در این تست‌ها، نرم‌افزار توسط متخصصان امنیتی هک می‌شود تا آسیب‌پذیری‌های امنیتی شناسایی شوند.تست نویسی اساسی‌ترین قسمت از تضمین کیفیت نرم‌افزار است و در فرآیند توسعه به تشخیص زودهنگام خطاها و اشکالات، بهره‌وری تیم‌های توسعه و کاهش هزینه‌های مرتبط با خطاها و مشکلات کمک می‌کند تا از ارائه نرم‌افزارهای پایدار و قابل اطمینان به کاربران اطمینان حاصل شود.و اما خیارشور(Gherkin) که در این محتوا درمورد تست نویسی به زبان Gherkin می‌پردازیم.تست Gherkin نوعی تست مرتبط با توسعه رفتار محور(BDD) است. Gherkin زبانی است برای توصیف رفتار نرم‌افزار که در قالبی قابل خواندن و ساختار یافته توسط انسان استفاده می‌شود. این زبان از کلمات کلیدی مانند "When"، "Given" و "Then" برای تعریف سناریوها و مراحل استفاده می‌کند.در تست Gherkin، سناریوها با جملات ساده انگلیسی نوشته می‌شوند و رفتار مورد انتظار یک سیستم را از دیدگاه کاربر نشان می‌دهند. سپس این سناریوها را می‌توان به عنوان تست برای تأیید اینکه این نرم‌افزار همانطور که در نظر گرفته شده است اجرا خواهد شد یا خیر.ابزارهایی مانند Cucumber یا Behave اغلب سناریوهای Gherkin را تفسیر می‌کنند و اجرای تست‌ها را بر اساس این سناریوها انجام می‌دهند.این زبان همکاری بین اعضاء غیر فنی و توسعه‌دهندگان را بهبود می‌دهد زیرا سناریوها در قالبی قابل درک برای هر دو گروه نوشته می‌شوند.فرض کنید ما در حال توسعه فانکشن جمع دو عدد مثبت هستیم و می‌خواهیم یک سناریوی Gherkin برای تست آن بنویسیم.توجه داشته باشید که سناریوها را باید در فایلی با پسوند feature در پوشه features بنویسید.| Project/ | features/ | steps/ # -- Steps directory *.py # -- Step implementation or use step-library python files. | *.feature | logics/#sum_two_positive_number.feature Feature: Addition Testing in Gherkin This feature is designed to test the addition operation for two positive numbers. Scenario Outline: Adding two positive numbers Given I have entered the <number_1> Given And i have entered the <number_2> When I calculate the sum of number_1 and number_2 Then The <result> should be calculated Examples: | number_1 | number_2 | result | | 11 | 11 | 22 |این سناریوی Gherkin مراحلی از جمع دو عدد مثبت را با توجه به اعداد و نتیجه مورد انتظار نشان می‌دهد.تا به اینجا ما فقط سناریو جمع دو عدد مثبت را نوشته‌ایم و برای تست فانکشن نیاز است تا این سناریو را روی فانکشن مورد نظر اجرا کنیم. برای اینکار کافیست پکیج behave را نصب کنید.برای اینکار کافیست بعد از ساختن یک محیط مجازی از دستور زیر استفاده کنید:pip install behaveحال با توجه به سناریو نوشته شده باید stepهای این سناریو را بنویسیم.توجه داشته باشید که stepها را باید در پوشه steps در پوشه features بنویسیم.#sum_two_positive_number.py from behave import given, then, when from behave.runner import Context from logics.sum_number import sum_two_positive_number @given(&quotI have entered the {number_1}&quot) def given_step(context: Context, number_1: str) -> None: context.number_1 = number_1 @given(&quotAnd i have entered the {number_2}&quot) def given_step(context: Context, number_2: str) -> None: context.number_2 = number_2 @when(&quotI calculate the sum of number_1 and number_2&quot) def when_imp(context: Context) -> None: context.sum = sum_two_positive_number( int(context.number_1), int(context.number_2) ) @then(&quotThe {result} should be calculated&quot) def then_step(context: Context, result: str) -> None: assert context.sum == int(result)حال با اجرای دستور زیر می‌توانید نتیجه سناریو را مشاهده کنید.bahave features/sum_two_positive_number.featuresدرصورتی که نتیجه تست با نتیجه سناریو نوشته شده مطابقت نداشته باشد، خطا مورد نظر به شما نشان داده خواهد شد.چند نکته درمورد تست Gherkin:زمانی که از Scenario Outline استفاده می‌شود به این نکته توجه داشته باشید که حتما باید از Examples استفاده شود.تنها در صورتی می‌توان از Examples استفاده نکرد که بجای Scenario Outline از Scenario استفاده شده باشد.اگر بیش از یک مقدار برای یک متغیر وجود داشته باشد می‌توان از Examples استفاده کرد; بدین گونه که هر متغیر می‌تواند چندین مقدار داشته باشد.Examples: | number_1 | number_2 | result | | 11 | 11 | 22 | | 2 | 19 | 21 | | 1 | 1 | 2 |تمام مقادیر از جنس استرینگ می‌باشند.اگر مقدار یک متغیر وارد نشده باشد، استرینگ خالی("") در نظر گرفته خواهد شد.در صورتی که تست شما در تمامی سناریوها نیاز به متغیرهای ثابتی باشد، می‌توان از یک Given برای دریافت مقادیر استفاده کرد.بدین صورت که یک تست با توجه به یک یا چند مقدار ثابت، سناریوهای مختلفی داشته باشد; باید برای تمامی سناریوها از یک Given ثابت استفاده شود، در نتیجه فایل استپ این تست نیز یک Given دارد و برای بدست آوردن و استفاده از مقادیر باید روی جدول مقادیر حلقه زده و آنها را در متغیر مناسب در Context قرار داد.@given(&quotGiven title&quot) def given_step(context: Context) -> None: for row in context.table: context.number_1 = row.get(&quotnumber_1&quot)در ادامه برای دسترسی به متغیر number_1 در Whenها از context.number_1 استفاده می‌شود.اینها توضیحات مختصری از تست‌نویسی، مخصوصا تست‌نویسی به زبان Gherkin بود تا با این زبان آشنا شوید. شما می‌توانید با مراجعه به داکیومنت Gherkin روش‌های دیگری از پیاده‌سازی سناریوهای این زبان را یاد گرفته و بیشتر با این زبان جذاب آشنا شوید.