بهترین سایت تمرین تست نرم‌افزار، مشهورترین یا پر‌باگ‌ترین سایت نیست؛ Targetی است که برای Skill هدف شما مناسب، مجاز، قابل Reset و دارای Oracle باشد. یک Demo عمومی ممکن است برای چند تعامل UI ساخته شده باشد، نه هزار Request، اسکن امنیتی، نگهداری دائمی داده یا اجرای شبانهٔ CI. واژهٔ «Practice» نیز مجوز نامحدود ایجاد نمی‌کند.

این راهنما فهرست ۱۴۰۵/۲۰۲۶ را با یک Practice Target Contract ترکیب می‌کند. قبل از هر Run، Owner، Scope، Terms، روش‌های مجاز، Rate/Concurrency، داده، حساب، Reset و Evidence را ثبت می‌کنید؛ بعد Goal را به Task، Oracle و Transfer تبدیل می‌کنید. هیچ سایت واقعیِ خارج از این قرارداد، زمین بازی QA نیست.

پاسخ کوتاه: هشت Target، هشت کاربرد متفاوت

  • Sauce demo + examples: Login/Inventory و نمونه‌های UI Automation.
  • The Internet: تعامل‌های منفرد مانند Alert، Upload، Dynamic Loading و Shadow DOM.
  • DemoQA: Elements، Forms، Frames، Widgets، Interactions و Book Store.
  • ReqRes: API میزبانی‌شده با API key، Plan، Limit و دادهٔ پایدار.
  • Restful-Booker: CRUD/Auth آزمایشی با Reset ده‌دقیقه‌ای.
  • Web Security Academy: Labهای امنیتی اختصاصیِ موضوع‌محور.
  • OWASP Juice Shop: برنامهٔ آسیب‌پذیر Self-host؛ نه هک دمو عمومی.
  • OWASP WebGoat: درس‌های امنیتی Localhost در محیط ایزوله.
Target choice = SkillFit + Permission + Isolation + Reset + Oracle + Evidence
Famous != suitable
Free != unlimited
Deliberately vulnerable != permission for every deployment
HTTP 200 != target health

مرز زمانی و مسئولیت

Snapshot این فهرست ۲۳ مرداد ۱۴۰۵، برابر با ۱۴ اوت ۲۰۲۶ است. دامنه، Plan، API key، Rate limit، Terms، نسخه، دسترسی از ایران و Availability تغییر می‌کنند. قبل از هر Run منبع رسمی را دوباره بخوانید. این مقاله مجوز حقوقی، امنیتی یا عملیاتی صادر نمی‌کند؛ مجوز باید از Owner همان Target و برای همان Scope معتبر باشد.

خطای اصلی متن‌های فهرستی

عبارت‌هایی مانند «کاملاً امن و قانونی»، «بدون هیچ نگرانی»، «تماماً رایگان»، «بهترین برای همه» یا «واقعی» ادعاهای مطلق‌اند. سرویس ثالث می‌تواند shared، ناپایدار، quotaدار یا مشروط باشد. دادهٔ شما ممکن است ذخیره شود. Automation سبک با Load متفاوت است و UI practice با Security authorization یکی نیست.

مالکیت موضوع این مقاله

این صفحه مالک انتخاب و ادارهٔ Practice Target و تبدیل تمرین به Skill Transfer است. آموزش یک Framework، طراحی Test Case، تست API، تست اکتشافی، امنیت مجاز و ساخت پورتفولیو هرکدام Owner جدا دارند. بنابراین کپی چند Test Script یا جمع‌کردن Bug count معیار پایان نیست.

Practice Target Contract چیست؟

قرارداد تمرین یک Snapshot قابل‌ممیزی است: Target دقیق، Purpose، Owner/Source، مجوز، Boundary شبکه/داده، Method، Rate/Concurrency، Reset، Account، Evidence و Expiry را کنار هم می‌گذارد. اگر فیلد حیاتی Unknown است، Run به `HOLD` می‌رود؛ حدس یا شهرت سایت جای پاسخ را نمی‌گیرد.

