تیمی Playwright را انتخاب میکند چون «مدرن» است؛ تیم دیگری Selenium را فقط بهدلیل سابقهاش؛ چند ماه بعد تستها کند، شکننده و غیرقابل تشخیص شدهاند. مشکل معمولاً فقط ابزار نیست. تصمیم بدون Scope، معیار، Proof of Concept و مالک نگهداری گرفته شده است. انتخاب فریمورک اتوماسیون تست باید یک تصمیم مهندسی قابل دفاع باشد، نه رأیگیری بر اساس محبوبیت.
این راهنما کمک میکند ابزار، Test Runner، الگوی طراحی و Framework داخلی را از هم جدا کنید؛ معماری حداقلی بسازید؛ گزینهها را با ماتریس وزندار مقایسه کنید و PoC را روی سختترین سناریوهای واقعی اجرا کنید. در پایان، یک قالب آماده تصمیم و چکلیست تحویل خواهید داشت.
فریمورک اتوماسیون تست چیست؟
فریمورک اتوماسیون تست مجموعهای هماهنگ از قراردادهای کدنویسی، ابزارها، لایههای معماری و فرایندهاست که نحوه نوشتن، اجرا، دادهسازی، گزارش و نگهداری تستهای خودکار را استاندارد میکند. Framework فقط Package نصبشده نیست؛ شیوه کار تیم با آن Package است.
یک Framework سالم به این پرسشها پاسخ میدهد:
- تستها کجا و با چه Naming و Structure نوشته میشوند؟
- چگونه به UI، API، Mobile یا سرویس هدف متصل میشویم؟
- داده، Fixture، Environment و Secret چگونه مدیریت میشوند؟
- Isolation، Retry، Parallelism و Cleanup چه قواعدی دارند؟
- در شکست چه Artifact و Evidenceی تولید میشود؟
- کدام Suite در Pull Request، Nightly یا Release اجرا میشود؟
- مالک Dependency، Flaky Test و تغییر معماری کیست؟
اگر هنوز معلوم نیست چه چیزی ارزش خودکارسازی دارد، ابتدا صفحه مادر اتوماسیون تست را بخوانید. Framework خوب، انتخاب تست کمارزش را به سرمایهگذاری خوب تبدیل نمیکند.
ابزار، Library، Test Runner و Framework چه تفاوتی دارند؟
| مفهوم | نقش | نمونه |
|---|---|---|
| Automation Engine/Library | کنترل Browser، Mobile یا ارسال Request | Selenium WebDriver، Playwright Library، Appium Client |
| Test Runner | کشف، Lifecycle، Assertion، اجرا و نتیجه تست | pytest، JUnit، TestNG، Playwright Test |
| Pattern | روش سازماندهی و کاهش Coupling | Page Object، Screenplay، Data-Driven |
| Supporting Tools | Report، Mock، Coverage، Lint یا Container | Reporter، WireMock، Docker و ابزار CI |
| Test Framework | ترکیب قراردادها، لایهها و ابزارها برای زمینه تیم | ساختار داخلی Repository شما |
مستندات Selenium خود Selenium را مجموعهای از ابزارها و Libraryهای اتوماسیون مرورگر معرفی میکند؛ WebDriver لزوماً Test Runner، مدیریت داده یا معماری پروژه شما را تعیین نمیکند. همین تمایز جلوی توقعهای اشتباه را میگیرد.
قبل از انتخاب Framework، لایه و هدف را مشخص کنید
یک Framework واحد لازم نیست همه انواع تست را در خود حل کند. نیاز UI Web، Native Mobile، API، Contract و Performance متفاوت است:
- Web UI: مرورگر، Locator، Isolation، Trace، Screenshot و Cross-browser؛
- Native Mobile: Driver پلتفرم، Device/Simulator، Permission، App State و شبکه؛
- API: HTTP Client، Contract/Schema، Authentication، Data و Side Effect؛
- Component: Mount، Mock مرزها و تعامل نزدیک به UI Component؛
- Performance: Workload Model، Load Generator، Threshold و Telemetry؛
- Desktop/خاص: فناوری رابط، سیستمعامل و Driver اختصاصی.
برای API از اصول تست API و برای Load از راهنمای Performance Testing استفاده کنید. قرار دادن همه این هدفها در یک Abstraction عمومی معمولاً Coupling و پیچیدگی را بالا میبرد.
معماری حداقلی یک فریمورک قابل نگهداری
| لایه | مسئولیت | نباید شامل شود |
|---|---|---|
| Tests/Specs | قصد کسبوکار، ورودی و Expected | جزئیات Locator و تنظیم Driver |
| Domain/Interaction | Page، Component، Screen یا API Client معنادار | Assertionهای نامرتبط و Scenarioهای کامل |
| Fixtures/Data | ایجاد State، Factory، Seed و Cleanup | Secret واقعی و وابستگی به ترتیب تستها |
| Adapters | Browser، Mobile، HTTP، DB یا Queue | قواعد کسبوکار پراکنده |
| Config/Secrets | Environment، Feature Flag و Credential Reference | رمز Hard-coded |
| Assertions/Oracles | بررسی UI، API، State و Side Effect | Wait تصادفی برای پنهانکردن Race |
| Observability/Artifacts | Log، Trace، Screenshot، Video و Report | داده حساس خام |
| CI Orchestration | Tag، Shard، Retry Policy، Timeout و Publish | منطق تست وابسته به Vendor CI |
این لایهها باید بهاندازه نیاز پروژه باشند. ساختن دهها Base Class، Wrapper و DSL پیش از اولین Suite، Framework را به محصولی جدا از تست تبدیل میکند. Abstraction را وقتی اضافه کنید که تکرار یا تغییر واقعی وجود دارد.
الگوهای رایج Framework؛ محصول نیستند
Linear/Recorded
مراحل بهترتیب ضبط یا نوشته میشوند. برای Spike کوتاه یا یادگیری مفید است، اما اگر Locator، Data و Flow در هر تست تکرار شود، نگهداری سریعاً پرهزینه میشود.
Modular و Page/Component Object
تعاملهای مربوط به یک Page، Component یا Domain در یک نقطه قرار میگیرند. هدف کاهش Coupling تست با جزئیات UI است، نه پنهانکردن همه رفتارها پشت یک «God Object» بزرگ.
Data-Driven
یک رفتار با چند Dataset اجرا میشود. برای Partitionها و Ruleهای مشابه مناسب است؛ ولی Spreadsheet بزرگ و بدون Version Review میتواند Logic را از کد به سلولهای مبهم منتقل کند.
Keyword-Driven
Actionهای سطح بالا با Keyword بیان میشوند. برای Domain محدود و کاربران آموزشدیده مفید است، اما طراحی Keyword، Debug و Versioning همچنان کار مهندسی است؛ «بدون کد» بهمعنای «بدون نگهداری» نیست.
BDD
Exampleهای کسبوکار با زبان مشترک مانند Gherkin نوشته میشوند. BDD زمانی ارزش دارد که Product، Developer و Tester واقعاً Exampleها را با هم کشف و بازبینی کنند. تبدیل هر Click به Given/When/Then فقط یک لایه ترجمه اضافه میکند.
Hybrid
بیشتر Frameworkهای واقعی ترکیبیاند: Page Object برای UI، Factory برای Data، Fixture برای Lifecycle و Tag برای CI. برچسب Hybrid بهتنهایی معیار کیفیت نیست؛ مرز و مسئولیت لایهها مهم است.
معیارهای انتخاب فریمورک اتوماسیون تست
۱. پوشش فناوری و پلتفرم
نوع SUT، مرورگر/سیستمعامل، Mobile Native، WebView، چند دامنه، iFrame، دانلود، آپلود، Permission و پروتکلهای مورد نیاز را فهرست کنید. «پشتیبانی میکند» را روی سناریوی واقعی PoC کنید؛ وجود API الزاماً بهمعنای پایداری در Context شما نیست.
۲. زبان و اکوسیستم تیم
زبان مشترک میتواند Code Review، Pairing و رفع خطا را سریع کند. اما صرفاً زبان Backend را کپی نکنید؛ کیفیت Binding، Runner، Documentation و Debug Experience را هم بسنجید. مستندات رسمی زبانهای Playwright صریح میگوید قابلیتهای Automation Core مشترکاند، ولی یکپارچگی اکوسیستم تست میان زبانها متفاوت است؛ برای Node.js، Playwright Test Runner داخلی دارد و برای زبانهای دیگر Runnerهای متناسب پیشنهاد میشوند.
۳. Testability محصول
Locator پایدار، API ایجاد داده، Clock قابل کنترل، Feature Flag، Stub مرزها و دسترسی به Trace بیش از نام Tool روی پایداری اثر دارند. اگر محصول هیچ Test Hook امنی ندارد، تعویض Framework فقط علامت را جابهجا میکند.
۴. Isolation و کنترل State
هر تست باید State آغازین قابل پیشبینی و Cleanup روشن داشته باشد. Context جدا، حساب یکتا، Data Factory و عدم وابستگی به ترتیب اجرا را در PoC بررسی کنید.
۵. Synchronization و Flakiness
Auto-wait یا Expected Wait مفید است، اما تست نادرست را جادویی اصلاح نمیکند. رفتار Animation، Background Request، Eventual Consistency، WebSocket و Toast کوتاهعمر را امتحان کنید. Retry نباید شکست واقعی را سبز کند.
۶. اجرا در CI و مقیاس
Headless، Container، Sharding، Parallelism، Tagging، Fail-fast، Cache Dependency و Publish Artifact را بسنجید. اجرای محلی سریع ولی Pipeline ناپایدار انتخاب خوبی نیست. مقاله راهاندازی CI/CD برای تست خودکار نقطه شروع یکپارچهسازی است.
۷. تشخیص شکست
در یک شکست تصادفی، تیم به چه شواهدی دسترسی دارد؟ Trace، Screenshot، Video، Network Log، Console، Request/Response و Diff باید با محدودیت حریم خصوصی تولید شوند. معیار واقعی، زمان رسیدن از «قرمز شد» به علت محتمل است.
۸. نگهداری و تغییر
اثر تغییر Locator، Route، Authentication و Component را اندازه بگیرید. تعداد فایلهای لازم برای اصلاح یک تغییر رایج، خوانایی Pull Request و قابلیت Refactor با IDE از معیارهای ملموساند.
۹. بلوغ پروژه و حاکمیت Dependency
Release Cadence، Changelog، Documentation، Issue Tracker، سیاست Security، سازگاری نسخهها و Bus Factor را بررسی کنید. محبوبیت امروز تضمین عمر بلندمدت نیست؛ برنامه Upgrade و Exit Strategy بنویسید.
۱۰. هزینه کل مالکیت
TCO فقط License نیست:
TCO =
آموزش + ساخت PoC و Framework + نوشتن تست
+ نگهداری و Flaky Triage
+ CI/Device/Browser Infrastructure
+ Report/Cloud/Support
+ Upgrade و Migration
- ارزش بازخورد سریع و کاهش ریسک
Framework متنباز میتواند هزینه زیرساخت و مهندسی داشته باشد؛ ابزار تجاری نیز ممکن است هزینه Seat، اجرا، Lock-in و خروج داده ایجاد کند. مقایسه تست دستی و خودکار و ROI به برآورد دامنه سرمایهگذاری کمک میکند.
جایگاه Selenium، Playwright، Cypress و Appium
این بخش رتبهبندی نیست؛ محدوده هر گزینه را بر اساس مستندات رسمی روشن میکند:
- Selenium: پروژهای برای اتوماسیون مرورگر؛ WebDriver و Grid اجزای مهم آناند. Grid اجرای مرورگر روی ماشینها و پلتفرمهای مختلف را پشتیبانی میکند. برای ساخت اولین Suite Python، آموزش Selenium WebDriver با Python را ببینید.
- Playwright: Automation مرورگر با Bindingهای JavaScript/TypeScript، Python، Java و .NET؛ تجربه Runner و Integration بر اساس زبان فرق دارد. نسخههای Playwright به Browser Binaryهای مشخص وابستهاند و Upgrade باید در CI آزموده شود.
- Cypress: طبق مستندات رسمی Cypress برای برنامههای مدرن Web، E2E و Component Testing ارائه میشود و App محلی متنباز را از سرویسهای Cloud/Premium جدا میکند. هزینه و نیاز Cloud را مستقل ارزیابی کنید.
- Appium: پلتفرم قابل توسعه برای UI Automation که Driverهای مستقل پلتفرم را نصب میکند. مستندات Appium Core، Driver، Client و Plugin را اجزای جدا معرفی میکند؛ بنابراین نسخه Driver و پیشنیاز Android/iOS بخشی از تصمیماند.
برای انتخاب بر اساس نوع SUT و اکوسیستم گستردهتر، مقاله انتخاب ابزار اتوماسیون متناسب با سیستم را بهعنوان صفحه مقایسه ابزارها دنبال کنید. این مقاله روی معماری و روش تصمیم Framework تمرکز دارد.
ماتریس وزندار انتخاب Framework
ابتدا Must-have را جدا کنید؛ گزینهای که Requirement اجباری را ندارد با امتیاز بالا در بقیه معیارها نباید برنده شود. سپس برای معیارهای باقیمانده وزن ۱ تا ۵ و امتیاز ۱ تا ۵ تعیین کنید:
| معیار | وزن نمونه | شاهد PoC | گزینه A | گزینه B | گزینه C |
|---|---|---|---|---|---|
| سناریوهای حیاتی و Cross-browser | ۵ | اجرای سفر واقعی روی Matrix هدف | |||
| پایداری و Isolation | ۵ | ۵۰ اجرای تکراری و موازی | |||
| تشخیص شکست | ۵ | Trace/Video/Log در شکست عمدی | |||
| مهارت و Review تیم | ۴ | Pairing و Pull Request نمونه | |||
| CI و زمان اجرا | ۴ | Pipeline واقعی، نه لپتاپ | |||
| Data و Testability | ۴ | Seed/Cleanup و Mock مرز | |||
| هزینه زیرساخت/License | ۳ | برآورد سال اول و سوم | |||
| Upgrade و Exit | ۳ | آزمایش Upgrade و نمونه Migration | |||
| دسترسی در ایران | ۴ | نصب تمیز، Registry، Browser/Driver و Artifact |
امتیاز وزنی گزینه =
Σ (وزن معیار × امتیاز مبتنی بر شاهد)
÷ حداکثر امتیاز ممکن × 100
وزنها نمونهاند. امتیاز بدون Evidence PoC را «نامشخص» بگذارید، نه ۳ از ۵. تصمیم را با نتیجه، فرضها و تاریخ بازبینی در Architecture Decision Record ثبت کنید.
PoC واقعی چگونه طراحی میشود؟
PoC نباید فقط Login ساده باشد؛ سناریویی را انتخاب کنید که ریسک Framework را آشکار کند:
- Authentication واقعی با Redirect یا چند Role؛
- Component پویا، Table بزرگ، Shadow DOM یا iFrame در صورت وجود؛
- Upload، Download و کنترل فایل؛
- Network Stub و شبیهسازی خطای Backend؛
- ایجاد داده از API و پاکسازی مستقل؛
- تاریخ شمسی، متن RTL، عدد فارسی/لاتین و پیام کوتاهعمر؛
- اجرای موازی با چند حساب و بدون Collision؛
- شکست عمدی برای سنجش Artifact و Debug؛
- اجرای Headless داخل Runner واقعی CI؛
- Cross-browser یا Device Matrix واقعی محصول؛
- Upgrade یک نسخه Minor و سنجش شکست Dependency؛
- قطع دسترسی اینترنت خارجی و استفاده از Cache/Registry سازمانی در صورت نیاز.
خروجی PoC
- Repository کوچک اما Production-like؛
- Pipeline و زمان اجرای Cold/Warm؛
- تعداد Test، Flaky Run و Failureهای عمدی؛
- نمونه Report و Artifact حساسیتزداییشده؛
- زمان پیادهسازی و زمان تشخیص شکست برای هر گزینه؛
- Gapها، Workaroundها و Dependencyهای اضافی؛
- برآورد TCO و ریسک Migration؛
- Recommendation بههمراه شرط و تاریخ بازبینی.
نمونه سناریوی تصمیم برای یک SaaS ایرانی
فرض کنید محصول React، تیم مسلط به TypeScript و Python، مرورگرهای Chrome/Firefox، CI داخلی GitLab و ۸۰ سفر Regression دارد. Cloud خارجی پایدار نیست و پرداخت Sandbox نیز وجود دارد.
بهجای اعلام برنده از پیش، سه گزینه را در یک PoC مقایسه کنید: Playwright Test با TypeScript، Selenium با pytest و Cypress. Must-haveها میتوانند اجرای Headless داخلی، دو مرورگر هدف، Artifact محلی، Mock شبکه، نصب تکرارپذیر بدون سرویس پولی و Parallel Run مستقل باشند.
اگر گزینهای در اجرای محلی سریع است اما Browser Binary یا Report آن در Runner داخلی قابل دریافت نیست، امتیاز CI/دسترسی پایین میآید. اگر تیم Python در Selenium سریعتر Debug میکند ولی Runtime و Artifact ضعیفتر است، این Trade-off باید در ماتریس دیده شود. نتیجه برای یک تیم دیگر با Stack و Browser Matrix متفاوت قابل کپی نیست.
قواعد طراحی پس از انتخاب Framework
- تست نام و هدف کسبوکار داشته باشد، نه زنجیره Clickها.
- از Locatorهای معنایی و Test ID توافقشده استفاده شود.
- Wait ثابت و Sleep برای Synchronization ممنوع یا محدود باشد.
- State هر تست مستقل و Data آن یکتا باشد.
- UI برای ایجاد همه دادهها استفاده نشود؛ Setup سریعتر در مرز مناسب انجام شود.
- Assertion فقط پایان سفر نباشد؛ State و Side Effect حساس کنترل شوند.
- Retry بهعنوان Signal Flaky ثبت شود و Pass اولیه را بازنویسی نکند.
- Screenshot، Video و Log Secret یا داده شخصی را نشت ندهند.
- Test Code مانند Production Code Review، Lint و Refactor شود.
- Framework Owner و فرایند پیشنهاد تغییر معماری مشخص باشد.
شاخصهای سلامت فریمورک پس از اجرا
موفقیت را با تعداد Test Case نسنجید. این شاخصها قابل اقدامترند:
- Feedback Time: زمان Commit تا نتیجه قابل اعتماد؛
- Flaky Rate: شکستهایی که بدون تغییر محصول در Retest عبور میکنند؛
- Failure Diagnosis Time: زمان فهمیدن علت محتمل؛
- Maintenance Effort: زمان اصلاح تست به ازای تغییر محصول؛
- Signal Quality: سهم شکستهای واقعی محصول از کل شکستها؛
- Critical Risk Coverage: ریسکهای حیاتی دارای Check قابل اعتماد؛
- CI Cost: دقیقه Runner، Device/Browser و Storage Artifact؛
- Quarantine Age: مدت تستهای خارجشده از Gate؛
- Adoption: تعداد اعضایی که میتوانند Test بنویسند، Review و Debug کنند.
اگر Suite سریع رشد میکند اما Flaky و Quarantine نیز رشد میکنند، Framework در حال تولید بدهی است. معیارها را در Review ماهانه یا فصلی بررسی کنید.
ملاحظات ویژه تیمهای ایرانی
- دانلود Browser، Driver، Package و Container Image را از Runner تمیز آزمایش کنید.
- Registry/Proxy مجاز، Cache داخلی و Mirror سازمانی را برای نصب تکرارپذیر طراحی کنید.
- Cloud Device Farm یا Dashboard پولی را Dependency اجباری Framework نکنید مگر دسترسی و پرداخت پایدار باشد.
- مجوز Open-source و شرایط سرویس تجاری را با استفاده سازمانی تطبیق دهید.
- Artifactها را در Storage تحت کنترل نگه دارید و داده شخصی فارسی را Mask کنید.
- تقویم شمسی، RTL، فونت، اعداد فارسی/لاتین، درگاه و پیامک را داخل PoC واقعی بیاورید.
- Windows/Linux Runner، نسخه Browser و دسترسی macOS برای Safari/iOS را در TCO محاسبه کنید.
- دانش Framework را به یک نفر محدود نکنید؛ Pairing، Runbook و Code Review اجباری باشد.
نشانههای انتخاب اشتباه
- برای هر Feature جدید باید Wrapper یا Plugin اختصاصی بنویسید.
- بیشتر زمان تیم صرف تعمیر Framework است تا پوشش ریسک.
- Suite فقط روی لپتاپ یک نفر پایدار است.
- شکست CI بدون Artifact قابل تشخیص است.
- Retry بالا بهجای رفع Flakiness استفاده میشود.
- Test Data مشترک مانع اجرای موازی است.
- Upgrade Dependency ماهها عقب میافتد چون مسیر آزمون ندارید.
- Cloud یا License غیرقابل دسترس، اجرای محلی را هم متوقف میکند.
- Stakeholder از Report نتیجه کسبوکار را نمیفهمد.
- هیچ Exit Strategy برای مهاجرت تستهای حیاتی وجود ندارد.
قالب تصمیم انتخاب Framework
عنوان تصمیم:
تاریخ و تاریخ بازبینی:
مالک:
Scope و Out of Scope:
ریسکهای حیاتی:
Must-haveها:
Constraintهای فنی/حقوقی/دسترسی:
گزینههای Shortlist:
معیارها و وزنها:
سناریوهای PoC:
محیط و CI:
نتایج کمی:
Gap و Workaround:
TCO سال اول/سوم:
ریسک Upgrade و Lock-in:
گزینه منتخب و دلیل:
شرایط ابطال تصمیم:
Migration/Exit Plan:
اقدامهای 30/60/90 روزه:
چکلیست انتخاب فریمورک اتوماسیون
- هدف اتوماسیون و لایه تست مشخص است.
- Must-have از معیار امتیازی جدا شده است.
- ابزار، Runner، Pattern و Framework با هم اشتباه نشدهاند.
- گزینهها از مستندات رسمی و نسخه فعلی بررسی شدهاند.
- مهارت، Review و Debug تیم در تصمیم وزن دارند.
- PoC روی سناریوی سخت و CI واقعی اجرا شده است.
- Isolation، Data، Cleanup و Parallelism آزموده شدهاند.
- شکست عمدی برای سنجش Artifact و Diagnosis ساخته شده است.
- License، Infrastructure، Cloud، Upgrade و Migration در TCO هستند.
- محدودیت دسترسی ایران و نصب تکرارپذیر بررسی شدهاند.
- Security و Masking برای Secret و Artifact تعریف شدهاند.
- ماتریس امتیاز بر Evidence استوار است.
- تصمیم، فرضها، شرط ابطال و تاریخ بازبینی دارد.
- Framework Health با Flaky، Feedback و Maintenance سنجیده میشود.
جمعبندی
انتخاب فریمورک اتوماسیون تست، انتخاب نام محبوبتر نیست؛ طراحی یک سیستم بازخورد قابل اعتماد است. از Scope و ریسک شروع کنید، Must-haveها را جدا کنید، معماری حداقلی تعریف کنید و گزینههای محدود را در CI واقعی روی سناریوهای سخت بسنجید.
اگر تازه شروع میکنید، نقشه راه هشتهفتهای شروع تست خودکار را دنبال کنید؛ اما در پروژه سازمانی، قبل از توسعه Suite بزرگ یک PoC زماندار، ماتریس وزندار و Architecture Decision Record بسازید. هزینه یک هفته ارزیابی معمولاً از بازنویسی صدها تست کمتر است.
سوالات متداول درباره انتخاب فریمورک تست
بهترین فریمورک اتوماسیون تست کدام است؟
گزینه جهانی وجود ندارد. بهترین انتخاب، گزینهای است که Must-haveهای SUT را برآورده کند و در PoC واقعی، CI، مهارت تیم، پایداری، تشخیص شکست و TCO مناسبتری نشان دهد.
آیا Selenium خودش یک Framework کامل است؟
Selenium پروژهای برای اتوماسیون مرورگر است و WebDriver و Grid را ارائه میکند. برای Framework کامل معمولاً به Test Runner، ساختار پروژه، Data/Fixture، Assertion، Reporting و قراردادهای CI نیز نیاز دارید.
Playwright، Cypress یا Selenium را چگونه انتخاب کنیم؟
با Browser/Platform هدف، زبان و Runner، سناریوهای سخت، CI، Artifact، Cross-browser، هزینه و مهارت تیم Shortlist بسازید. سپس همان PoC و ماتریس وزندار را روی هر گزینه اجرا کنید؛ Feature List بهتنهایی کافی نیست.
آیا BDD برای تیم غیر فنی بهترین گزینه است؟
فقط وقتی ذینفعان Exampleها را واقعاً با تیم کشف و Review کنند. Gherkin نگهداری Step Definition و کد Automation را حذف نمیکند و اگر هر Click را ترجمه کند، پیچیدگی اضافه میسازد.
PoC انتخاب Framework باید چقدر بزرگ باشد؟
آنقدر کوچک که در زمان محدود تمام شود و آنقدر واقعی که بزرگترین ریسکها را نشان دهد. معمولاً چند سفر حیاتی با Data Setup، شکست عمدی، Parallel Run، Cross-browser و اجرای CI از دهها تست ساده ارزشمندتر است.

