پادیوم بلاگ
ترفندهای تست API

ترفندهای تست API که باید بدانید (از زبان مهندس Postman)

رضا دهقان
تکنولوژی ، مقالات

جیمز مسینجر یکی از مهندسان Postman است که تجربیات خود در تعامل با کاربرانی که از Postman برای تست API خود استفاده می‌کنند را به اشتراک گذاشته است. در ادامه نگاهی به تجربیات مسینجر و ترفندهای تست API داریم.

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

اولین گام در تست API انجام دادن آن است. بدون تست‌های خوب داشتن دید مناسب نسبت به رفتار، ثبات و ویژگی‌های API غیر ممکن است. انجام تست‌ها هم‌زمان با رشد کد اصلی باعث صرفه‌جویی در زمان و هزینه شما می‌شود.

نوشتن تست‌ها در Postman بسیار ساده بوده و از سینتکس‌های جاوا اسکریپت استفاده می‌شود. تست کردن چیزهای ساده‌ای مانند کدهای وضعیت HTTP، زمان پاسخ و هدرها به راحتی و با یک خط کد قابل انجام است.

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

تست‌ها را با مستندسازی اشتباه نگیرید

بسیاری از افراد از Postman Collections برای مستندسازی APIهای خود از جمله دسته‌ای از درخواست‌های نمونه که می‌توان بین اعضای تیم به اشتراک گذاشت یا راهنما برای مشتریان استفاده می‌کنند. در هر دو مورد وجود توضیحات کامل برای هر اندپونیت، راهنماهای گام‌به‌گام، نیازمندی‌های احراز هویت و لیست‌ها در کالکشن شما منطقی است.

اما تست‌های APIهدف کاملا متفاوتی دارند.

  • اول این که مخاطب هدف در تست تفاوت دارد. در مستندسازی مخاطب شما کاربران API بوده و در تست API مخاطب شما توسعه‌دهنده‌های آن است. 
  • دوم این که محتوای هر کداوم تفاوت دارد. یک مجموعه تست شامل سناریو‌های غیر محتمل، ورودی‌های اشتباه و اطلاعات حساس است که در مستندات API جایی ندارند. 
  • در نهایت، نویسنده‌های هر کدام نیز متفاوت است. به طور معمول مستندات (به خصوص مستندات عمومی) توسط تیم بازاریابی و نویسنده فنی نوشته شده و تست‌ها توسط توسعه‌دهنده‌ها تهیه می‌شوند. 

به همین دلیل بهتر است که کالکشن تست‌ها از کالکشن مستندات جدا باشد. شاید در ابتدا تفاوت چندانی بین این دو نبینید، اما مطمئن باشید که محتوای هر کدام به مرور زمان کاملا متفاوت خواهد بود. 

نکته: فیلدهای توضیحاتی که برای مستندسازی استفاده می‌کنید قابل استفاده برای توضیحات تست نیز هستند. به این ترتیب توسعه‌دهنده‌ها و تست‌کننده‌ها می‌دانند که چه چیزی در حال تست است و خروجی احتمالی چه خواهد بود.

تست‌ها را داخل پوشه‌ها دسته‌بندی کنید

مرتب کردن تست‌ها هم‌گام با افزایش پیچیدگی API به شما کمک می‌کند تست‌ها را راحت‌تر پیدا کنید. از پوشه‌ها برای دسته‌بندی تست‌ها بر اساس ریسورس‌ها، گردش کار و… بهره ببرید.

بهترین کار این است که یک پوشه رده بالا برای هر ریسورس ایجاد کرده و داخل آن‌ها پوشه‌های مختلف برای اهداف تست‌ها را قرار دهید. در سطح سوم پوشه‌ها نیز گردش‌ کارها برای تست‌های پیچیده که APIهای مختلف را درگیر می‌کنند، قرار دارند. 

اعتبارسنجی الگوی JSON

APIهای امروزی هر کدام از نوعی الگوی JSON برای تعریف ساختار درخواست‌ها و پاسخ‌ها استفاده می‌کنند. Postman یک کتابخانه به اسم tv4 دارد که کار نوشتن تست‌ها برای تایید مطابقت پاسخ‌های API با تعاریف الگوی JSON شما را ساده‌تر می‌کند.