PRACTICE-TARGET-CONTRACT
contract_id / version / as_of / expires_at:
target_name / exact_origin / owner_source:
purpose / skill_goal / learner_level:
mode: HOSTED_SHARED | HOSTED_ISOLATED | SELF_HOSTED
permission_ref / terms_ref / allowed_scope / prohibited_scope:
methods / Rate/Concurrency / schedule / automation_allowed:
account / secret / data / reset / retention / teardown:
evidence_allowed / privacy / review_owner:

Gate مجوز پیش از بازکردن Tool

  • Origin دقیق و Owner روشن است؟
  • سایت یا پروژه صریحاً برای آن نوع تمرین ارائه شده است؟
  • Hosted instance و source code مجوز یکسان دارند؟
  • Automation، Mutation، Security و Performance جداگانه روشن‌اند؟
  • Rate، concurrency، account و data policy معلوم‌اند؟
  • اگر پاسخ منفی/نامعلوم است، آیا Self-host جایگزین داریم؟
PERMISSION-GATE
target_id / activity_id:
authorization_source / captured_at:
allowed_methods / endpoints / identities:
rate_concurrency / start_end:
data_and_side_effect_boundary:
status: PASS | FAIL | UNKNOWN-HOLD
recheck_trigger:

Hosted Shared، Hosted Isolated و Self-hosted

Modeمزیتریسککار مناسب
Hosted Sharedشروع سریعتداخل، Rate، Drift، عدم کنترل ResetRun سبک و محدود
Hosted IsolatedSession/instance جداExpiry، telemetry، TermsLab موضوعی
Self-hostedکنترل Version/Data/FaultSetup، exposure، cleanupSecurity/Load/CI کنترل‌شده

Self-hosted به‌خودی‌خود امن نیست. برنامهٔ عمداً آسیب‌پذیر اگر روی Interface عمومی، شبکهٔ سازمان یا Cloud بدون کنترل بالا بیاید، به Target دیگران تبدیل می‌شود. Loopback، Network isolation، Synthetic data، Snapshot و Teardown باید قبل از اجرا آماده باشند.

ماتریس انتخاب سریع Target

TargetSkill اصلیState/Resetمرز مهم
Sauce examplesUI flow/automationShared/demo-dependentنمونه آموزشی، نه Production
The InternetWeb element/waitصفحات منفردLoad/Security نامفروض
DemoQAForm/widget/interactionHosted sharedDrift/ads/availability
ReqResAPI/Auth/CRUDProject/persistentAPI key/plan/quota/license
Restful-BookerAPI workflowReset حدود ۱۰ دقیقهCollision/shared state
AcademySecurity labDedicated/ephemeralفقط lab assigned
Juice ShopVulnerable appSelf-host resetدموی عمومی ممنوع برای hacking
WebGoatSecurity lessonsSelf-host/localعمداً ناامن؛ network isolate

SauceDemo و نمونه‌های رسمی

مخزن JavaScript Demonstration Scripts رسمی Sauce Labs نمونه‌های Selenium/WebdriverIO/Playwright/Cypress را گرد می‌آورد و صریحاً می‌گوید کدها AS-IS، برای آموزش/نمایش و نه Production هستند. برای تمرین Login، Inventory و ساخت Harness سبک مناسب است؛ اما «نمونه رسمی» به معنی معماری نهایی یا مجوز Load/DAST نیست.

  • Goal را مثلاً «تشخیص خطای Login با Oracle رفتاری» تعریف کنید.
  • Locator را با دلیل Stability انتخاب کنید، نه صرفاً کوتاه‌ترین selector.
  • Wait را بر Signal قابل‌مشاهده بنا کنید، نه sleep ثابت.
  • یک Failure مصنوعی و مسیر Diagnosis اضافه کنید.
  • Credentialهای عمومی Demo را Secret واقعی جا نزنید و Secret شخصی Commit نکنید.

