تست‌ها در یک Kubernetes موقت سبزند، اما Release در Production پس از تغییر Secret و Failover دیتابیس قطع می‌شود. تیم می‌گوید «ما در Cloud تست کرده‌ایم»؛ با این حال Environment تست از Managed database، IAM policy، Network path، Quota، Backup و Deployment topology واقعی متفاوت بوده است. اجرای Test runner روی یک VM ابری فقط محل Compute را عوض می‌کند؛ الزاماً رفتار Cloud workload را اثبات نمی‌کند.

تست ابری یا Cloud Testing یک اصطلاح چتری است. ممکن است به تست برنامه‌ای که روی Cloud اجرا می‌شود، استفاده از Cloud برای اجرای Test، آزمون Infrastructure/Configuration یا تمرین Reliability و Recovery اشاره کند. اگر این Scopeها جدا نشوند، تیم هزینه و ریسک را مقایسه می‌کند اما نمی‌داند دقیقاً چه Evidenceای خریده است.

خلاصه اجرایی: ابتدا SUT، تصمیم و سطح Fidelity را مشخص کنید؛ سپس Account/Subscription/Project ایزوله، Artifact تغییرناپذیر، IaC و Manifest، Test data امن، Health gate، Observability، Cost/TTL و Cleanup بسازید. AWS، Azure و GCP را با Must-have و PoC همان Region/Service/Quota مقایسه کنید، نه با تعداد سرویس یا شهرت کلی. Cloud می‌تواند سریع و مقیاس‌پذیر باشد، اما ارزان‌تر، امن‌تر یا Production-like بودن آن خودکار نیست.

تست ابری چیست؟ چهار دامنه‌ای که نباید مخلوط شوند

۱. Testing a cloud-hosted application

SUT روی IaaS، PaaS، Container platform، Serverless یا SaaS dependency اجرا می‌شود. هدف آزمون رفتار برنامه با Service limit، Identity، Network، Scaling، Storage consistency، Failure و Configuration واقعی است.

۲. Using cloud resources for testing

Test runner، Browser/device، Load generator یا Environment در Cloud provision می‌شود، حتی اگر SUT On-premise یا در Provider دیگری باشد. هدف می‌تواند Parallelism، Device access یا ظرفیت موقت باشد. این دامنه دربارهٔ زیرساخت اجرای Test است، نه الزاماً Cloud-native behavior محصول.

۳. Testing cloud infrastructure and configuration

IaC plan، Policy، IAM، Network، Encryption، Backup، Observability، Autoscaling و Drift بررسی می‌شوند. «Infrastructure deploy شد» Oracle کافی نیست؛ باید Reachability مجاز/غیرمجاز، Guardrail، Health و رفتار Upgrade/Destroy آزموده شود.

۴. Reliability، migration و recovery testing

Failover، Restore، Dependency outage، Zone/Region disruption، Queue backlog، Throttling، Rollback و RTO/RPO تمرین می‌شوند. این آزمایش‌ها مجوز، Blast radius، Steady state، Stop condition و Recovery evidence می‌خواهند.

یک Run می‌تواند چند دامنه داشته باشد

مثلاً Load generator در Azure، SUT در AWS و Analytics در GCP باشد. گزارش باید SUT location، Generator location، Data path، Provider dependency و مسئولیت هر Boundary را ثبت کند؛ عبارت «Cloud test» به‌تنهایی قابل‌ممیزی نیست.

تست در Cloud با تست Cloud-native چه تفاوتی دارد؟

جابجایی VM رفتار معماری را عوض نمی‌کند

انتقال Selenium Grid یا JMeter به VM ابری شاید Capacity provisioning را آسان کند، اما Autoscaling، Managed service، Event delivery یا Multi-zone recovery را آزمون نمی‌کند. این فقط Test infrastructure در Cloud است.

Cloud-native یعنی Dependency و Failure mode تازه

Control plane، Managed runtime، Identity federation، eventual consistency، ephemeral compute، queue، object storage، regional service و quota به System boundary وارد می‌شوند. Contract و Observability این Boundaryها باید در Test strategy حاضر باشند.

Production-like یک عبارت مطلق نیست

یک Environment می‌تواند برای Contract fidelity مناسب و برای Capacity نامناسب باشد. شباهت را بُعدی بنویسید: Version، Topology، Data shape، Network، Identity، Scale، Region، Observability و Dependency mode. Environment ارزان‌تر می‌تواند برای یک Risk کافی و برای Risk دیگر گمراه‌کننده باشد.

پیش از انتخاب Provider چه سؤال‌هایی پاسخ دهیم؟

تصمیم مورد حمایت چیست؟

Merge، Release، Capacity، Device support، Recovery، Migration یا Vendor selection؟ Test بدون Decision مصرف‌کننده ممکن است Artifact زیادی بسازد اما هیچ Gate یا Learning مشخصی نداشته باشد.

SUT و خارج از Scope کجاست؟