البته به احتمال زیاد شما دوست ندارید کد الگوی JSON خودتان را داخل اسکریپت تست قرار دهید. بنابراین می‌توانید به جای آن الگو را به عنوان یک رشته JSON ذخیره کنید. سپس متغیر را به شکل زیر داخل اسکریپت تست قرار دهید:

دوباره از کد استفاده کنید

در نکته قبل دیدیم که چطور می توان از یک الگوی JSON در درخواست‌های مختلف استفاده کرد. شما می‌توانید در کد جاوااسکریپت با استفاده از فانکشن ()eval همین کار را انجام دهید. بیشتر APIها یک سری قوانین دارند که برای بیشتر (یا تمام) اندپوینت‌ها وجود دارند. به جای نوشتن تست برای هر درخواست، شما می‌توانید تست را برای درخواست اول هر کالکشن بنویسید و سپس آن را در سایر درخواست‌ها استفاده کنید.

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

و سایر درخواست‌ها به شکل زیر:

Postman BDD

با وجود این که یادگیری و استفاده سینتکس تست پیش‌فرض Postman ساده است، اما بسیاری از افراد ترجیح می‌دهند از کتابخانه‌های تست محبوب جاوااسکریپت مانند Mocha و Chai استفاده کنند. Postman BDD به شما اجازه می‌دهد تست‌های Postman را با استفاده از سینتکس BDD در Mocha بنویسید. این ابزار از ترفند استفاده مجدد کد که در نکته قبلی گفتیم برای بارگذاری Chai و Chai-HTTP استفاده می‌کند. به این ترتیب شما می‌توانید تست‌هایی مانند مثال زیر بنویسید:

با کمک collection runner در Postman تست‌های خود را اتوماسیون کنید

ما تا به اینجا روی اجرای یک درخواست و تست پاسخ آن تمرکز کرده‌ایم. این رویکرد هنگام نوشتن تست‌ها بسیار کاربردی است، اما بعد از اتمام نوشتن تست‌ها شما به یک راه ساده و سریع برای اجرای تمام آن‌ها و دیدن نتیجه در یک صفحه نیاز دارید. collection runner در Postman برای این منظور طراحی شده است.

با استفاده از Newman تست‌های خود را اتوماسیون کنید

هرچند collection runner یک راه عالی برای اجرای تمام تست‌ها است، اما نیاز به اجرای دستی دارد. اما اگر بخواهید تست‌های خود را به عنوان بخشی از یکپارچه‌سازی مستمر یا پایپ‌لاین تحویل مستمر اجرا کنید، باید از Newman بهره ببرید.

Newman به راحتی داخل Jenkins، AppVeyor، Bamboo، CodeShip، Travis CI، Circle CI یا هر ابزار پایپ‌لاین استقرار کد دیگری یکپارچه می‌شود. همچنین Newman از فرمت‌های خروجی مختلف مانند HTML و JSON پشتیبانی می‌کند.

از ابزار نظارت Postman برای اتوماسیون تست‌های خود استفاده کنید

ابزار Postman Monitors به شما اجازه می‌دهد تست‌های Postman خودتان را در بازه‌های مختلف مانند هر شب یا هر ۵ دقیقه اجرا کند. در صورت بروز خطا در هر تست نیز به شما یک نوتیفیکیشن ارسال شده و می‌توانید آن را با ابزارهای ثالث گوناگونی مانند PagerDuty، Slack، Datadog و… یکپارچه کنید.

گردش‌کارهای تست را به صورت پویا کنترل کنید

ابزارهای collection runner، Newman و Postman Monitors هر درخواست داخل کالکشن شما را به ترتیب اجرا می‌کنند. اما شما می‌توانید از فانکشن ()postman.setNextRequest برای تغیر ترتیب اجرا استفاده کنید. به این ترتیب می‌توانید از درخواست‌ها رد شوید، درخواست‌ها را تکرار کنید، کالکشن را متوقف کنید و….