صورت سؤال دربارهی یک چالش ترکیبی تست گردش سفارش در فروشگاه آنلاین است. تو در نقش تستر فنی باید جریان خرید یک فروشگاه ساده را بررسی کنی؛ یعنی از لحظهی ثبت کاربر جدید تا افزودن کالا، ثبت سفارش، پرداخت و مشاهده وضعیت سفارش.
این تست فقط یک تست سادهی API یا UI نیست. مسئله روی این نکته تأکید دارد که APIها stateful هستند؛ یعنی نتیجهی هر درخواست به درخواستهای قبلی و وضعیت داخلی سیستم وابسته است. پس اگر ترتیب درخواستها، دادههای وابسته، یا state قبلی اشتباه باشد، خروجی درست نخواهد بود.
خروجی مورد انتظار از تو احتمالاً این است که:
با Postman جریان API را تست کنی.
با Mockoon / mock server وابستگیها و state شبیهسازیشده را بررسی کنی.
با Playwright یا Selenium سناریوی خرید را از UI تست کنی.
هم مسیر موفق را پوشش بدهی، هم مسیرهای خطای منطقی یا reject.
در نهایت گزارش بدهی که دادهها چطور بین مراحل حرکت کردهاند و state سیستم در هر مرحله چگونه تغییر کرده است.
نکته مهم:
نیازمندی کامل بیان نشده و قبل از تصمیم قطعی باید با تحلیلگر یا مالک محصول رفع ابهام شود.
اما برای پاسخ آزمونی، نباید متوقف شوی؛ باید فرضیات منطقی بنویسی و ادامه بدهی.
از متن سؤال این موارد مستقیم و قطعی هستند:
سیستم، یک فروشگاه آنلاین ساده است.
جریان مورد تست شامل این مراحل است:
ثبت کاربر جدید
خرید / انتخاب کالا
افزودن کالا
ثبت سفارش
پرداخت
مشاهده وضعیت سفارش
ابزار API Testing مورد انتظار Postman است.
ابزار UI / E2E مورد انتظار Playwright یا Selenium است.
سیستم از Mockoon / Mock Server استفاده میکند.
APIها stateful هستند.
ترتیب درخواستها مهم است.
دادهی خروجی یک مرحله، ورودی مرحله بعدی میشود.
باید مسیرهای موفق و مسیرهای خطای منطقی یا reject پوشش داده شوند.
باید گزارش تحلیلی از جریان داده و state ارائه شود.
چالش اصلی فقط endpoint جداگانه نیست؛ تمرکز روی integration flow و end-to-end flow است.
این موارد از متن قابل برداشت هستند، اما قطعی نیستند:
احتمالاً هر مرحله یک API جداگانه دارد؛ مثلاً register، add to cart، create order، payment، get order status.
احتمالاً پاسخ هر API شامل شناسههایی مثل userId، productId، cartId، orderId یا paymentId است.
احتمالاً باید این دادهها در Postman به صورت variable ذخیره شوند و در مراحل بعد استفاده شوند.
چون API stateful است، اجرای تستها به صورت random یا مستقل ممکن است fail شود.
احتمالاً برای reject باید سناریوهایی مثل پرداخت سفارش نامعتبر، سفارش بدون کالا، پرداخت تکراری، یا مشاهده سفارش کاربر دیگر بررسی شود.
احتمالاً UI فقط یک لایه ساده روی همان APIهاست و خودش business logic اصلی ندارد.
Mockoon احتمالاً نقش backend شبیهسازیشده را دارد، نه یک backend واقعی با دیتابیس کامل.
احتمالاً برای گزارش، فقط pass/fail کافی نیست و باید توضیح داده شود state از چه مرحلهای به چه مرحلهای تغییر کرده.
مشخص نیست endpointها دقیقاً چه هستند، از چه HTTP method استفاده میکنند، request body چیست و response body چه schemaای دارد.
اهمیت:
اگر contract مشخص نباشد، نمیشود assertion دقیق نوشت. مثلاً نمیدانیم بعد از ثبت سفارش باید 201 created بگیریم یا 200 ok.
اثر روی تست:
ممکن است تستها فقط سطحی شوند و صرفاً status code را چک کنند، در حالی که response body یا business rule اشتباه باشد.
مشخص نیست order دقیقاً چه وضعیتهایی دارد. مثلاً:
created
pending_payment
paid
rejected
cancelled
completed
اهمیت:
در سیستم stateful، مهمترین بخش تست این است که وضعیتها در ترتیب درست تغییر کنند.
اثر روی تست:
اگر state model را ندانیم، نمیتوانیم بگوییم پرداخت بعد از create order معتبر است یا نه، یا پرداخت تکراری باید reject شود یا idempotent باشد.
مشخص نیست بعد از ثبت کاربر token صادر میشود یا نه. همچنین معلوم نیست هر کاربر فقط باید سفارشهای خودش را ببیند یا همه سفارشها قابل مشاهده هستند.
اهمیت:
در جریان سفارش، دسترسی کاربر به دادهها حیاتی است.
اثر روی تست:
اگر authorization تست نشود، احتمال باگهایی مثل idor وجود دارد؛ مثلاً یک کاربر بتواند با تغییر orderId سفارش کاربر دیگر را ببیند.
متن گفته باید خطاهای منطقی یا reject پوشش داده شود، اما نگفته reject دقیقاً شامل چه حالتهایی است.
مثلاً:
پرداخت بدون سفارش
پرداخت سفارش قبلاً پرداختشده
سفارش با cart خالی
افزودن کالای ناموجود
تعداد منفی یا صفر
پرداخت با مبلغ اشتباه
مشاهده وضعیت سفارش نامعتبر
اهمیت:
سناریوهای منفی بدون business rule دقیق قابل دفاع نیستند.
اثر روی تست:
ممکن است تستر سناریوهایی بنویسد که از نظر طراح سیستم اصلاً reject محسوب نمیشوند.
چون API stateful است، باید بدانیم قبل از هر اجرای تست، state چگونه reset میشود.
اهمیت:
تستهای stateful اگر روی state آلوده اجرا شوند، flaky میشوند.
اثر روی تست:
ممکن است یک تست بار اول pass شود و بار دوم fail شود، چون کاربر، سفارش یا پرداخت قبلاً در mock state باقی مانده است.
مشخص نیست اگر payment دوبار ارسال شود چه اتفاقی باید بیفتد.
اهمیت:
در جریان مالی، duplicate payment یکی از ریسکهای اصلی است.
اثر روی تست:
اگر idempotency تعریف نشده باشد، نمیدانیم پرداخت تکراری باید 409 conflict بدهد، همان payment قبلی را برگرداند، یا دوباره پرداخت ثبت کند.
معلوم نیست UI باید فقط happy path را پوشش دهد یا سناریوهای reject را هم از UI تست کنیم.
اهمیت:
تست UI کندتر، شکنندهتر و پرهزینهتر از API است.
اثر روی تست:
اگر همه چیز را از UI تست کنیم، تستها کند و ناپایدار میشوند. بهتر است bulk validation با API انجام شود و فقط چند مسیر مهم از UI تست شود.
در نبود اطلاعات بیشتر، فرض منطقی این است که:
فرض میکنم APIها شامل endpointهایی برای ثبت کاربر، دریافت/انتخاب کالا، افزودن کالا به سبد، ثبت سفارش، پرداخت و مشاهده وضعیت سفارش هستند.
فرض میکنم خروجی هر مرحله شامل شناسهای است که در مرحله بعد استفاده میشود.
فرض میکنم order state بعد از ایجاد سفارش از حالت اولیه به حالت قابل پرداخت میرود و بعد از پرداخت موفق به paid تغییر میکند.
فرض میکنم rejectهای منطقی شامل داده نامعتبر، ترتیب اشتباه عملیات، پرداخت تکراری، سفارش نامعتبر، cart خالی و دسترسی غیرمجاز هستند.
فرض میکنم Mockoon نقش mock backend را دارد و state داخلی آن باید قبل یا بعد از اجرای تست reset شود.
فرض میکنم Postman برای API/integration testing و Playwright/Selenium برای UI/e2e testing استفاده میشود.
فرض میکنم تستها باید قابل تکرار باشند و نباید به دادهی باقیمانده از اجرای قبلی وابسته شوند.
فرض میکنم در UI، کاربر باید بتواند همین جریان خرید را از طریق فرمها و صفحات انجام دهد.
این سؤال ترکیبی است و به چند حوزه مربوط میشود:
requirement analysis
api testing
integration testing
stateful workflow testing
end-to-end testing
ui testing
automation testing
test design
data flow testing
state transition testing
negative testing
error handling
risk-based testing
regression testing
mock testing
defect analysis
reporting
تمرکز اصلی سؤال روی stateful integration testing و end-to-end order flow است، نه فقط تست کردن چند endpoint جداگانه.
رویکرد درست این است که اول جریان backend/API را کامل و قابل اعتماد تست کنیم، بعد همان جریان اصلی را از UI بررسی کنیم.
چرا این روش بهتر است؟
چون در سیستم stateful، اگر API flow درست نباشد، تست UI فقط علامت میدهد که چیزی خراب است، اما دقیق نمیگوید کدام مرحله خراب شده. Postman کمک میکند data flow و state transition را دقیق ببینیم. بعد از آن Playwright یا Selenium بررسی میکند که کاربر واقعی هم میتواند همان مسیر را از UI طی کند.
روش ضعیفتر این است که فقط از UI تست کنیم. این کار سطحی و پرریسک است، چون:
کندتر است.
خطاها را دقیق isolate نمیکند.
به selector و timing وابسته است.
برای negative scenarioها مناسبترین ابزار نیست.
روش دیگر این است که فقط API را تست کنیم. این هم ناقص است، چون ممکن است backend درست باشد اما UI داده را اشتباه بفرستد یا پیام خطا را درست نمایش ندهد.
پس رویکرد حرفهای این است:
requirement و stateها را استخراج کنیم.
API flow را با Postman بسازیم.
دادههای وابسته را با variable مدیریت کنیم.
سناریوهای مثبت و منفی را جدا کنیم.
state و response را assert کنیم.
چند سناریوی کلیدی را با UI automation اجرا کنیم.
گزارش نهایی شامل data flow، state transition، defectها و ریسکها بدهیم.
چه کاری انجام شود؟
مشخص کنم دقیقاً چه چیزی داخل محدوده تست است: API، mock server، UI، جریان کامل سفارش، سناریوهای reject و گزارش state.
چرا لازم است؟
بدون scope، ممکن است وارد performance، security یا database عمیق شویم، در حالی که سؤال تمرکز اصلیاش روی flow و integration است.
خروجی:
یک test scope مشخص.
ریسک:
اگر scope اشتباه فهمیده شود، جواب آزمون پراکنده و غیرحرفهای میشود.
چه کاری انجام شود؟
جریان happy path را به شکل زنجیرهای مشخص کنم:
register user
select product
add product to cart
create order
pay order
check order status
چرا لازم است؟
چون API stateful است و ترتیب مراحل مهم است.
خروجی:
یک flow واضح از data و state.
ریسک:
اگر ترتیب اشتباه باشد، rejectها ممکن است به اشتباه defect فرض شوند.
چه کاری انجام شود؟
مشخص کنم هر مرحله چه دادهای تولید میکند و مرحله بعد از چه دادهای استفاده میکند.
مثلاً:
register user → userId یا token
add product → cartId
create order → orderId
payment → paymentId
order status → status
چرا لازم است؟
در تست stateful، دادهها مستقل نیستند. خروجی یک API، ورودی API بعدی است.
خروجی:
جدول data dependency.
ریسک:
اگر data dependency درست مدیریت نشود، تستها fail کاذب میدهند.
چه کاری انجام شود؟
Mockoon و UI را اجرا کنم، base URLها را مشخص کنم، environment variables در Postman بسازم، و مطمئن شوم state قبل از تست قابل reset است.
چرا لازم است؟
بدون environment پایدار، تست automation قابل اعتماد نیست.
خروجی:
محیط آماده با config مشخص.
ریسک:
اختلاف port، base URL، CORS، state آلوده یا mock خاموش باعث fail غیرواقعی میشود.
چه کاری انجام شود؟
برای هر مرحله request جدا بسازم و در تستهای Postman موارد زیر را assert کنم:
status code
response schema
business message
required fields
state value
ذخیره variable برای مرحله بعد
چرا لازم است؟
Postman بهترین ابزار این سؤال برای دیدن data flow و integration است.
خروجی:
یک collection قابل اجرا با environment variables.
ریسک:
اگر فقط status code چک شود، خطای business logic پنهان میماند.
چه کاری انجام شود؟
happy path کامل را تست کنم:
کاربر جدید ثبت میشود، کالا به سبد اضافه میشود، سفارش ثبت میشود، پرداخت موفق انجام میشود و وضعیت سفارش paid یا completed میشود.
چرا لازم است؟
این مسیر، backbone سیستم است. اگر این مسیر خراب باشد، کل جریان فروشگاه مشکل دارد.
خروجی:
یک end-to-end API flow موفق.
ریسک:
اگر فقط happy path تست شود، سیستم در شرایط واقعی و خطاها شکننده میماند.
چه کاری انجام شود؟
سناریوهایی طراحی کنم که منطق سیستم باید آنها را رد کند.
مثلاً:
create order با cart خالی
payment با orderId نامعتبر
payment قبل از create order
پرداخت تکراری برای یک order
افزودن product ناموجود
quantity صفر یا منفی
مشاهده order با user/token اشتباه
request body ناقص
header/auth ناقص یا نامعتبر
چرا لازم است؟
متن سؤال صریحاً گفته باید rejectهای منطقی پوشش داده شوند.
خروجی:
لیست negative test cases با expected result.
ریسک:
اگر rejectها تست نشوند، سیستم فقط در شرایط ایدهآل درست به نظر میرسد.
چه کاری انجام شود؟
بررسی کنم order در هر مرحله دقیقاً وضعیت درست دارد.
مثلاً:
بعد از create order → pending_payment
بعد از payment موفق → paid
بعد از payment ناموفق → payment_failed یا rejected
بعد از payment تکراری → conflict یا reject منطقی
چرا لازم است؟
چون مسئله صراحتاً stateful است.
خروجی:
state transition matrix.
ریسک:
ممکن است API پاسخ موفق بدهد اما state داخلی اشتباه تغییر کند.
چه کاری انجام شود؟
با Playwright یا Selenium سناریوی خرید را از دید کاربر اجرا کنم:
باز کردن صفحه ثبتنام
وارد کردن اطلاعات کاربر
انتخاب کالا
افزودن به cart
ثبت سفارش
پرداخت
مشاهده وضعیت سفارش
چرا لازم است؟
چون باید مطمئن شویم UI درست به mock/API وصل شده و جریان واقعی کاربر کار میکند.
خروجی:
یک یا چند automated UI test.
ریسک:
UI test ممکن است به علت selector بد، timing، یا async loading flaky شود.
چه کاری انجام شود؟
در پایان گزارش بدهم:
کدام سناریوها pass/fail شدند
در هر مرحله چه دادهای تولید شد
state چگونه تغییر کرد
کدام rejectها درست handle شدند
کجا defect یا ambiguity وجود دارد
چه ریسکهایی باقی مانده است
چرا لازم است؟
صورت سؤال فقط تست نمیخواهد؛ گزارش تحلیلی از data flow و state هم میخواهد.
خروجی:
test report حرفهای.
ریسک:
اگر فقط نتیجه pass/fail داده شود، پاسخ سطح junior باقی میماند و تحلیل senior/lead دیده نمیشود.
سناریو هدف expected result ثبت کاربر جدید با داده معتبر بررسی register flow کاربر ایجاد شود و شناسه/token برگردد افزودن کالای معتبر به cart بررسی ارتباط user/product/cart cart ایجاد یا بهروزرسانی شود ثبت سفارش با cart معتبر بررسی create order orderId ایجاد شود و state مناسب برگردد پرداخت سفارش معتبر بررسی payment flow payment موفق شود و order paid شود مشاهده وضعیت سفارش بررسی final state وضعیت نهایی درست نمایش داده شود اجرای کامل از UI بررسی e2e واقعی کاربر از UI خرید را کامل کند
سناریو دلیل اهمیت expected result ثبت کاربر با email تکراری جلوگیری از duplicate user خطای منطقی مناسب افزودن product نامعتبر اعتبارسنجی product reject با پیام قابل فهم quantity صفر یا منفی business rule validation reject create order با cart خالی جلوگیری از سفارش نامعتبر reject payment با orderId نامعتبر data integrity reject payment قبل از create order کنترل sequence reject payment تکراری جلوگیری از duplicate charge conflict یا reject مشاهده order کاربر دیگر authorization / idor access denied request body ناقص schema validation bad request token/header نامعتبر authentication unauthorized
quantity برابر 1
quantity برابر حداکثر مجاز
quantity بیشتر از موجودی
productId خالی یا null
userId نامعتبر
orderId با فرمت اشتباه
payment amount صفر
payment amount کمتر یا بیشتر از مبلغ سفارش
اجرای دوباره collection بدون reset state
refresh صفحه وضعیت سفارش در UI
قطع شدن mock server وسط flow
timeout در payment یا order status
stateful بودن API
بزرگترین ریسک این است که تستها به ترتیب و state وابستهاند. باید اجرای تست قابل تکرار باشد.
وابستگی داده بین مراحل
اگر orderId یا cartId درست ذخیره نشود، مراحل بعدی fail میشوند.
mock limitation
Mockoon ممکن است رفتار backend واقعی را کامل شبیهسازی نکند. بنابراین نتیجه تست باید با این محدودیت تفسیر شود.
flaky UI test
UI automation ممکن است به خاطر timing، selector یا network delay ناپایدار شود.
نداشتن state reset
اگر state قبل از هر run پاک نشود، تستها قابل اعتماد نیستند.
ضعف در error handling
اگر پیامهای خطا استاندارد نباشند، کاربر و تستر نمیفهمند دقیقاً چه چیزی reject شده است.
authorization risk
حتی در challenge ساده، مشاهده سفارش با user دیگر باید بررسی شود؛ چون اینجا ریسک idor وجود دارد.
idempotency در پرداخت
پرداخت تکراری باید رفتار مشخص داشته باشد. اگر مشخص نباشد، ریسک مالی جدی است.
این سؤال دربارهی تست یک جریان سفارش در فروشگاه آنلاین است که از ثبت کاربر شروع میشود و تا پرداخت و مشاهده وضعیت سفارش ادامه دارد. نکته اصلی این است که APIها stateful هستند؛ بنابراین نمیتوان هر endpoint را جدا و بدون توجه به ترتیب اجرا تست کرد. خروجی هر مرحله مثل userId، cartId یا orderId باید در مرحله بعد استفاده شود و تغییر وضعیت سفارش باید در طول جریان بررسی شود.
نیازمندی کامل بیان نشده و قبل از تصمیم قطعی باید با تحلیلگر یا مالک محصول رفع ابهام شود. مخصوصاً باید endpointها، contract دقیق request/response، وضعیتهای مجاز سفارش، قوانین reject، نحوه احراز هویت، قوانین پرداخت تکراری، و روش reset کردن state مشخص شود. اگر این موارد شفاف نشوند، تستها ممکن است یا بیش از حد سطحی شوند یا failهای اشتباه تولید کنند.
در نبود اطلاعات بیشتر، فرض میکنم جریان اصلی شامل ثبت کاربر، انتخاب یا افزودن کالا، ایجاد سفارش، پرداخت و دریافت وضعیت سفارش است. همچنین فرض میکنم هر مرحله شناسهای تولید میکند که برای مرحله بعد لازم است و rejectهای منطقی شامل cart خالی، محصول نامعتبر، پرداخت قبل از ایجاد سفارش، پرداخت تکراری، orderId نامعتبر و دسترسی غیرمجاز است.
رویکرد پیشنهادی من این است که ابتدا API flow را با Postman طراحی کنم، چون در این سطح بهتر میتوان data flow و state transition را دید. در Postman برای هر request، علاوه بر status code، response schema، فیلدهای اجباری، business rule و state خروجی را assert میکنم. متغیرهایی مثل userId، cartId، orderId و paymentId را ذخیره میکنم تا در requestهای بعدی استفاده شوند. سپس همین جریان اصلی را با Playwright یا Selenium از UI اجرا میکنم تا مطمئن شوم رابط کاربری هم درست به Mockoon و API متصل است.
برای مسیر موفق، تست میکنم که کاربر جدید ثبت شود، کالا به سبد اضافه شود، سفارش ایجاد شود، پرداخت موفق انجام شود و وضعیت سفارش به حالت paid یا completed برسد. برای مسیرهای منفی، سناریوهایی مثل سفارش با cart خالی، افزودن کالای ناموجود، quantity نامعتبر، پرداخت order نامعتبر، پرداخت تکراری، پرداخت قبل از ایجاد سفارش، request ناقص و دسترسی کاربر به سفارش کاربر دیگر را بررسی میکنم. در هر reject باید status code، message، response body و عدم تغییر اشتباه در state بررسی شود.
در UI، همه سناریوها را از مرورگر تست نمیکنم، چون UI test کندتر و شکنندهتر است. بهتر است API تستها پوشش عمیقتری بدهند و UI فقط happy path و چند خطای مهم را پوشش دهد. در Playwright یا Selenium باید از selectorهای پایدار، انتظار مناسب برای load شدن صفحه، و assertion روی پیامها و وضعیت نهایی استفاده شود.
در پایان، گزارش تست باید فقط pass/fail نباشد. باید توضیح دهد که در هر مرحله چه دادهای تولید شده، state از چه حالتی به چه حالتی رفته، کدام rejectها درست handle شدهاند، کجا ambiguity وجود دارد، و چه ریسکهایی باقی مانده است. مهمترین ریسکها شامل state آلوده بین اجراها، نبود reset mechanism، پرداخت تکراری، authorization ضعیف، flaky بودن UI test و محدودیتهای Mockoon نسبت به backend واقعی هستند.
این سؤال دربارهی تست جریان کامل سفارش در یک فروشگاه آنلاین است؛ از ثبت کاربر تا افزودن کالا، ثبت سفارش، پرداخت و مشاهده وضعیت سفارش. چون API به صورت stateful طراحی شده، ترتیب درخواستها و دادههای تولیدشده در هر مرحله اهمیت دارد و نمیتوان endpointها را کاملاً مستقل تست کرد.
نیازمندی کامل بیان نشده و قبل از تصمیم قطعی باید با تحلیلگر یا مالک محصول رفع ابهام شود؛ مخصوصاً درباره endpointها، request/response schema، وضعیتهای سفارش، قوانین reject، authentication، idempotency پرداخت و نحوه reset کردن state. در نبود اطلاعات بیشتر، فرض میکنم شناسههایی مثل userId، cartId، orderId و paymentId بین مراحل منتقل میشوند و باید در Postman به صورت variable ذخیره شوند.
رویکرد درست این است که اول API flow با Postman تست شود و بعد چند سناریوی اصلی از UI با Playwright یا Selenium اجرا شود. در API test باید علاوه بر status code، response body، schema، business rule، state transition و data consistency بررسی شود. مسیر موفق شامل register، add to cart، create order، payment و check status است. مسیرهای منفی شامل cart خالی، product نامعتبر، quantity صفر یا منفی، payment قبل از order، payment تکراری، orderId نامعتبر، request ناقص و دسترسی غیرمجاز به سفارش کاربر دیگر است.
برای UI، بهتر است happy path و چند خطای مهم تست شود، چون تست UI نسبت به API کندتر و شکنندهتر است. در پایان باید گزارش تحلیلی داده شود که نشان دهد هر مرحله چه دادهای ساخته، state چگونه تغییر کرده، چه rejectهایی درست کار کردهاند و چه ریسکهایی مثل state آلوده، نبود reset، duplicate payment، authorization issue و محدودیت mock server باقی مانده است.
api testing, integration testing, end-to-end testing, ui testing, stateful workflow testing, state transition, data flow, test data, precondition, postcondition, assertion, schema validation, business rule validation, negative testing, positive testing, reject scenario, error handling, dependency, mock server, mockoon, postman collection, environment variable, playwright, selenium, automation testing, regression testing, idempotency, authentication, authorization, idor, status code, response body, request body, header, path parameter, query parameter, timeout, retry, rate limit, correlation id, trace id, data consistency, test reporting, risk-based testing, flaky test, test isolation, state reset