The Internet برای تعامل‌های منفرد وب

The Internet فهرستی از مثال‌ها مانند Dynamic Controls/Loading، Alerts، Upload، Multiple Windows، Shadow DOM، Status Codes و Tables دارد. ارزش آن Isolation مسئله است: هر تمرین یک Mechanism را برجسته می‌کند. محدودیتش همین است؛ یک صفحهٔ منفرد E2E یا معماری واقعی محصول را اثبات نمی‌کند.

ELEMENT-PRACTICE
mechanism: dynamic_loading
claim: wait reacts to observable readiness
setup / action / oracle:
negative_case / timeout_budget:
artifact: trace + assertion + diagnosis note
variation: slow/fast/reordered
transfer_target: owned local fixture

DemoQA برای Form، Widget و Interaction

DemoQA در Snapshot امروز Elements، Forms، Alerts/Frames/Windows، Widgets، Interactions و Book Store را نشان می‌دهد. برای Test Design، Keyboard interaction، upload و dynamic property مفید است؛ ولی تبلیغ، Drift DOM، دسترسی منطقه‌ای یا State مشترک می‌تواند نتیجه را تغییر دهد. نسخه/Browser/Viewport و Evidence را ثبت کنید.

ReqRes؛ اصلاح یک ادعای منقضی

مستندات جاری ReqRes صریح است: همهٔ درخواست‌های ReqRes اکنون به `x-api-key` نیاز دارند؛ برای Session کاربر Bearer جداست و Plan/Quota/License و Environment header مطرح‌اند. بنابراین ادعای قدیمی «بدون ثبت‌نام یا API key» غلط است. Key را Secret نگه دارید، Plan/استفادهٔ تجاری را بررسی و CI را به سرویس ثالث بی‌قید وابسته نکنید.

HOSTED-API-IDENTITY
provider / docs_as_of:
project / environment:
auth_mode: API_KEY | SESSION_TOKEN
key_source / scope / rotation / revoke:
plan / quota / commercial_use_status:
data_persistence / reset / deletion:
CI_dependency / fallback:

Restful-Booker؛ State مشترک و Reset

Restful-Booker خودش را API playground با CRUD، Authentication، چند باگ و ده رکورد اولیه معرفی می‌کند و می‌گوید تقریباً هر ده دقیقه Reset می‌شود. برای workflow API خوب است؛ اما Run موازی یا Reset می‌تواند دادهٔ شما را عوض کند. ID را Discover کنید، Oracle را State-aware بسازید و نتیجهٔ shared service را پایدار فرض نکنید.

SHARED-STATE-RUN
run_id / target_snapshot:
record_discovery / ownership_marker:
precondition_digest:
mutation_scope / cleanup_attempt:
reset_window / collision_signal:
result: PASS | FAIL | INCONCLUSIVE
evidence / expiry:

Web Security Academy؛ فقط Lab اختصاصی

فهرست Labهای Web Security Academy موضوع‌هایی از SQL injection و XSS تا API testing و Race condition دارد. Target مجاز همان Instance و Scope ساخته‌شده برای Lab است؛ تکنیک را به Domain دیگر تعمیم عملی ندهید. Account، Session، Expiry و Rules همان Lab را ثبت کنید و دادهٔ شخصی در Input نگذارید.

OWASP Juice Shop؛ Self-host را ترجیح دهید

مخزن رسمی OWASP Juice Shop برنامه را عمداً آسیب‌پذیر معرفی و روش‌های Self-host را مستند می‌کند؛ اما همان README هشدار می‌دهد دموی عمومی Juice Shop برای تمرین هک شما نیست و uptime تضمین ندارد. نسخهٔ محلی/ایزوله را با Source/Release pin، Loopback، Synthetic data، no-ingress و Snapshot اداره کنید.