Application، Managed service، DNS، CDN، Identity provider، Bank sandbox، Queue، Client و Operator را روی Boundary map قرار دهید. Dependency خارج از کنترل باید Contract، Virtualization یا Failure policy داشته باشد.

چه Fidelity لازم است؟

برای Unit/Component به Local/container کافی است؛ برای IAM/Network باید Provider resource واقعی باشد؛ برای Performance به Topology و Capacity معتبر نیاز است؛ برای Disaster recovery باید Backup/Replica/Runbook واقعی با Scope امن تمرین شود.

چه چیزی Cloud نباید دریافت کند؟

Production dataset، Secret، Token بانکی، Source محرمانه، Artifact بدون License یا Log حاوی PII ممکن است محدودیت داشته باشد. Data classification و Allowed destinations را قبل از Account ساختن مشخص کنید.

Exit و Cleanup چیست؟

چه کسی Environment را Destroy می‌کند؟ State، Log، Snapshot، Bucket و Secret چه زمانی حذف می‌شوند؟ اگر Vendor قطع شد Test چگونه اجرا می‌شود؟ این‌ها Requirements هستند، نه کار پس از Pilot.

مسئولیت مشترک در تست ابری؛ Provider دقیقاً چه چیزی را نمی‌گیرد؟

AWS: مسئولیت با Service انتخابی تغییر می‌کند

AWS Shared Responsibility Model توضیح می‌دهد AWS لایه‌های زیرساخت Cloud را اداره می‌کند و مسئولیت Customer با Service و Integration فرق دارد. در EC2، Guest OS و Application/Firewall config بیشتر با Customer است؛ در Managed service بخشی منتقل می‌شود. Identity، Data، Permission و Configuration شما همچنان باید آزموده شوند.

Azure: IaaS، PaaS و SaaS مرز متفاوت دارند

مدل رسمی Azure مسئولیت را بر اساس Service model تفکیک می‌کند و Data، Account و Access management را از مسئولیت‌های ماندگار Customer می‌داند. پس Pass شدن Provider compliance report، Secure configuration محصول شما را ثابت نمی‌کند.

GCP: Shared responsibility و Shared fate

Google Cloud دربارهٔ Shared responsibility و Shared fate تأکید می‌کند هر Service Configuration profile متفاوتی دارد و Provider می‌تواند Blueprint و Guidance بدهد؛ Customer همچنان Requirement کسب‌وکار، Data و Workload خود را می‌شناسد و باید Control را Verify کند.

ماتریس مسئولیت Test بسازید

Boundary Provider evidence Customer/team evidence Owner
Physical/host Service documentation/attestation Service selection و inherited-control mapping Cloud/Security
Identity IAM capability Role، Federation، MFA، least privilege، revocation Security/Platform
Network VPC/VNet capability Route، firewall، private access، egress، DNS Platform/Product
Data Encryption/storage capability Classification، key/access، retention، deletion Data/Product
Application Runtime contract Code، configuration، dependency، test و monitoring Product team
Recovery Availability/backup feature Architecture، eligibility، restore/failover drill Product/SRE

معماری مرجع Cloud Testing؛ از Commit تا Cleanup

۱. Source و immutable build

Commit SHA یک Build تولید می‌کند؛ Artifact با Digest، SBOM/Provenance و Version ذخیره می‌شود. در Stageهای بعد همان Artifact Promote می‌شود، نه اینکه برای هر Environment دوباره Build شود.

۲. Account boundary

Test در Account/Subscription/Project جدا با Budget، Quota، Policy و Identity محدود اجرا می‌شود. Separation فقط نام Resource group نیست؛ Billing، IAM blast radius، Secret و Network boundary باید واقعی باشد.

۳. IaC و Environment manifest

Plan Review می‌شود، State امن نگه داشته می‌شود و Environment با Versionهای دقیق Provision می‌گردد. Manifest واقعیت Deploy‌شده را ثبت می‌کند؛ Drift detection اختلاف Desired و Actual را نشان می‌دهد.

۴. Data و dependency setup

Dataset versioned با Namespace ساخته می‌شود؛ Secret reference تزریق می‌شود؛ Dependency واقعی/Sandbox/Virtualized mode ثبت می‌گردد. Setup باید Idempotent و Cleanup قابل‌آزمون باشد.

۵. Health gate

DNS، Certificate، Identity، Route، Schema، Queue، Dependency و Observability قبل Test بررسی می‌شوند. «Pod running» یا «Deployment succeeded» Ready بودن Journey را ثابت نمی‌کند.

۶. Test execution و evidence

Run ID، Build، Manifest، Dataset، Runner image، Region و Timestamp به Result متصل می‌شوند. Trace/Metric/Log و Client-side result با Correlation ID قابل پیوندند.

۷. Decision و cleanup

Gate نتیجه را با Risk و Failure class تفسیر می‌کند؛ Environment TTL می‌گیرد؛ Destroy و Data deletion Verify می‌شود؛ هزینه به Team/Journey نسبت داده و Artifact موردنیاز با Retention policy حفظ می‌شود. طراحی Lane و سیاست Gate در راهنمای Continuous Testing در CI/CD تشریح شده است.

