معرفی و تعریف
«خودکارسازی تست نرمافزار» (Software Test Automation) توانایی طراحی، پیادهسازی و نگهداری تستهایی است که اجرای سناریوهای تکراری کیفیت را بدون دخالت دستی بررسی میکنند. این تستها میتوانند رابط وب، API، اپلیکیشن موبایل یا رفتار اجزای داخلی نرمافزار را پوشش دهند.
هدف تنها نوشتن اسکریپت نیست. فردی که این مهارت را دارد، اقدامات زیر را انجام میدهد:
سناریوهای مناسب برای خودکارسازی را انتخاب میکند.
داده و نمونههای آماده تست (Fixture) را مدیریت میسازد.
«انتخابگر» عنصر (Selector) و انتظار مناسب برای عناصر پویا مینویسد.
نتیجه شکست تست را مورد تحلیل قرار میدهد.
مهندسان تست نرمافزار، توسعهدهندگان و تیمهای کیفیت از این مهارت برای اجرای سریعتر تستهای رگرسیون، بازخوردگیری پیش از انتشار و کاهش خطای بررسیهای تکراری استفاده میکنند. تست خودکار، جایگزین کامل تست اکتشافی و قضاوت انسانی نیست، بلکه پوشش پایدار بخشهای تکراری و پرریسک را تقویت میسازد.
این مهارت را با نامهای دیگری نیز میشناسند:
- اتوماسیون تست
- تست خودکار
- اتوماسیون تست نرمافزار
- تست اتوماتیک
- Test Automation
- Automated Testing
- QA Automation
- Automation Testing
اهمیت و کاربردها
چرا این مهارت مهم است؟
با بزرگتر شدن محصول و افزایش دفعات انتشار، اجرای دستی همه سناریوهای رگرسیون کند و خطاپذیر میشود. تست خودکار به تیم اجازه میدهد مجموعهای از رفتارهای مهم را پس از تغییر کد، به صورت تکرارپذیر بررسی کند و درباره انتشار بازخورد زودتری بگیرد.
در بازار کار ایران، نام موقعیتها یکدست نیست و شرکتها ممکن است برای نقش مشابه از عنوانهایی مانند کارشناس QA، مهندس تست نرمافزار یا QA Automation استفاده کنند. هنگام بررسی آگهی، علاوه بر عنوان شغل باید به تاریخ انتشار، شرح وظایف و فناوری محصول نیز توجه کنید. اگر آگهی از تست رابط یا API سخن میگوید، باید بررسی کنید که آیا انتظار نوشتن کد تست، مدیریت داده تست، تحلیل شکستها و اجرای تست در CI نیز وجود دارد یا خیر.
ترکیب مهارت موردنیاز به نوع شرکت وابسته است. تیمهای محصولی با انتشارهای منظم به مجموعه تست رگرسیون قابلاعتماد و نگهداریپذیر نیاز دارند. شرکتهای برونسپاری ممکن است روی پوشش سناریوهای مشتریان و سازگاری با فناوریهای متنوع تمرکز کنند. در تیمهای کوچک نیز گاهی توسعهدهنده یا کارشناس QA مسئولیت تست دستی و خودکار را به طور همزمان بر عهده میگیرد. بنابراین توانایی خواندن کد، کار با API و گزارشکردن دقیق شکستها اهمیت عملی مییابد.
ابزار به تنهایی کافی نیست. توانایی تشخیص سناریوی ارزشمند، ساخت تست قابلنگهداری و رسیدگی به تستهای ناپایدار اهمیت بیشتری دارد. در محصولی کوچک با تغییرات کم، خودکارسازی همه موارد ممکن است هزینه نگهداری بیشتری از فایده آن ایجاد کند. بنابراین انتخاب دامنه تست بخش مهمی از کار به شمار میرود.
کاربردها
-
تست رگرسیون رابط وب
اجرای خودکار مسیرهای حیاتی مانند ثبتنام، ورود، جستوجو، پرداخت و ثبت سفارش پس از هر تغییر مهم در رابط یا سرویسهای پشت آن.
-
اعتبارسنجی API
بررسی کد وضعیت، بدنه پاسخ، اعتبارسنجی ورودیها، احراز هویت و قرارداد میان سرویسها برای کاهش خطاهای یکپارچهسازی.
-
اجرای تست در CI
اتصال مجموعه تست به فرایند یکپارچهسازی مستمر تا پیش از ادغام یا انتشار، خطاهای شناخته شده سریعتر آشکار شوند.
-
آمادهسازی داده و محیط تست
ساخت دادههای تکرارپذیر، پاکسازی وضعیت پیشین و استفاده از Fixture برای مستقل ماندن تستها از دادههای تصادفی محیط.
-
پایش و کاهش تستهای ناپایدار
یافتن علت شکستهای متناوب، اصلاح انتظارهای زمانی و وابستگیهای بیرونی و جلوگیری از بیاعتمادی تیم به نتایج تست.
-
تست اپلیکیشن موبایل
خودکارسازی سناریوهای کلیدی اپلیکیشن در دستگاهها یا شبیهسازهای مختلف با ابزارهای مناسب تست موبایل.
ابزارهای مرتبط
پیشنیازها
شروع این مهارت با دانستن پیشنیازهای زیر هموارتر میشود.
- مهارت تست نرمافزار Software Testing
- مهارت برنامهنویسی Programming
- مهارت کنترل نسخه Version Control
- توانایی خواندن نیازمندیها و سناریوهای کاربر
- آشنایی مقدماتی با HTTP و ساختار درخواست و پاسخ API
- دسترسی به یک پروژه تمرینی وب یا API
مسیر یادگیری خودکارسازی تست نرمافزار
-
۲۵ ساعت
تشخیص سناریوهای مناسب برای خودکارسازی
مفاهیم تست نرمافزار، تست رگرسیون، هرم تست و تفاوت تست دستی، اکتشافی و خودکار را مرور کنید.
برای محصول نمونهای، سناریوهای پرتکرار و پرریسک را از مواردی جدا کنید که به قضاوت انسانی نیاز دارند. برای هر سناریوی منتخب، پیششرط، دادههای ورودی، مراحل اجرا و نتیجه مورد انتظار را بنویسید.
از خودکارسازی سناریوهای ناپایدار یا سناریوهایی که به سرعت تغییر میکنند، بدون توافق با تیم محصول خودداری کنید.
-
۳۰ ساعت
نوشتن کد تست ساختیافته
زبان مناسب با نیازهای تیم یا ابزار هدف، مانند جاوا اسکریپت یا پایتون، را انتخاب کرده و این مفاهیم را تمرین کنید:
متغیرها و توابع
شرطها و حلقهها
مدیریت خطا
ساختاردهی فایلها
تمرینها را تا جایی ادامه دهید که بتوانید کد تست خوانا و قابلتغییر بنویسید. همزمان، کار با گیت را نیز یاد بگیرید:
ساخت شاخه
ثبت تغییرات با commit
بررسی تفاوت نسخهها
کد تست نیز مانند کد محصول به بازبینی و نگهداری نیاز دارد.
-
۳۵ ساعت
خودکارسازی تست API با دادههای قابلتکرار
مفاهیم پایه API را تمرین کنید:
درخواستهای HTTP و روشهای رایج
کدهای وضعیت
Headerها و احراز هویت
ساختار JSON
سپس برای API نمونه، تستهای مربوط به ورودی معتبر، ورودی نامعتبر و درخواستهای بدون مجوز بنویسید. دادههای تست را از سناریوها جدا نگه دارید و برای ایجاد کاربران، سفارشها یا رکوردهای مورد نیاز، از Fixture یا اسکریپت راهاندازی استفاده کنید تا اجرای دوباره تستها به نتایج اجرای قبلی وابسته نباشد.
-
۳۵ ساعت
ساخت تست پایدار برای رابط کاربری
با یکی از ابزارهای سلنیوم، «پلیرایت» (Playwright) یا «سایپرس» (Cypress)، کنترل مرورگر و پیادهسازی سناریوهای رابط کاربری را تمرین کنید.
برای یافتن عناصر، Selector-های پایدار مانند شناسههای مشخص تست را به متن، کلاسهای ظاهری یا مسیرهای شکننده ترجیح دهید.
انتظار صریح برای آمادهشدن عنصر، دریافت پاسخ شبکه یا تغییر وضعیت صفحه را تمرین کرده و تا حد امکان از تاخیر ثابت دوری کنید.
سناریوهای ورود، تکمیل فرم و نمایش نتیجه را در چند فایل خوانا و قابلفهم سازماندهی کنید.
-
۳۰ ساعت
مدیریت شکستها و تستهای ناپایدار
گزارش اجرای تست، تصویر یا ویدئوی شکست و لاگهای مرورگر یا سرویس را بررسی کنید. علت شکست را مشخص کنید و بین باگ محصول، تغییر مورد انتظار، مشکل محیط و تست ناپایدار تمایز قائل شوید.
برای هر تست ناپایدار، علت احتمالی و قابلبررسی را ثبت کنید. این علتها میتوانند شامل داده مشترک، وابستگی به سرویس بیرونی، Selector نامناسب یا اجرای همزمان تستها باشند.
اجرای مجدد خودکار تست پس از شکست (Retry) را راهحلی موقت در نظر بگیرید. برای رفع مشکل، علت اصلی را برطرف کنید.
-
۲۵ ساعت
اجرای مجموعه تست در فرایند تحویل
مجموعه تست را با دستورهای مشخص و قابلتکرار اجرا کرده و خروجی آن را به شکلی تنظیم کنید که برای تیم خوانا باشد. سپس اجرای تستهای سریع و ضروری را به فرایند CI مانند Jenkins یا GitHub Actions یا GitLab CI متصل کنید.
اگر زمان اجرای تستها طولانی است، آنها را دستهبندی کنید و تستهای سریع، API و رابط کاربری را جداگانه اجرا کنید. در پایان، راهنمای کوتاهی بنویسید که توضیح دهد هر تست چه چیزی را پوشش میدهد و در صورت شکست، چه اطلاعاتی را باید بررسی کنید.
زمان تقریبی یادگیری
برآورد مجموع زمان آموزش، مطالعه و تمرین تا رسیدن به سطح کاربردی؛ بسته به پیشزمینه شما میتواند کمتر یا بیشتر باشد.
پروژههای تمرینی
موارد زیر تصویری کلی از این بخش برای این مهارت ارائه میکنند.
-
مجموعه تست API برای سامانه مدیریت کارها
توضیح پروژه: برای API مدیریت کارها، تستهای ایجاد، ویرایش و حذف کارها، احراز هویت و خطاهای ورودی را بنویسید. دادههای راهاندازی و پاکسازی را طوری طراحی کنید که هر تست به صورت مستقل اجرا شود.
-
تست رگرسیون مسیر خرید یک فروشگاه نمونه
توضیح پروژه: با Playwright، Cypress یا Selenium، مسیر ورود، جستوجوی محصول، افزودن به سبد و ثبت سفارش آزمایشی را پوشش دهید. برای عناصر پویا Selector و انتظار صریح تعریف کنید.
-
گزارش و اصلاح تست ناپایدار
توضیح پروژه: عمدا تستی برای رابط کاربری ایجاد کنید که به تاخیر ثابت یا داده مشترک وابسته باشد. آن را چند بار اجرا کنید و علت ناپایداری را مستند کنید. سپس تست را با استفاده از انتظار مناسب یا Fixture مستقل اصلاح کنید.
-
اجرای تستها در CI
توضیح پروژه: مخزن پروژه تمرینی را به فرایند CI متصل کنید تا با هر تغییر، تستهای API یا رابط اجرا شوند و گزارش شکست در دسترس باشد.
پرسشهای رایج درباره خودکارسازی تست نرمافزار
در این بخش، به تعدادی از پرسشهای رایج درباره این مهارت پاسخ داده شده است.
آیا برای خودکارسازی تست باید برنامهنویس حرفهای باشم؟
خیر، نیازی به تخصص پیشرفته نرمافزار نیست، اما تسلط بر اصول برنامهنویسی پایه و توابع برای نوشتن اسکریپتهای تست الزامی است.
بین Selenium و Playwright و Cypress کدام ابزار را یاد بگیرم؟
ابزاری را انتخاب کنید که با فناوری و نیاز تیم هدف هماهنگ است. Playwright و Cypress به دلیل سرعت بالا و ابزارهای مدرن گزینههای بهتری هستند، اما سلنیوم همچنان در بسیاری از سازمانهای سنتی کاربرد گستردهای دارد.
آیا همه تستهای نرمافزار باید خودکار شوند؟
خیر، تستهای اکتشافی، مواردی که با تجربه انسانی سروکار دارند و ویژگیهایی که مدام تغییر میکنند برای اجرای دستی مناسبترند.
تست ناپایدار چیست؟
تست ناپایدار یا Flaky Test تستی است که بدون تغییر در کد محصول، گاهی به صورت نامشخص موفق و گاهی ناموفق اجرا میشود و اعتبار نتایج کیفیت را مخدوش میسازد.
برای ورود به موقعیت QA Automation چه نمونهکاری بسازم؟
پیادهسازی مجموعهای از تستهای کامل برای وبسایت یا API نمونه به همراه یکپارچهسازی آن در سیستم CI بهترین نمونهکار محسوب میشود. نمونهکار باید دستکم قابلیت اجرای مستقل و توضیح روشن پوشش تست را نشان دهد.
تست API را قبل از تست رابط کاربری یاد بگیرم؟
برای بسیاری از تازهکاران، شروع با تست API سادهتر و سریعتر است، چون با مرورگر و Selector-های رابط درگیر نیستید. پس از درک درخواست، پاسخ و داده تست، به سراغ سناریوهای رابط کاربری بروید.