VULNERABLE-LAB-BOUNDARY
project / release_or_digest:
host_owner: LEARNER
bind_scope: LOOPBACK_ONLY
network: ISOLATED / egress_policy:
data: SYNTHETIC_ONLY
external_integrations: DISABLED
snapshot / restore / teardown:
authorization: SELF_OWNED_INSTANCE_ONLY

OWASP WebGoat؛ ناامنی عمدی را جدی بگیرید

README رسمی OWASP WebGoat آن را برنامهٔ عمداً ناامن آموزشی می‌نامد، Default را روی localhost می‌بندد و هشدار می‌دهد هنگام استفاده اتصال اینترنت را محدود کنید. این هشدار بخشی از Lab است، نه حاشیه. انتشار Port عمومی، استفاده از Credential واقعی یا اتصال به شبکهٔ کاری، تمرین نیست.

چه چیزهایی عمداً در فهرست «بهترین» نیست؟

  • هر سایت فروشگاهی/بانکی/دولتی واقعی، حتی اگر Bug به نظر برسد؛
  • Bug bounty خارج از Scope/Policy و زمان مجاز؛
  • Demo ناشناس بدون Owner/Terms/Reset؛
  • API عمومی Production با حساب یا دادهٔ واقعی؛
  • Clone آسیب‌پذیر ناشناس که ممکن است بدافزار یا egress پنهان داشته باشد؛
  • سرویس رایگان به‌عنوان Dependency دائمی CI بدون Plan/Quota/Exit.

از Skill Goal شروع کنید، نه از Tool

«تمرین Playwright» Goal نیست. بنویسید چه Task و Decisionی باید بهتر شود: Wait قابل‌اعتماد، Contract Oracle، State isolation، Failure diagnosis، Exploratory note یا Risk communication. Tool فقط وسیله است و می‌تواند در Transfer عوض شود.

SKILL-GOAL
goal_id / capability:
work_task / decision_supported:
baseline_behavior / gap_evidence:
target_behavior / rubric:
practice_target_fit:
transfer_context / due / reviewer:

چرخهٔ انتقال مهارت

چرخهٔ کامل این است: `Goal → Task → Oracle → Run → Evidence → Feedback → Variation → Transfer`. اگر فقط Script سبز شود، ممکن است Syntax یاد گرفته باشید؛ نه طراحی تست یا تشخیص خرابی. Variation باید یکی از فرض‌ها را تغییر دهد و Transfer روی Fixture دیگری که خودتان مجاز دارید اجرا شود.

  1. Goal رفتاری و Baseline را ثبت کنید.
  2. Task و Oracle را پیش از اجرا بنویسید.
  3. یک Run کنترل و یک Fault اجرا کنید.
  4. Evidence کمینه و قابل بازتولید جمع کنید.
  5. از Reviewer یا Self-review با Rubric بازخورد بگیرید.
  6. Data/Timing/Order/Browser را Variation دهید.
  7. همان Claim را روی Fixture دوم منتقل کنید.
  8. نتیجه را Keep/Adapt/Stop/Retire کنید.

Charter تمرین دستی و اکتشافی

«سایت را بگرد و باگ پیدا کن» قابل ارزیابی نیست. Mission، Scope، Risk، Data، Timebox، Oracle و Note schema تعیین کنید. Bug count را امتیاز مهارت نکنید؛ یک مدل یادگیری ممکن است Feature کم یا Bug عمدی داشته باشد. Observation، Inference و Question را جدا نگه دارید.

PRACTICE-CHARTER
charter_id / mission:
target_contract_ref / scope / out_of_scope:
risks / test_ideas / oracle_sources:
data / personas: FICTIONAL
timebox / stop_conditions:
notes: OBSERVATION | INFERENCE | QUESTION
debrief / follow_up:

Automation؛ سبزشدن پایان نیست

  • Setup و Cleanup مستقل؛
  • Locator دارای قرارداد و Failure message؛
  • Wait بر State، نه Delay ثابت؛
  • Oracle فراتر از HTTP/UI presence؛
  • Trace/Screenshot فقط وقتی لازم و پاک‌سازی‌شده؛
  • Retry برای تشخیص، نه پنهان‌کردن Flake؛
  • Version/Browser/Data/Target snapshot؛
  • Maintenance و Retirement criteria.

Page Object Model یا Allure می‌توانند مفید باشند، اما اجباری/جهانی نیستند. Pattern را از درد واقعی انتخاب کنید. Report زیبا Oracle ناقص را اصلاح نمی‌کند و Abstraction زودهنگام می‌تواند رفتار را پنهان کند.

API؛ Status Code را Verdict کامل نکنید

در ReqRes یا Restful-Booker، Method/Path/Header/Auth/Schema را با Business/State/Side-effect جدا کنید. `۲۰۰` فقط لایه‌ای از نتیجه است. Missing/null/empty، enum، time، Unicode، duplicate، retry، timeout و order را در Scope مجاز تمرین کنید. روی Hosted shared تست مخرب، flood یا دادهٔ حساس نفرستید.

API-ORACLE
case_id / contract_snapshot:
request_shape_digest / synthetic_data_id:
transport / protocol / schema:
business / state / side_effect:
authz_boundary / timing:
verdict: PASS | FAIL | INCONCLUSIVE
evidence / cleanup:

Security؛ فقط Instance مجاز و کنترل‌شده

وجود واژهٔ OWASP مجوز حمله به هر deployment نیست. برای Juice Shop/WebGoat از Instance تحت مالکیت خود و ایزوله استفاده کنید؛ برای Academy فقط Lab اختصاصی. Payload واقعی، Credential theft، persistence، pivot، third-party callback، resource exhaustion و دادهٔ بیرونی در این تمرین جای ندارند. روش‌های آموزشی را به Target دیگر کپی نکنید.

Performance؛ سرویس عمومی Target بار نیست

هزار Request به یک Demo عمومی «تمرین JMeter» نیست؛ مصرف منبع شخص ثالث است. برای Load، برنامهٔ Self-host، ظرفیت سیستم خود، Workload Contract، سقف ایمنی، Monitoring، Stop condition و Recovery لازم است. حتی localhost اگر روی لپ‌تاپ مشترک یا شبکهٔ سازمان است باید Boundary داشته باشد.

LOCAL-WORKLOAD-SAFETY
owned_target / isolated_host:
model / arrival_rate / concurrency / duration:
resource_ceiling / abort_signal:
monitoring / baseline / warmup:
data_reset / recovery_check:
external_traffic=false
owner_present=true

دادهٔ تمرین؛ Synthetic و قابل حذف

  • نام، موبایل، ایمیل، آدرس، تصویر و شناسهٔ واقعی وارد نکنید.
  • از PAN/CVV2/OTP، حساب بانکی، Token و Cookie واقعی استفاده نکنید.
  • Dataset را با ID، Seed، Owner و delete_at ثبت کنید.
  • Screenshot/Trace/Video ممکن است Secret یا PII بگیرد؛ قبل از انتشار بازبینی کنید.
  • در سرویس shared، نوشتهٔ شما ممکن است توسط دیگری دیده یا تغییر کند.

دسترسی از ایران و تغییر سرویس

در دسترس بودن در تاریخ ممیزی، وعدهٔ آینده نیست. ۴۰۳، WAF، Rate، تحریم، Billing، License، account eligibility یا DNS می‌تواند تغییر کند. راه‌حل امن: Cause classification، منبع رسمی، Self-host/Fixture جایگزین و Exit plan. هویت، نشانی یا موقعیت جعلی، حساب واسطه، پنهان‌سازی محل، دورزدن TLS یا Credential مشترک توصیه نمی‌شود.