نمونه Manifest محیط تست ابری

environment_id: refund-pr-4821
purpose: integration-contract
owner: payments-team
provider: selected-in-pilot
account_boundary: qa-isolated
region: selected-region
commit: a17c9e2
artifact_digest: sha256:example
iac_revision: env-2.4.1
database_schema: refund-18
dataset:
  version: refund-fa-3
  namespace: pr-4821
dependencies:
  bank:
    mode: virtualized
    contract: callback-v3
observability:
  run_id: run-20260806-4821
  trace_required: true
ttl: 6h
cleanup:
  data: verify-deletion
  resources: destroy-from-state

Manifest چه چیزی را حل می‌کند؟

Run قابل‌بازتولیدتر، Failure قابل‌تفکیک و هزینه قابل‌انتساب می‌شود. Manifest تضمین نمی‌کند Environment واقعاً همین State را دارد؛ Health evidence و Drift check مکمل آن‌اند.

چه چیزی نباید در Manifest باشد؟

Secret value، Token، Password، داده کاربر یا اطلاعات پرداخت. فقط Reference امن، Version و Metadata غیرحساس ثبت شود.

Portfolio محیط؛ همهٔ تست‌ها را به یک Cloud Environment نفرستید

Local و Component

سریع، ارزان و جدا برای Logic و Contract داخلی. Container/Test double مفید است، اما Provider IAM/Network/Managed semantics را کامل تقلید نمی‌کند.

Ephemeral per-change

Isolation و Reproducibility بهتر؛ Provision latency، Quota و Cost بالاتر. برای Integration slice محدود مناسب است، نه Clone کامل Production برای هر Pull Request.

Shared integration

Dependency مشترک و هزینه کمتر؛ Data collision، Drift و Booking risk دارد. Namespace، baseline، change window و Support contract ضروری است.

Performance environment

Topology و Capacity کنترل‌شده، Generator جدا، Observability و Stop rule دارد. هم‌زمانی با Functional run یا تغییر زیرساخت نتیجه را مخدوش می‌کند.

Production-safe verification

Synthetic probe، Canary و Recovery drill محدود برای Failureهایی که در Lab دقیق بازتولید نمی‌شوند. Authorization، حساب/داده تست، Blast radius و Rollback لازم است.

راهبرد کامل Lifecycle، Manifest و Drift در راهنمای مدیریت محیط تست آمده است.

AWS، Azure و GCP؛ مقایسه Capability به‌جای اعلام برنده

نام و قابلیت Service، Region، Quota، Pricing و Retirement تغییر می‌کند. جدول زیر نمونهٔ خانواده‌های جاری در زمان بازبینی است، نه کاتالوگ کامل یا رتبه‌بندی.

Capability AWS نمونه Azure نمونه Google Cloud نمونه
Compute/containers EC2، ECS/EKS، Lambda VMs، Container Apps/AKS، Functions Compute Engine، Cloud Run/GKE، Cloud Functions
Build/artifact CodeBuild/CodePipeline، ECR Azure Pipelines/GitHub Actions، ACR Cloud Build، Artifact Registry
IaC CloudFormation/CDK Bicep/ARM و Terraform Infrastructure Manager/Terraform
Observability CloudWatch/X-Ray ecosystem Azure Monitor/Application Insights Cloud Monitoring/Logging/Trace
Secrets Secrets Manager/KMS Key Vault Secret Manager/Cloud KMS
Device/browser Device Farm Playwright Workspaces برای Browser Firebase Test Lab برای Mobile
Managed load example Runner/Solution/partner patterns Azure Load Testing Runner روی Compute/GKE/Cloud Run و partner patterns
Fault injection example AWS FIS Azure Chaos Studio Application/Kubernetes/managed-service-specific drills

عدم تقارن جدول عمدی است

Serviceها هم‌ارز یک‌به‌یک نیستند. مثلاً Browser workspace، Mobile device lab و CI runner مسئله‌های متفاوتی حل می‌کنند. نبود نام در یک سلول به معنی ناتوانی Provider نیست؛ ممکن است معماری با Primitive، Open-source یا Partner ساخته شود.

اکوسیستم موجود یک Preference است، نه Verdict

Identity، Network، Skill و Contract موجود می‌تواند TCO را کم کند، اما Must-have مانند Region، Data policy یا Framework support را نباید با «از قبل Azure/AWS/GCP داریم» دور زد.

تست در AWS؛ چه چیزهایی را در PoC بررسی کنیم؟

Device Farm را با Region و Framework واقعی بسنجید

مستندات جاری AWS Device Farm جریان Android/iOS و محدودیت Region را شرح می‌دهد؛ در زمان بازبینی Service در us-west-۲ ارائه شده است. Device catalog، Queue، Test package، private-backend connectivity، Artifact/Log و Pricing را با App واقعی Verify کنید.

AWS FIS برای Fault injection است، نه مجوز Chaos

