چرا تست دستی دیگر کافی نیست؟
تیم توسعه یک فروشگاه آنلاین ایرانی — فرض کنید یک پلتفرم تجارت الکترونیک با چند هزار محصول و تراکنش روزانه — هر بار قبل از انتشار نسخه جدید، همهچیز را دستی تست میکنند. فرآیند پرداخت را با کارتهای مختلف امتحان میکنند، سبد خرید را در مرورگرهای Chrome، Firefox و Edge چک میکنند، صفحات محصول را روی موبایل میبینند. این کار چهار نفر را دو روز درگیر میکند — و باز هم باگهایی از دست میرود.
این سناریو برای اکثر تیمهای نرمافزاری در ایران آشناست. راهحل؟ دانلود و خرید لایسنس TestComplete و پیادهسازی یک framework تست اتوماتیک که این کار را در یکدهم زمان انجام دهد.
در این مقاله، به جای معرفی انتزاعی قابلیتها، یک سناریوی واقعی را گامبهگام دنبال میکنیم: تیم QA یک فروشگاه آنلاین ایرانی، چطور با TestComplete فرآیند تست خود را از صفر تا اجرای خودکار در pipeline راهاندازی کردند.
معرفی سناریو: فروشگاه آنلاین «آرینشاپ»
آرینشاپ یک پلتفرم تجارت الکترونیک فرضی است با ویژگیهای زیر:
- وبسایت مبتنی بر React با بکاند PHP/Laravel
- اپلیکیشن موبایل Android
- پرداخت از طریق درگاههای بانکی ایرانی
- تیم توسعه ۸ نفره با یک تستر تماموقت
- انتشار نسخه جدید هر دو هفته یکبار
مشکل اصلی: با هر release، تستر تنها باید ۱۴۰+ سناریوی مختلف را در سه مرورگر و دو پلتفرم موبایل چک کند. این کار فیزیکاً ممکن نیست. نتیجه؟ تستهای ناقص، باگهای پروداکشن، و مشتریان ناراضی.
هدف پروژه
تیم تصمیم گرفت با خرید لایسنس TestComplete یک suite تست اتوماتیک بسازد که:
- فرآیند خرید کامل (از مرور محصول تا تأیید پرداخت) را تست کند
- در سه مرورگر بهصورت موازی اجرا شود
- بعد از هر commit خودکار راهاندازی شود
- نتایج را بهصورت گزارش ساختارمند برای تیم بفرستد
گام اول: نصب TestComplete و ساخت پروژه
بعد از دانلود TestComplete و فعالسازی لایسنس، اولین کار ایجاد پروژه است. تیم آرینشاپ یک پروژه از نوع Web انتخاب کرد:
- TestComplete را باز کنید
- از منوی File گزینه New Project را انتخاب کنید
- نوع پروژه را Web انتخاب کنید
- URL فروشگاه را وارد کنید
- مرورگرهای Chrome، Firefox و Edge را بهعنوان cross-browser targets تعریف کنید
در پنل Project Explorer سمت چپ، ساختار پروژه شامل این بخشهاست:
ArinShopTests/ ├── Script/ (کدهای Python تستها) ├── NameMapping/ (نقشه اشیاء رابط کاربری) ├── Stores/ (دادههای مرجع برای Checkpoints) └── TestItems/ (ترتیب اجرای تستها)
تنظیم Name Mapping برای صفحات اصلی
یکی از مهمترین کارها در ابتدای پروژه، تعریف Name Mapping است. این ویژگی به TestComplete اجازه میدهد المانهای صفحه را با نامهای قابل فهم شناسایی کند، نه با selectorهای شکننده.
تیم آرینشاپ برای صفحه checkout این mappingها را تعریف کرد:
CheckoutPage.ProductList— لیست محصولات سبد خریدCheckoutPage.TotalPrice— مبلغ نهاییCheckoutPage.PaymentButton— دکمه پرداختCheckoutPage.SuccessMessage— پیام تأیید خرید
این نامگذاری باعث میشود حتی اگر کلاس CSS یا ID المان در نسخههای بعدی تغییر کند، تستها بدون ویرایش دستی همچنان کار کنند.
گام دوم: ضبط اولین تست — فرآیند خرید
تستر آرینشاپ اولین تست را با قابلیت Record & Replay ساخت. این روش برای شروع کار بسیار سریع است:
- در تولبار TestComplete روی دکمه Record کلیک کنید
- مرورگر Chrome باز میشود و ضبط شروع میشود
- مراحل زیر را دقیقاً طبق سناریو انجام دهید:
- جستجوی محصول «کفش ورزشی» در نوار جستجو
- فیلتر کردن بر اساس قیمت ۵۰۰ هزار تا ۱ میلیون تومان
- انتخاب اولین محصول از لیست
- کلیک روی «افزودن به سبد خرید»
- رفتن به صفحه checkout
- وارد کردن اطلاعات آدرس
- انتخاب روش پرداخت
- کلیک روی «پرداخت»
- روی Stop کلیک کنید
TestComplete یک اسکریپت Python کامل تولید کرد که تمام این مراحل را ثبت کرده بود. اما تست ضبطشده هنوز اعتبارسنجی نداشت — فقط کلیک میکرد بدون اینکه چیزی را چک کند. اینجاست که باید Checkpoint اضافه شود.
گام سوم: اضافه کردن Checkpoints — قلب تست اتوماتیک
Checkpoint به TestComplete میگوید «در این لحظه انتظار داری چه چیزی ببینی؟». بدون Checkpoint، تست شاید اجرا شود ولی باگ را پیدا نکند.
تیم آرینشاپ سه نوع Checkpoint برای فرآیند خرید تعریف کرد:
۱. Property Checkpoint — بررسی مبلغ نهایی
بعد از افزودن محصول به سبد، تست باید چک کند که مبلغ نمایش دادهشده با قیمت محصول انتخابی مطابقت دارد:
# Python script در TestComplete
def Test_CheckoutPrice():
# محصول را انتخاب کن
Aliases.Chrome.MainForm.ProductPage.AddToCartButton.Click()
# برو به checkout
Aliases.Chrome.MainForm.CartIcon.Click()
# Checkpoint: مبلغ باید با قیمت محصول برابر باشد
expected_price = "850,000 تومان"
actual_price = Aliases.Chrome.MainForm.CheckoutPage.TotalPrice.contentText
if actual_price != expected_price:
Log.Error("مبلغ نهایی نادرست است: " + actual_price)
else:
Log.Message("✓ مبلغ نهایی صحیح است: " + actual_price)
۲. Text Checkpoint — تأیید پیام موفقیت
بعد از کلیک روی دکمه پرداخت، صفحه باید پیام «سفارش شما با موفقیت ثبت شد» را نشان دهد:
# بررسی پیام تأیید success_text = Aliases.Chrome.MainForm.OrderConfirmation.SuccessMessage.contentText aqVerification.Contains(success_text, "با موفقیت ثبت شد", "پیام تأیید سفارش")
۳. Region Checkpoint — بررسی تصویری صفحه
برای اطمینان از اینکه layout صفحه checkout در تمام مرورگرها یکسان است، یک Region Checkpoint از بخش خلاصه سفارش گرفته شد. TestComplete این تصویر را با نسخه baseline مقایسه میکند و اگر اختلاف بصری وجود داشت، خطا گزارش میدهد.
گام چهارم: Data-Driven Testing — تست با دادههای مختلف
یک سناریوی خرید کافی نیست. تیم آرینشاپ میخواست همین تست را با آدرسهای مختلف، روشهای پرداخت مختلف، و محصولات مختلف اجرا کند. اینجاست که Data-Driven Testing وارد میشود.
یک فایل Excel با این ستونها ایجاد شد:
| ProductName | City | PaymentMethod | ExpectedResult |
|---|---|---|---|
| کفش ورزشی | تهران | کارت بانکی | موفق |
| لپتاپ | اصفهان | کیف پول | موفق |
| محصول ناموجود | مشهد | کارت بانکی | خطا – موجود نیست |
TestComplete این فایل را بهعنوان منبع داده به تست متصل کرد. حالا با یک کلیک، ۳ سناریوی متفاوت بهصورت خودکار اجرا میشوند — هر ردیف Excel یک اجرای مستقل است.
# اتصال Data Source به تست
DDT.ExcelDriver("C:\\TestData\\checkout_scenarios.xlsx", "Sheet1")
while not DDT.CurrentDriver.EOF():
product = DDT.CurrentDriver.Value("ProductName")
city = DDT.CurrentDriver.Value("City")
# اجرای تست با دادههای این ردیف
RunCheckoutTest(product, city)
DDT.CurrentDriver.Next()
گام پنجم: Cross-Browser Testing — تست همزمان در سه مرورگر
یکی از دلایل اصلی انتخاب TestComplete توسط تیم آرینشاپ، قابلیت تست همزمان در چند مرورگر بود. با یک تنظیم ساده در بخش Environments:
- Chrome 124+
- Firefox 125+
- Microsoft Edge 124+
TestComplete تمام تستها را بهصورت موازی در هر سه مرورگر اجرا کرد. گزارش نهایی نشان میداد که یک باگ خاص — عدم نمایش صحیح دکمه پرداخت — فقط در Firefox رخ میدهد. این باگ بدون cross-browser testing هرگز پیدا نمیشد.
گام ششم: یکپارچگی با CI/CD — اجرای خودکار بعد از هر commit
مرحله آخر و مهمترین مرحله، یکپارچهسازی TestComplete با pipeline CI/CD تیم بود. آرینشاپ از GitLab CI استفاده میکرد.
یک فایل .gitlab-ci.yml به این صورت تنظیم شد:
stages:
- test
automated-qa:
stage: test
script:
- |
"C:\Program Files\SmartBear\TestComplete 15\Bin\TestComplete.exe"
"ArinShopTests\ArinShopTests.pjs"
/run /exit /SilentMode
artifacts:
reports:
junit: TestResults/*.xml
paths:
- TestResults/
only:
- main
- develop
حالا هر بار که یک developer کد جدیدی به branch اصلی push میکند، GitLab بهصورت خودکار:
- TestComplete را اجرا میکند
- تمام ۴۲ تست suite را در سه مرورگر میچرخاند
- نتایج را در قالب XML گزارش میدهد
- اگر تستی fail شود، به تیم اطلاع میدهد
برای هماهنگی بهتر تیم در این فرآیند، آرینشاپ از Mattermost بهعنوان پلتفرم ارتباطی استفاده میکند که با GitLab یکپارچه شده — نتایج تست و alertهای باگ مستقیماً در کانال تیم QA ظاهر میشوند.
گام هفتم: گزارشگیری و مدیریت باگ
بعد از هر اجرا، TestComplete یک گزارش HTML کامل تولید میکند که شامل:
- تعداد تستهای موفق/ناموفق به تفکیک مرورگر
- Screenshot از لحظه شکست تست
- ویدیوی ضبطشده از اجرای هر تست
- زمان دقیق اجرای هر مرحله
- لاگ کامل خطاها
وقتی تستر گزارش را میبیند، برای ثبت باگهای پیدا شده از سیستم issue tracking سازمان استفاده میکند. سازمانهایی که از راهکارهای IT management مانند ManageEngine استفاده میکنند، میتوانند این گزارشها را مستقیماً به workflow مدیریت خطا متصل کنند.
نمونه خروجی گزارش TestComplete
| نام تست | Chrome | Firefox | Edge | مدت زمان |
|---|---|---|---|---|
| جستجو و فیلتر محصول | ✓ Pass | ✓ Pass | ✓ Pass | ۱۲ ثانیه |
| افزودن به سبد خرید | ✓ Pass | ✗ Fail | ✓ Pass | ۸ ثانیه |
| محاسبه مبلغ نهایی | ✓ Pass | ✓ Pass | ✓ Pass | ۵ ثانیه |
| فرآیند پرداخت | ✓ Pass | ✓ Pass | ✓ Pass | ۲۳ ثانیه |
| تأیید سفارش | ✓ Pass | ✓ Pass | ✓ Pass | ۶ ثانیه |
باگ Firefox در ستون «افزودن به سبد خرید» دقیقاً مشخص است — developer میداند کجا را بررسی کند.
نتایج واقعی: چه چیزی تغییر کرد؟
بعد از سه ماه استفاده از TestComplete، تیم آرینشاپ این نتایج را گزارش کرد:
- زمان تست قبل از release: از ۱۶ ساعت به ۲ ساعت کاهش یافت
- تعداد باگهای پروداکشن: ۶۸ درصد کاهش
- پوشش تست: از ۳۰ سناریو به ۱۴۰+ سناریو در هر release
- کشف باگ cross-browser: ۱۴ باگ Firefox-only که قبلاً پیدا نمیشدند
- اطمینان تیم: release بدون استرس، به جای «امیدواریم کار کنه»
مهمتر از اعداد، تغییر فرهنگ تیم بود. وقتی developerها میدانند که بعد از هر commit، ۱۴۰ تست خودکار نگهبانی میکنند، با اطمینان بیشتری تغییرات بزرگ انجام میدهند. این یعنی نوآوری سریعتر و محصول بهتر.
چه تیمهایی بیشترین سود را میبرند؟
سناریوی آرینشاپ یک نمونه است، اما همین pattern برای انواع تیمهای ایرانی قابل پیادهسازی است:
- شرکتهای نرمافزاری: هر محصولی با UI وب یا دسکتاپ
- بانکها و فینتکها: تست فرآیندهای مالی حساس بدون ریسک
- صنعت بیمه: اعتبارسنجی محاسبات پیچیده حقبیمه
- پورتالهای دولتی: تضمین عملکرد در بار ترافیک بالا
- ERP و سیستمهای سازمانی: تست ماژولهای بههمپیوسته قبل از go-live
اگر تیم شما هنوز تست دستی انجام میدهد و هر release یک ماجراجویی ناشناخته است، وقت آن رسیده که خرید لایسنس TestComplete را جدی بگیرید.
سوالات متداول (FAQ)
سوال: برای شروع، از کجا باید TestComplete را یاد بگیرم؟
بهترین نقطه شروع، همین سناریوی گامبهگام است. بعد از نصب نرمافزار، ابتدا با قابلیت Record & Replay شروع کنید، یک فرآیند ساده را ضبط کنید، و کمکم Checkpoint و Data-Driven Testing اضافه کنید. SmartBear مستندات و ویدیوهای آموزشی کامل هم دارد.
سوال: آیا باید برنامهنویسی بلد باشم؟
نه لزوماً. قابلیت ضبط TestComplete به شما اجازه میدهد بدون نوشتن یک خط کد، تستهای کاملاً کاربردی بسازید. اما اگر با Python یا JavaScript آشنا باشید، میتوانید تستهای بسیار پیشرفتهتری بنویسید.
سوال: TestComplete برای تست اپلیکیشنهای فارسی مشکلی ندارد؟
خیر. TestComplete بهخوبی با متنهای RTL و فارسی کار میکند. قابلیت OCR و تشخیص متن آن زبان فارسی را پشتیبانی میکند و میتوانید Checkpoint هایی بر اساس متن فارسی بسازید.
سوال: چه مدت طول میکشد یک تیم، framework تست اولیه را راه بیندازد؟
برای یک تیم با پروژه متوسط، راهاندازی اولیه (ضبط تستهای اصلی، تنظیم Name Mapping، اتصال به CI/CD) معمولاً ۲ تا ۳ هفته طول میکشد. از هفته چهارم به بعد تیم میتواند تستها را بهتدریج گسترش دهد.
سوال: تفاوت TestComplete با Selenium چیست و کدام را انتخاب کنم؟
Selenium رایگان و open-source است اما نیاز به برنامهنویسی پیشرفته دارد و فقط تست وب را پوشش میدهد. TestComplete یک محیط یکپارچه است که وب، دسکتاپ و موبایل را با هم پوشش میدهد، نیاز به کدنویسی کمتری دارد، و قابلیتهایی مانند تشخیص اشیاء با AI دارد. برای تیمهایی که منابع محدود دارند و میخواهند سریع شروع کنند، TestComplete انتخاب بهتری است.
سوال: آیا TestComplete میتواند اپلیکیشن موبایل ایرانی را تست کند؟
بله. TestComplete تست اپلیکیشنهای Android و iOS را کاملاً پشتیبانی میکند. میتوانید تست را روی دستگاه واقعی یا emulator اجرا کنید. برای اپلیکیشنهای فارسی هم مشکلی وجود ندارد.
سوال: چطور لایسنس TestComplete را در ایران تهیه کنم؟
با توجه به محدودیتهای خرید مستقیم از SmartBear برای کاربران ایرانی، میتوانید از طریق دو کرک لایسنس TestComplete را با قیمت مناسب و پشتیبانی فارسی تهیه کنید. تیم ما در کمتر از ۲۴ ساعت لایسنس را فعال و تحویل میدهد.
سوال: آیا میتوان TestComplete را با Git یکپارچه کرد؟
بله. پروژههای TestComplete فایلهای text-based هستند و بهخوبی با Git، SVN و TFS کار میکنند. تیمها میتوانند تستها را در همان repository کد نگه دارند و با همان workflowهای branching و merge مدیریت کنند.
جمعبندی
سناریوی آرینشاپ نشان میدهد که تست اتوماتیک با TestComplete یک پروژه بزرگ و پیچیده نیست — اگر گامبهگام پیش بروید. از ضبط ساده اولین تست شروع کنید، Checkpoint اضافه کنید تا معنادار شود، دادهمحور کنید تا پوشش بیشتری داشته باشید، و در نهایت به CI/CD وصل کنید تا خودکار بشود.
تفاوت اصلی بین تیمهایی که هنوز دستی تست میکنند و تیمهایی که تست اتوماتیک دارند، فقط یک تصمیم است: تصمیم به سرمایهگذاری در کیفیت. با دانلود و خرید لایسنس TestComplete، این سرمایهگذاری را امروز شروع کنید.
خرید لایسنس اورجینال — مشاوره رایگان
قیمت دقیق بر اساس نسخه و تعداد کاربر متفاوت است. برای دریافت قیمت و راهنمایی رایگان با ما در تلگرام پیام دهید.
|
✓
+۲۰ سال تجربه
متخصصان مهندسی نرمافزار با سابقه بلندمدت
|
⚡
تحویل زیر ۲۴ ساعت
لایسنس شما ظرف یک روز کاری ارسال میشود
|
↩
ضمانت بازگشت وجه
در صورت عدم کارایی، مبلغ را کامل برمیگردانیم
|
پاسخ معمولاً در کمتر از چند ساعت — بدون پیشپرداخت برای مشاوره