ACCESS-CONTINUITY
target / checked_at / region_context:
result: AVAILABLE | DEGRADED | BLOCKED | UNKNOWN
evidence: status / official_notice / terms:
cause_hypotheses / confidence:
approved_fallback: SELF_HOST | LOCAL_FIXTURE | OTHER
data_export / secret_revoke / switch_trigger:

RTL، Unicode و دادهٔ ایرانی

Demo خارجی معمولاً نیاز ایران را پوشش نمی‌دهد. روی Fixture خود، IRR canonical و تومان فقط نمایشی ۱:۱۰، Persian/Arabic/Latin digits، ی/ی، ک/ک، ZWNJ، RTL/LTR/Bidi، UTC instant و Asia/Tehran view را اضافه کنید. جلالی Presentation است، نه جایگزین instant. داده کاملاً ساختگی باشد.

Evidence Pack کمینه

PRACTICE-EVIDENCE
run_id / goal_id / target_contract_version:
tool_runtime_lock / browser_or_client:
fixture_seed / case_id / oracle_version:
start_end_utc / environment:
result / failure_class / diagnosis:
sanitized_artifacts[] / hashes[]:
feedback / variation / transfer_result:

Evidence باید Claim را پشتیبانی کند، نه فقط «من اجرا کردم». Screenshot زیاد، Log خام یا Video طولانی بدون Purpose ارزش را کم و ریسک نشت را زیاد می‌کند. Artifactهای حساس را عمومی نکنید و Retention/Deletion را ثبت کنید.

پورتفولیو؛ Permission و Attribution

  • کد و Artifact خودتان را از Target/source جدا کنید.
  • License، Attribution و محدودیت بازنشر را رعایت کنید.
  • Credential، Token، Cookie، PII و دادهٔ shared را حذف کنید.
  • Claim را محدود بنویسید: چه Skill، چه Target snapshot و چه Gap.
  • Pass count، Bug count و Scoreboard را معادل Seniority ندانید.
  • Reproduction امن و Cleanup را مستند کنید.

Rubric مهارت؛ چه چیزی را امتیاز دهیم؟

بعدشاهدضدسنجه
FramingGoal/Scope/Risk روشنتعداد سایت
DesignCase/Charter و Oracleتعداد Test Case
ExecutionReproducible Runصرفاً سبز بودن
DiagnosisFailure classificationScreenshot زیاد
MaintenanceDrift/flake/change responseFramework پیچیده
SafetyPermission/data/rate/cleanup«فقط Demo بود»
TransferVariation و Fixture دومحفظ‌کردن tutorial

Feedback؛ Reviewer چه ببیند؟

  • آیا Claim و Oracle قبل از Run نوشته شده‌اند؟
  • آیا Target Contract واقعاً آن فعالیت را اجازه می‌دهد؟
  • آیا Failure میان Product/Target/Harness/Data/Environment جدا شده؟
  • آیا Test مستقل و قابل تکرار است؟
  • آیا Evidence کمینه و پاک‌سازی شده؟
  • آیا Variation و Transfer Skill را نشان می‌دهند؟

برنامهٔ ۳۰روزهٔ Contextual

  1. روز ۱ تا ۳: Capability، Baseline، Permission و Target Contract.
  2. روز ۴ تا ۸: Charter دستی روی Target UI سبک.
  3. روز ۹ تا ۱۴: سه Automation case با Fault/Diagnosis.
  4. روز ۱۵ تا ۱۹: API Oracle و shared-state collision.
  5. روز ۲۰ تا ۲۳: یک Lab امنیتی isolated و بدون exploit بیرونی.
  6. روز ۲۴ تا ۲۷: Variationهای Unicode/time/order و Fixture دوم.
  7. روز ۲۸ تا ۳۰: Reviewer، Evidence Pack، Transfer و Keep/Adapt/Stop.

آزمایشگاه آفلاین ایرانی SYN-QA-PRACTICE-IR-۰۱