AWS Fault Injection Service Managed experiment روی Workloadهای AWS فراهم می‌کند. قبل اجرا Target resolution، IAM role، Steady state، CloudWatch stop condition، Safety lever، Account scope و Recovery را آزمایش کنید.

نقاط سؤال در AWS

  • Account/Organization و SCP چگونه Test blast radius را محدود می‌کند؟
  • Private runner به SUT و Artifact چگونه وصل می‌شود؟
  • Spot interruption برای Test workload قابل‌پذیرش است و Result آن چگونه Classify می‌شود؟
  • Data transfer، NAT، Log ingestion و idle resource چه سهمی از TCO دارند؟
  • Service quota و Region dependency در Peak test چیست؟

تست در Azure؛ چه چیزهایی را در PoC بررسی کنیم؟

Azure Load Testing دامنه و محدودیت مشخص دارد

مستندات جاری Azure Load Testing آن را Service مدیریت‌شده برای تولید Load معرفی می‌کند که در زمان بازبینی JMeter و Locust، Endpoint خصوصی، CI integration و Failure criteria را پشتیبانی می‌کند. Generator health، Region، Engine count، VNet path، Metrics و Auto-stop را با workload واقعی Verify کنید.

Azure Chaos Studio با Scope و Identity کار می‌کند

Azure Chaos Studio در زمان بازبینی Workspace/Scenario و Experimentهای Service-direct/Agent-based دارد. Subscription/Resource group scope، Managed identity، Target region، Fault library، Stop process و Report را قبل Production drill ارزیابی کنید.

نقاط سؤال در Azure

  • Subscription/Management group و Policy boundary چگونه است؟
  • Entra ID یا Token برای Runner چه Risk و Expiry دارد؟
  • Playwright Workspaces Region/Browser/runner/version/quota با Matrix شما سازگار است؟
  • Azure Monitor metric فقط برای Azure-hosted component چه مزیت/محدودیتی دارد؟
  • هزینه Test engine، result retention، Log و private networking چگونه جمع می‌شود؟

تست در GCP و Firebase؛ چه چیزهایی را در PoC بررسی کنیم؟

Firebase Test Lab را Device matrix واقعی بدانید

مستندات Firebase Test Lab برای iOS Device/configuration matrix، Result و محدودیت‌های Framework/Run را توضیح می‌دهد. Device availability، physical/virtual difference، OS، locale، Queue، Inconclusive، video limitation، private backend و Result storage را در همان زمان PoC بررسی کنید.

Cloud Build و Artifact flow

اگر Build/Test روی GCP اجرا می‌شود، Trigger، Worker pool، Private network، Service account، Artifact Registry، provenance، log access و egress را بررسی کنید. Hosted default و Private pool یک Risk profile ندارند.

نقاط سؤال در GCP

  • Organization/Folder/Project و Service account boundary چگونه است؟
  • Cloud Run/GKE/Compute runner برای workload stateful یا long-running مناسب است؟
  • Cloud Monitoring/Trace چگونه به Run ID و Test result وصل می‌شود؟
  • Firebase device catalog و Framework support با Mobile stack شما تطبیق دارد؟
  • Region، quota، network egress و Artifact/Log retention چه هزینه‌ای دارند؟

Gateهای انتخاب AWS، Azure یا GCP

Must-haveهای غیرقابل‌امتیازدهی

  • دسترسی قانونی/قراردادی و Payment/Support قابل اتکا برای سازمان.
  • Region و Service availability مناسب؛ Quota قابل دریافت.
  • Data classification، residency، retention و deletion قابل اجرا.
  • Private/public connectivity و IP/DNS/TLS نیازمند.
  • Identity federation، least privilege و Audit log.
  • Framework/runtime/device/OS موردنیاز.
  • Budget، alert، hard guardrail و Cleanup.
  • Export و Exit path برای Test asset/result.

Preferenceهای امتیازی

پس از عبور Gate، Developer experience، Provision time، p95 Queue، Diagnostic، Ecosystem fit، Cost predictability، Managed capability، portability، Support و Team skill را Weight کنید. Weight باید از Risk و Strategy سازمان بیاید.

Disqualifier نمونه

عدم امکان حذف Verified داده، نیاز به Long-lived administrator key، نبود Region/Device ضروری، عدم دسترسی پایدار از شبکه سازمان یا ممنوعیت قراردادی می‌تواند Candidate را پیش از Score حذف کند.

PoC باید Production-like باشد، نه Demo فروشنده

یک Build واقعی، private endpoint، Synthetic dataset فارسی، Failure injection کنترل‌شده، Change exercise، Peak کوچک، Cleanup و Export نتیجه را امتحان کنید. Demo سبز بدون تغییر و خرابی، Maintainability و Support را نشان نمی‌دهد.

نمونه Scorecard وزنی پس از Gate

