رفتن به محتوای اصلی

دسترسی زودهنگام 123Coder: برای استفاده از نسخهٔ فعلی درخواست بدهید؛ پس از بررسی، نتیجه برای شما ارسال می‌شود.

درخواست دسترسی
بازگشت به مقاله‌ها
تست نرم‌افزار5 دقیقه مطالعه

تست قرارداد API با کمک هوش مصنوعی؛ از انتظار کلاینت تا تأیید سرویس

خلاصهٔ پاسخ

تست واحد سبز، سازگاری API را ثابت نمی‌کند. انتظار مصرف‌کننده را ثبت کنید، آن را روی سرویس واقعیِ آزمایشی تأیید کنید و تغییر ناسازگار را عمداً بیازمایید.

دست‌های دو مهندس در حال مقایسهٔ کارت‌های متناظر برای نمایش سازگاری قرارداد API
TelegramWhatsAppLinkedIn

در این مقاله
  1. قرارداد دقیقاً چه چیزی را پوشش می‌دهد؟
  2. مثال: جزئیات یک سفارش
  3. نقش مناسب دستیار در چهار مرحله
  4. یک تمرین محلی، با مرز روشن
  5. gate انتشار را به نسخه‌ها متصل کنید
  6. معیار پذیرش این کار
نوشتهٔپوریا افضلی

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

قرارداد دقیقاً چه چیزی را پوشش می‌دهد؟

قرارداد ارتباطی می‌تواند روش و مسیر درخواست، فیلدهای لازم، نوع داده، وضعیت پاسخ و قواعد موردنیاز مصرف‌کننده را مشخص کند. هدف، اثبات همهٔ منطق کسب‌وکار یا ظاهر صفحه نیست. برای مثال، کلاینت سفارش به شناسهٔ متنی و وضعیت مشخص نیاز دارد؛ تغییر شناسه از رشته به عدد ممکن است آن را بشکند، حتی اگر منطق ذخیرهٔ سفارش درست کار کند.

در گردش‌کار Pact، انتظار مصرف‌کننده به یک قرارداد تبدیل می‌شود و ارائه‌دهنده آن را جداگانه تأیید می‌کند. این دو سوی بررسی را با یک mock ثابت که هرگز با سرویس مقایسه نمی‌شود اشتباه نگیرید.

مثال: جزئیات یک سفارش

فرض آموزشی: کلاینت فعلی برای GET /orders/42 به پاسخ زیر وابسته است:

{"id":"42","status":"pending"}

کلاینت در این مثال فقط pending و shipped را می‌شناسد و برای سفارش ناموجود، 404 را طبق قرارداد خود مدیریت می‌کند. این مقادیر قانون عمومی همهٔ APIها نیستند؛ باید با قرارداد واقعی پروژه جایگزین شوند.

تغییر پیشنهادیخطر برای این مصرف‌کنندهبررسی لازم
تبدیل id به عددناسازگاری نوعشکست تست مصرف‌کننده و تأییدکنندهٔ قرارداد
حذف statusنبود دادهٔ لازمپاسخ فاقد فیلد باید رد شود
افزودن وضعیت queuedمقدار ناشناختهرفتار fallback یا انتشار هماهنگ لازم است
افزودن trackingUrl اختیاریوابسته به parser کلاینتآزمون پذیرش فیلد اضافه، بدون فرض سازگاری
تبدیل 404 به 200 با بدنهٔ خالیتغییر معنای نبود سفارشسناریوی ناموجود باید ناسازگاری را نشان دهد

افزودن فیلد همیشه بی‌خطر نیست؛ parser سخت‌گیر یا امضای پاسخ می‌تواند حساس باشد. همچنین تأیید صرف نوع رشته، فهرست مقادیر مجاز status را پوشش نمی‌دهد.