Lab نهایی یک Checkout کاملاً ساختگی روی loopback دارد: Catalog، Cart، Order، PaymentAttempt، PSP Stub، Callback، Ledger و Notification fake. Timeout قبل/بعد Fake Commit، retry، duplicate، late/reordered event و Unknown state دارد. هیچ شبکهٔ بیرونی، شرکت/شخص/کاربر واقعی، پول، بانک، PSP، account، credential یا Production وارد نمی‌شود.

LAB SYN-QA-PRACTICE-IR-01
network=LOOPBACK_ONLY; external_calls=false
data=SYNTHETIC; real_person=false; real_payment=false
currency=IRR; toman_display_only=1:10
digits=123|۱۲۳|١٢٣; unicode=ی/ي|ک/ك|ZWNJ|RTL/LTR/Bidi
time=UTC_INSTANT + ASIA_TEHRAN_VIEW; jalali=presentation_only
faults=timeout_before_commit|timeout_after_commit|duplicate|late|reordered
cleanup=SNAPSHOT_RESTORE; release_decision=false

Validator و مرز ادعا

Checker سطحی با دیدن شهرت، رایگان‌بودن، UI/API و Bug عمدی می‌گوید `FAMOUS_FREE_SAFE_REALISTIC_NO_PERMISSION_ALL_AUTOMATION_PORTFOLIO_READY`. ممیزی دادهٔ ناقص ۱۴۴ کنترل Target/Permission/Rate/Data/Reset/Oracle/Evidence/Feedback/Transfer را پیدا نمی‌کند و `HOLD-ONE-FOUR-FOUR` می‌دهد.

Safety rule مستقل `NO_REAL_PUBLIC_TARGET_USER_ACCOUNT_CREDENTIAL_SECRET_PERSON_PAYMENT_NETWORK_LOAD_SECURITY_ATTACK_PRODUCTION_OR_EXTERNAL_MUTATION_PASS` می‌دهد. پس از تکمیل Fixture، خروجی فقط `READY_FOR_PRACTICE_TARGET_SKILL_TRANSFER_REVIEW-ZERO` است؛ نه اثبات قانونی‌بودن هر Run، امنیت Lab، تسلط حرفه‌ای، کشف همهٔ Bugها، آمادگی شغلی، کیفیت پورتفولیو یا انتقال قطعی به Production.

Anti-patternهای رایج

  • «Demo است، پس هر کاری مجاز است»؛
  • اسکن/Load روی Hosted shared؛
  • هک دموی عمومی Juice Shop؛
  • انتقال technique Academy به Domain واقعی؛
  • Key/Token در Git یا Screenshot؛
  • ReqRes بدون API key یا Plan check؛
  • اعتماد به Reset مشترک به‌عنوان isolation؛
  • sleep ثابت، retry کور و assertion سطحی؛
  • HTTP ۲۰۰ به‌عنوان business success؛
  • POM/Report به‌عنوان هدف؛
  • Bug count/Scoreboard به‌عنوان مهارت؛
  • PII یا پرداخت واقعی در Fixture؛
  • برنامهٔ آسیب‌پذیر روی Public interface؛
  • پورتفولیو بدون License/Attribution/Redaction؛
  • تضمین «رایگان، امن، واقعی و همیشه در دسترس».

چک‌لیست Owner پیش از Run

  1. Goal/Task/Decision روشن است.
  2. Origin و Owner دقیق ثبت شده‌اند.
  3. Source/Terms امروز بررسی شده‌اند.
  4. Hosted instance با source license یکی فرض نشده است.
  5. Activity در Scope مجاز است.
  6. Rate/Concurrency/Schedule روشن است.
  7. Automation/Security/Load جدا Gate شده‌اند.
  8. Account/Key کم‌اختیار و قابل Revocation است.
  9. هیچ PII/Secret/پرداخت واقعی نیست.
  10. State/Reset/Collision شناخته شده است.
  11. Oracle قبل از Run نوشته شده است.
  12. Fault و Inconclusive مسیر دارند.
  13. Evidence کمینه و Sanitized است.
  14. Self-host روی Loopback/isolated است.
  15. Snapshot/Restore/Teardown آماده است.
  16. دسترسی ایران و Fallback بررسی شده است.
  17. Feedback با Rubric انجام می‌شود.
  18. Variation یک فرض را تغییر می‌دهد.
  19. Transfer روی Fixture دوم سنجیده می‌شود.
  20. Retention/Deletion/Portfolio permission روشن است.