معیار وزن نمونه Evidence PoC
Production fidelity ۲۰ همان Service/identity/network semantics
Security/data ۱۵ Threat review، deletion، audit، secret flow
Reliability/diagnostic ۱۵ Failure drill و Trace-to-result
Framework/capability fit ۱۵ Run واقعی، نه feature checklist
Cost predictability ۱۰ دو سناریوی usage + alert/limit
Provision/queue time ۱۰ p50/p95 چند Run
Maintainability/upgrade ۵ Change exercise
Exit/export ۵ Delete/migrate rehearsal
Support/access in Iran ۵ Contract/network/payment evidence

وزن‌ها مثال‌اند. امتیاز بالا نمی‌تواند Must-have شکست‌خورده را جبران کند. Confidence هر Score و Source Evidence را کنار آن ثبت کنید.

امنیت Cloud Test Environment

Account isolation و least privilege

Runner نباید Owner/Admin دائمی باشد. Role جدا برای Provision، Execute، Read evidence و Destroy بسازید؛ Permission boundary و Short-lived credential ترجیح دارد. Break-glass ثبت و منقضی شود.

Secret lifecycle

Secret در Repository، YAML Manifest، Test data یا Screenshot نباشد. Secret manager، workload identity، rotation، access audit و Revocation را Test کنید. Mask کردن UI جای حذف از Raw log را نمی‌گیرد.

Network و egress

Private endpoint، firewall/security group، DNS، certificate و outbound allowlist را Explicit کنید. Open کردن ۰.۰.۰.۰/۰ برای حل Test connectivity Debt امنیتی است، نه راه‌حل موقت بی‌اثر.

Testware supply chain

Runner image، Plugin، Browser binary، JMeter extension و Action باید Version/pin، provenance و vulnerability process داشته باشند. Test infrastructure با Permission بالا هدف جذابی برای حمله است.

Rules of Engagement

Performance، DAST و Fault injection روی Shared/Production resource بدون مجوز کتبی، Target دقیق، زمان، Stop condition و contact ممنوع است. اصول کامل در راهنمای تست امنیت نرم‌افزار آمده است.

داده تست در Cloud؛ واقع‌گرایی بدون نشت

Production copy پیش‌فرض نیست

Encryption تنها Risk را حل نمی‌کند؛ Access، re-identification، retention، backup، log، cross-border transfer و deletion باقی می‌مانند. Synthetic، Factory، masked subset و Tokenization را بر اساس هدف انتخاب کنید.

Namespace و Parallel safety

هر Run Tenant/User/Order namespace دارد؛ Unique key و Cleanup idempotent است؛ TTL رکورد orphan را جمع می‌کند. Timezone، Currency، Unicode، Referential integrity و State history در Specification داده ثبت می‌شوند.

Deletion verification

Destroy resource لزوماً Snapshot، Object version، Log و Backup را پاک نمی‌کند. Data inventory و retention class بسازید و Evidence حذف/انقضا را Verify کنید.

Lifecycle و Privacy در راهنمای مدیریت داده تست به‌صورت کامل آمده است.

IaC برای محیط تست؛ تکرارپذیری با محدودیت

Desired، planned، deployed و actual state

Code Desired را بیان می‌کند؛ Plan تغییر را؛ Apply نتیجه Deploy را؛ Provider واقعیت Actual را دارد. Drift یا Failure جزئی می‌تواند میان این Stateها فاصله بسازد. Test باید Plan، Policy و Health actual را ببیند.

State و Plan حساس‌اند

IaC state می‌تواند ID، Endpoint یا Secret داشته باشد. Backend امن، encryption، access، lock، backup و audit لازم است. Plan Artifact نیز Retention و Redaction می‌خواهد.

Destroy تست شود

Dependency order، prevent-destroy، orphan، retained bucket، snapshot و quota release را بررسی کنید. Environment که فقط ساخته می‌شود اما پاک نمی‌شود Ephemeral نیست.

Drift را کورکورانه اصلاح نکنید

Drift ممکن است Incident mitigation یا تغییر غیرمجاز باشد. Detect→Classify→Approve→Reconcile؛ Auto-apply بدون Context می‌تواند Recovery را برگرداند یا داده حذف کند.

تست Load و Performance در Cloud

مدل بار پیش از Generator

Journey mix، arrival rate/closed users، payload، session، think time، cache warm/cold، duration و geographic source را از داده/فرض مستند بسازید. تعداد «کاربر هم‌زمان» به‌تنهایی workload نیست.

Generator health

CPU، memory، network، connection، error و clock خود Generator را Monitor کنید. Saturation Generator می‌تواند SUT را بهتر از واقع نشان دهد. Calibration و distributed clock sync لازم است.

Network و Region

Load از Region نزدیک، Internet واقعی، VPN یا private link Latency متفاوت می‌سازد. Path، DNS، CDN و egress cost را ثبت کنید. Multi-region load فقط وقتی User geography یا resilience آن را می‌طلبد.

Stop condition و هزینه

Error/latency/SLO، Provider throttling، resource saturation، Business impact و Budget threshold می‌توانند Stop rule باشند. Auto-stop Service جای Approval و Watcher را نمی‌گیرد.