نقش مناسب دستیار در چهار مرحله

  1. کد مصرف‌کننده و نمونهٔ پاسخ را بخواند و وابستگی‌های واقعی را با مسیر فایل مشخص کند.
  2. موارد موجود، ناموجود، فیلد حذف‌شده و نوع نادرست را پیشنهاد کند؛ رفتار حدسی را جدا علامت بزند.
  3. تست مصرف‌کننده و حالت‌های دادهٔ ارائه‌دهنده را با چارچوب موجود پروژه آماده کند.
  4. فرمان اجرا و نتیجه را گزارش کند؛ بازبین انسانی تطبیق قرارداد با نیاز محصول را بررسی کند.

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

یک تمرین محلی، با مرز روشن

کد زیر فقط حساسیت یک assertion به نوع داده و مقدار وضعیت را نشان می‌دهد. آن را در یک فایل .mjs با Node.js اجرا کنید؛ به شبکه وصل نمی‌شود و جای تست قرارداد کامل را نمی‌گیرد.

import assert from 'node:assert/strict';
function checkOrder(body) {
  assert.equal(typeof body.id, 'string');
  assert.ok(['pending', 'shipped'].includes(body.status));
}
checkOrder({ id: '42', status: 'pending' });
assert.throws(() => checkOrder({ id: 42, status: 'pending' }));
assert.throws(() => checkOrder({ id: '42', status: 'queued' }));

در پروژهٔ واقعی، علاوه بر این منطق، باید درخواست واقعی کلاینت به mock کنترل‌شده، تولید قرارداد و بررسی همان قرارداد روی ارائه‌دهندهٔ آزمایشی انجام شود. محدودهٔ تست در Pact توضیح می‌دهد چرا تست ارتباط جای آزمون منطق کسب‌وکار یا UI نیست. آزمون امنیت و کارایی را نیز جدا نگه دارید.

gate انتشار را به نسخه‌ها متصل کنید

نسخه یا commit مصرف‌کننده، قرارداد تولیدشده و نسخهٔ ارائه‌دهنده‌ای را که آن را تأیید کرده ثبت کنید. نتیجهٔ سبز برای نسخهٔ دیروز، اثبات نسخهٔ امروز نیست. برای تغییر ناسازگار، یا سازگاری عقب‌رو حفظ شود یا ارتقای مصرف‌کننده و ارائه‌دهنده طبق برنامهٔ روشن انجام شود.

یک تغییر کنترل‌شده مانند تبدیل id به عدد در شاخهٔ آزمایشی وارد کنید. اگر بررسی همچنان سبز است، ممکن است تست مسیر درست را اجرا نکرده، قرارداد قدیمی استفاده شده یا assertion بیش از حد آزاد باشد. تغییر آزمایشی را منتشر نکنید؛ هدف سنجیدن قدرت gate است.

معیار پذیرش این کار

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

برای آماده‌کردن پروژهٔ کوچک و وظیفهٔ محدود، راهنمای شروع 123Coder را بخوانید. اجرای Pact یا هر چارچوب دیگر به تنظیمات مخزن شما وابسته است؛ این مقاله وجود یک قابلیت آمادهٔ تست قرارداد در محصول را ادعا نمی‌کند.

بازبینی منابع: ۱ اکتبر ۲۰۲۶. مثال سفارش و جلد تولیدشده با هوش مصنوعی صرفاً آموزشی‌اند.

پوریا افضلی

دربارهٔ نویسنده

پوریا افضلی

پوریا افضلی، بنیان‌گذار 123Coder، بیش از ۱۵ سال است که در دنیای توسعه نرم‌افزار، معماری سیستم‌ها و ساخت محصولات تکنولوژی فعالیت می‌کند. تمرکز فعلی او روی AI Coding، AI Agents و آینده توسعه نرم‌افزار است؛ جایی که هوش مصنوعی از یک ابزار کمکی، به بخشی واقعی از تیم مهندسی تبدیل می‌شود.

گفت‌وگو

تجربه‌تان را بنویسید یا سؤال بپرسید. نظرات پس از تأیید مدیر منتشر می‌شوند.

در حال بارگذاری…

برای ادامهٔ مطالعه