مسیر مطالعهٔ داخلی

برای مرز مجوز از مجوز فعالیت تست و EULA، برای خروجی عمومی از پورتفولیوی QA و Permission، برای انتخاب Gap از ماتریس مهارت‌های تستر و برای Harness قابل‌تحویل از نقشهٔ مهندس اتوماسیون استفاده کنید.

برای API، ماتریس Contract تست SOAP/REST؛ برای امنیت مجاز، OWASP Top ۱۰ و Charter مجاز؛ برای Session، تخصیص تست اکتشافی و Scripted؛ و برای Artifact، سناریوی تست در برابر Test Case مکمل این راهنما هستند.

سؤالات متداول سایت‌های تمرین تست نرم‌افزار

آیا همهٔ سایت‌های معرفی‌شده رایگان‌اند؟

نه به‌صورت مطلق. بعضی Hosted targetها استفادهٔ رایگان محدود، Account/API key، quota، Plan یا مجوز تجاری دارند و می‌توانند تغییر کنند. پروژهٔ متن‌باز نیز هزینهٔ اجرا/نگهداری و License دارد. صفحهٔ رسمی را در تاریخ Run بررسی کنید.

بهترین سایت برای شروع Automation کدام است؟

به Skill Goal بستگی دارد. The Internet برای یک Mechanism، SauceDemo برای flow کوچک و DemoQA برای تنوع Element مفیدند. ابتدا یک Target و سه Case با Oracle/Failure diagnosis انتخاب کنید؛ سپس روی Fixture دوم Transfer بگیرید.

آیا می‌توان روی این سایت‌ها تست Load اجرا کرد؟

بدون مجوز صریح خیر. Hosted demo/shared را Target بار ندانید. یک برنامهٔ Self-host تحت مالکیت خود، Workload Contract، سقف منابع، Monitoring و abort/recovery بسازید. رایگان یا Demo بودن اجازهٔ مصرف انبوه منبع نیست.

آیا Juice Shop عمومی برای تمرین امنیت مناسب است؟

README رسمی می‌گوید Demo عمومی برای hacking شما نیست. نسخهٔ Self-host ایزوله یا Lab رسمی اختصاصی را انتخاب کنید. هر deployment Scope و Owner جدا دارد؛ عمداً آسیب‌پذیر بودن source به همهٔ Instanceها مجوز نمی‌دهد.

چطور تمرین را به پورتفولیو تبدیل کنیم؟

Claim محدود، Contract/نسخهٔ Target، Goal، Oracle، Fault، Diagnosis، Variation و Transfer را نشان دهید. License/Attribution را رعایت، Secret/PII/دادهٔ shared را حذف و فقط Artifact مجاز خودتان را منتشر کنید. تعداد Script یا Bug به‌تنهایی مهارت را ثابت نمی‌کند.

جمع‌بندی: زمین بازی خوب، مرز دارد

سایت تمرین مفید جایی نیست که بتوانید «هر کاری» روی آن انجام دهید؛ جایی است که Goal، Permission، Scope، Rate، Data، Reset و Oracle آن روشن باشد. Target hosted را سبک و مسئولانه به‌کار ببرید، امنیت/بار را روی Lab ایزولهٔ خود انجام دهید، دسترسی و Terms را تاریخ‌دار نگه دارید و هر تمرین را با Feedback، Variation و Transfer به مهارتی قابل‌اثبات تبدیل کنید.

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