نتیجه‌گیری بدون Average

p50/p95/p99، error by type، throughput/goodput، saturation و Server telemetry را Correlate کنید. برای Workload و Oracle دقیق‌تر به راهنمای تست عملکرد مراجعه کنید.

Browser و Mobile Device Farm در Cloud

Matrix از کاربر و Risk می‌آید

OS/version/device/browser/engine/locale/network را از Analytics تصحیح‌شده، Support و Contract انتخاب کنید. همهٔ Deviceهای Catalog را اجرا نکنید؛ Matrix باید Versioned و Journey-based باشد.

Emulation با Real device یکی نیست

Emulator/virtual browser برای Feedback سریع مناسب است؛ Camera، sensor، thermal، permission، vendor skin، push و network radio به Real device نیاز دارد. Cloud physical device نیز دقیقاً Device کاربر با Account/Network او نیست.

Queue، Capacity و Inconclusive

Device availability و Provider infrastructure می‌تواند Run را Block یا Inconclusive کند. Status semantics، Retry، Billing، Artifact و fallback device class را در Contract Test execution تعریف کنید.

Privacy روی Device Lab

APK/IPA، Test package، screenshot، video، log و backend credential به Vendor می‌رود. Data classification، reset statement، result bucket، retention، access و deletion را بررسی کنید.

برای Device/OS/Network و Lifecycle matrix از راهنمای تست اپلیکیشن موبایل و برای Browser/Device coverage از ماتریس تست سازگاری استفاده کنید.

Resilience و Disaster Recovery در Cloud

Hypothesis و Steady state

«اگر Zone A از دسترس خارج شود، Checkout در کمتر از X دقیقه با Error rate زیر Y بازیابی می‌شود» قابل‌آزمون است. «Chaos اجرا کنیم» هدف نیست.

Blast radius و target selection

Account، Region، Resource tag، percentage و Dependency دقیق را محدود کنید. Empty target باید Fail شود؛ selection drift و auto-scaling می‌تواند Target ناخواسته بسازد.

Stop و Rollback مستقل

Alarm/Watcher، Safety lever، credential و Runbook را قبل Fault Verify کنید. فرد اجراکننده نباید تنها مسیر Stop باشد. Rollback نیز تمرین و زمان‌گیری شود.

Backup وجود دارد؛ Restore را ثابت کنید

Snapshot status و SLA سند، RPO/RTO شما را ثابت نمی‌کند. Restore جدا، checksum/invariant، application compatibility، access و cutover/reconciliation را آزمون کنید.

آزمایش Production تدریجی است

ابتدا Fake/Component، سپس isolated integration، Staging، Game day محدود و در صورت نیاز Production-safe. هر مرحله Evidence و Risk پذیرش‌شده مرحله بعد را تعیین می‌کند.

هزینه تست ابری؛ فرمول TCO به‌جای Pay-as-you-go

TCO =
compute + storage + requests + network/egress
+ managed test minutes + device/browser minutes
+ telemetry + artifact/result retention
+ licenses + idle/orphan resources
+ failed reruns + engineering/support
+ security/compliance + migration/exit

Allocation

Tag/label شامل Team، Environment، Run، Purpose، TTL و Owner باشد. Shared cost با Driver روشن مانند compute-minute یا test-minute تخصیص یابد، نه تقسیم مساوی بی‌معنا.

Budget guardrail

Budget/alert به‌تنهایی Resource را متوقف نمی‌کند. Quota، policy، max parallelism، TTL controller، auto-stop و approval برای Run بزرگ لازم است.

Cost per useful signal

هزینه را با Test count تقسیم نکنید. Compute/Device دقیقه و Engineer time را نسبت به Signal قابل‌اقدام، Risk covered و Decision latency بسنجید. Test flaky ارزان می‌تواند هزینه Triage زیادی بسازد.

قیمت را در مقاله ثابت نکنید

Price، Region، Free tier، commitment و egress تغییر می‌کنند. Calculator و Contract همان تاریخ را با دو سناریوی Normal/Peak و Currency/Tax/Support محاسبه کنید.

Vendor lock-in، Portability و Multi-cloud

Lock-in صفر هدف واقع‌بینانه نیست

Managed database، Identity، Queue و Observability ارزش و coupling ایجاد می‌کنند. سؤال این است که Coupling آگاهانه، مستند و متناسب با ارزش باشد و Exit-critical asset قابل‌خروج بماند.

Microservice خودکار Portability نمی‌دهد

Service count بیشتر می‌تواند Contract، data gravity و operation را پیچیده‌تر کند. Container نیز API/Identity/Network/Storage semantics Provider را حذف نمی‌کند.

Portable core و provider adapters

Test intent، Dataset spec، Result schema و Domain DSL را تا حد مفید مستقل نگه دارید؛ Provision/Identity/Observability adapterها Provider-specific باشند. Abstraction فقط روی Variation واقعی ساخته شود.

Exit test

Export Test asset/result، Rotate credential، Restore data، Run critical suite در fallback، Recreate minimal environment و Delete Vendor resources را تمرین کنید. RTO خروج و Data deletion evidence ثبت شود.

Multi-cloud پیش‌فرض نیست

دو Provider هزینه Skill، Network، Identity، Security، Observability و Test matrix را زیاد می‌کنند. فقط Requirement کسب‌وکار/ریسک معتبر باید آن را توجیه کند، نه ترس کلی از Lock-in.

ملاحظات ویژه ایران

Terms، حساب و پرداخت

قبل از معماری، شرایط استفاده، کشور/هویت مجاز، روش پرداخت، Support و امکان Suspend را با منبع رسمی و مشاور مرتبط بررسی کنید. دورزدن محدودیت Contract ریسک توقف ناگهانی و از دست‌رفتن Data/Artifact دارد.

شبکه و Latency

دسترسی به Console/API/Registry/Binary ممکن است ناپایدار باشد. Timeout، retry، resumable upload، Mirror/Cache مجاز، private connectivity و fallback runner را تست کنید. Latency از ایران نباید با Latency کاربر جهانی مخلوط شود.

Data location

Region نزدیک الزاماً از نظر Contract، Data policy یا دسترسی مناسب نیست. Classification، transfer، key control، backup و deletion را با الزامات سازمانی/حقوقی همان زمان تطبیق دهید؛ این راهنما نظر حقوقی نیست.

Supply chain و Self-host fallback

Runner image، Browser binary، Package و IaC provider را در Artifact repository مجاز Cache کنید؛ Version/Checksum/License و update process داشته باشید. Fallback باید تمرین شود، نه فایل نصب قدیمیِ بدون Patch.

فارسی و پرداخت محلی

Locale fa-IR، Timezone Asia/Tehran، RTL/BiDi، فونت، ارقام، تومان/ریال، تاریخ، بانک callback، Signature، Reconciliation و Connectivity متغیر را در Dataset/Matrix بیاورید. Cloud scale جای Domain oracle را نمی‌گیرد.

Pilot سی‌روزه انتخاب Cloud Testing

روزهای ۱ تا ۵: Charter و Gate

  • Decision، SUT boundary، Risk و خارج از Scope را بنویسید.
  • Must-have/Disqualifier و سه Candidate را ثبت کنید.
  • Data classification، Account model، Budget و RoE را تصویب کنید.
  • Baseline زمان Provision/Run/Triage و هزینه فعلی را بگیرید.

روزهای ۶ تا ۱۲: Foundation

  • Account/Identity/Network و Secret flow را کمینه بسازید.
  • Artifact immutable، IaC، State و Manifest را برقرار کنید.
  • Dataset synthetic فارسی و Cleanup/TTL را پیاده کنید.
  • Health gate و Run-to-trace correlation را اضافه کنید.

روزهای ۱۳ تا ۲۰: Workload واقعی

  • Component/Integration، Browser/device یا Load slice منتخب را اجرا کنید.
  • p50/p95 Queue/Provision/Run و Failure class را جمع کنید.
  • Cost شامل Telemetry، Egress، Idle و Engineer time را ثبت کنید.
  • Private dependency و Service quota را عمداً آزمایش کنید.

روزهای ۲۱ تا ۲۶: Change و Failure

  • نسخه Product/Test/IaC را تغییر و Maintenance effort را بسنجید.
  • یک Dependency failure و یک Provider/runner failure تزریق کنید.
  • Stop/rollback، Export و fallback run را تمرین کنید.
  • Destroy و deletion را Verify کنید.

روزهای ۲۷ تا ۳۰: Decision record

Gate pass/fail، Score با Confidence، TCO دو سناریو، Risk باقی‌مانده، Lock-in، Support/access و تصمیم Adopt/Revise/Reject را ثبت کنید. برای Pilot تا Scale از قالب استراتژی اتوماسیون تست استفاده کنید.

معیارهای سالم Cloud Testing

دسته Metric هشدار
Flow p50/p95 Provision، Queue، useful feedback Average Tail را پنهان می‌کند
Trust Product/Test/Data/Environment/Dependency/Unknown Retry Pass، Fail اول را حذف نکند
Environment Health-pass، Drift، blocked run، cleanup success Resource count Outcome نیست
Cost Cost per useful signal/Journey Test count denominator ضعیف است
Security Unauthorized path، secret age، exception expiry Scanner count امنیت نیست
Reliability RTO/RPO evidence، recovery success Backup success با Restore فرق دارد
Portability Fallback/exit rehearsal time ادعای vendor-neutral بدون Run کافی نیست

ضدالگوهای رایج تست ابری

Cloud-first بدون Problem statement

همه Suiteها مهاجرت می‌کنند چون Cloud «آینده» است. درمان: Decision/Risk و Thin slice؛ Local test ارزشمند را بی‌دلیل جابه‌جا نکنید.

Clone کامل Production برای هر PR

هزینه/زمان/Quota زیاد و Fidelity همچنان ناقص است. درمان: Risk-specific environment portfolio و Contract/component در پایین‌ترین Level.

Long-lived admin key در CI

راه‌اندازی آسان اما Blast radius بزرگ است. درمان: workload identity، short-lived credential، scope و audit.

Pay-as-you-go برابر ارزان

Idle، egress، log، rerun و Engineer time دیده نمی‌شود. درمان: TCO و budget/quota/TTL guardrail.

Auto-scaling بدون Generator validation

Test ممکن است Quota/Generator را بسنجد نه SUT را. درمان: Generator health، calibrated load و server telemetry.

Retry همهٔ Infrastructure failureها

Outage و quota پنهان می‌شوند. درمان: Attempt history، Failure taxonomy، bounded retry و SLO Provider dependency.

IaC برابر بدون Drift

Apply موفق با Actual state متفاوت می‌ماند. درمان: Manifest، health، drift detect و controlled reconciliation.

Vendor-neutral به هر قیمت

Abstraction کم‌ارزش Feature و Diagnostic را محدود می‌کند. درمان: portable intent/evidence و coupling آگاهانه با Exit test.

چک‌لیست پیش از Go-live محیط تست ابری

  • چهار Scope Cloud Testing و Decision روشن است؟
  • Account/Subscription/Project و Billing جداست؟
  • Provider/Customer/Team responsibility matrix داریم؟
  • Artifact، IaC، Manifest، Dataset و Runner version ثبت می‌شوند؟
  • Identity کوتاه‌عمر، Secret manager و least privilege داریم؟
  • Network/egress/DNS/TLS و private dependency تست شده؟
  • Health gate و Failure taxonomy اجرا می‌شود؟
  • Trace/Metric/Log به Run ID وصل و داده حساس Redact است؟
  • Quota، Region، Queue و Service limit در PoC دیده شده؟
  • Budget، max parallelism، TTL، Cleanup و deletion verification داریم؟
  • Load/Fault test مجوز، Stop و Rollback دارد؟
  • TCO شامل egress/telemetry/idle/rerun/people/exit است؟
  • Service retirement/change و Review date Owner دارد؟
  • Fallback/Export/Exit حداقل یک بار تمرین شده؟
  • شرایط دسترسی، پرداخت، شبکه، داده و فارسی ایران بررسی شده؟

پرسش‌های متداول تست ابری

تست ابری چه تفاوتی با تست سنتی دارد؟

تفاوت فقط محل سرور نیست. Cloud می‌تواند Provisioning API، Service model، Identity، Quota، Managed dependency، Region و Cost meter وارد Boundary کند. یک Test همان رفتار را ممکن است Local یا Cloud اجرا کند؛ Scope و Evidence تعیین می‌کند تفاوت معنادار است یا نه.

کدام‌یک برای تست بهتر است: AWS، Azure یا GCP؟

برندهٔ عمومی وجود ندارد. Production fidelity، Region/Service/Quota، Data/Identity، Framework، Network، TCO، Support/access و Exit شما تعیین‌کننده‌اند. Must-have را Gate و Candidateهای باقی‌مانده را با PoC یکسان مقایسه کنید.

آیا تست در Cloud ارزان‌تر است؟

ممکن است برای Capacity موقت و کاهش Idle asset ارزان‌تر باشد، اما تضمین نیست. Compute، Device minute، Storage، Request، Egress، Telemetry، License، Idle، Failed rerun، Engineer time و Exit را در دو سناریوی Normal/Peak حساب کنید.

آیا می‌توان داده Production را برای تست به Cloud برد؟

پیش‌فرض امن «خیر تا اثبات نیاز و کنترل» است. Classification، مجوز، Minimization، Masking/Pseudonymization، Re-identification، Access، Region، Backup، Retention و deletion باید ارزیابی شوند. Synthetic یا Factory معمولاً نقطه شروع بهتری است.

آیا Multi-cloud از Vendor lock-in جلوگیری می‌کند؟

نه خودکار. Multi-cloud coupling و عملیات بیشتری می‌سازد. Test intent/result/data spec را تا حد مفید قابل‌انتقال، Adapterهای Provider را جدا و Exit-critical path را تمرین کنید؛ فقط Requirement واقعی باید اجرای هم‌زمان چند Provider را توجیه کند.

منابع و تاریخ بازبینی

منابع رسمی استفاده‌شده

  • AWS، Azure و Google Cloud: مدل‌های مسئولیت امنیتی
  • AWS Device Farm و AWS Fault Injection Service
  • Azure Load Testing و Azure Chaos Studio
  • Firebase Test Lab

حدود و تازگی

بازبینی محتوایی: مرداد ۱۴۰۵. Service name، Region، Device، Framework، Quota، Pricing، SLA و Retirement ممکن است سریع تغییر کنند. مستندات و Contract همان نسخه/Region را پیش از خرید یا Gate مرجع قرار دهید. فهرست سرویس‌ها نمونه است؛ هیچ ادعای رتبه‌بندی یا برابری قابلیت میان Providerها ندارد.

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