زیرخاکیها: نگاهی به اتوماسیون برنامه های دسکتاپ

تاریخ انتشار نسخه اصلی 22 ژانویه, 2017تا به امروز آنچه در مورد اتوماسیون تست نوشته ام مربوط به برنامه های تحت وب بوده است. شاید به این علت باشد که در دنیای امروز نرم افزار، تمرکز بیشتر بر روی توسعه برنامه وب و موبایل است. بسیاری از شرکتهای نرم افزاری که راه حلی مبتنی بر پلتفرمهای دسکتاپ داشته اند، با توجه به نیازهای بازار به شدت رقبتی امروز، پلتفرم خود را عوض کرده و اتوماسیون تست را هم برای بالا بردن کیقیت از ابتدا در چرخه تولید نرم افزار قرار میدهند. سالهایی که نرم افزارهای مبتنی بر دسکتاپ مانند برنامه های تحت ویندوز، مکینتاش، جاوا، فلش رواج داشت، طراحی و اجرای فرایند های تست چندان جدی گرفته نمیشد. برای همین امروز هم که نگاهی به ابزارهای تست دسکتاپ میاندازیم، اکثرا برنامه هایی ساده هستند که از ابتدا مانند macro ها در ویندوز، صرفاً برای اتوماتیک کردن کارهای تکراری استفاده میشدند. در واقع بر روی تعداد کمی از آنها میتواند عنوان ابزار تست را گذاشت. ابزارهایی که علاوه بر اتوماسیون، راهکارهای مناسبی برای assertion، پیاده سازی BDD یا تست های مبتنی بر داده و قابل استفاده بودن در زبانهای مختلف برنامه نویسی را داشته باشند. اتوماسیوت تست برنامه دسکتاپ و برنامه های تحت وب یا موبایل از اصول مشترکی پیروی میکنند، اما آنچه توسعه ابزارهای تست دسکتاپ را مشکل میکند پشتیبانی از فناوریهای متنوع مانند برنامه ای تحت dotNet، میتنی بر جاوا، فلش، WPF، لینوکس، MacOS و غیره است. در ادامه ابزارهایی اتوماسیون تست رایج در این زمینه را معرفی میکنیم:ابزار Sikuli: شاید شناخته شده ترین ابزار برای برنامه دسکتاپ و قابل استفاده در تمام پلتفرمها باشد. به این دلیل که مکانیزم تشخیص اش بر اساس تصویر است. در واقع شعار Sikuli این است که «هر چه را بر روی مانیتور میبینید اتوماتیک کنید». با این حال به خاطر محبوبیت ابزارهای مبتی بر Selenium برای وب و موبایل، استفاده از آن بیشتر معطوف به دسکتاپ شده است. برنامه ای رایگان با کد باز، ساده برای یادگیری، با امکان استفاده از در سایر زبانهای برنامه نویسی که خود مبتنی بر Jython است. Sikuli در نگاه اول ابزاری ابتدایی بنظر میآید. اما از آنجایی که میتوان از کلاسهای Java و Python در آن استفاده کرد، در عین حال ابزاری بسیار کاراست. از آنجایی که اساس کار این ابزار بر مبنی تشخیص تصویر است، یکپارچگی کد در محیط نوشتن و اجرا بسیار مهم است. مثلا اگر اندازه یک پنجره تغییر کند یا پشت پنجره ای دیگر مخفی شده باشد، تست منفی میشود. برای همین، به نظر من در سناریوهایی که یکپارچگی رابط گرافیکی مهم است Sikuli بسیار مناسب است.ابزار AutoIt: ابزاری است که ابتدا برای اتوماتیک کردن عملیات مختلف در برنامه های خود سیستم عامل ویندوز استفاده میشد. اما کم کم برای برنامه دیگر تحت ویندوز و هم تست آنها نیز استفاده شد. فرایند تشخیص عمداً از طریق win32 api و COM است. امکان ضبط و رکورد عملیات تست و تولید خودکار کد تست، کار با این ابزار را راحت میکند. ابزاری رایگان است که wrapper آن برای زبانهای مانند Python هم نوشته شده است. کمبود اصلی آن محدود بودن به ویندوز است و امکان استفاده از آن در Linux یا MacOS وجود ندارد.Run(&quotWinampInstall.exe&quot) WinWaitActive(&quotInstaller Language&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot, &quotLicense Agreement&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot, &quotChoose Install Location&quot) Send(&quotC:\Applications\Winamp&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot, &quotChoose Components&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot, &quotChoose Start Options&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot, &quotGet the Most Out of Winamp&quot) Send(&quot{TAB}{TAB}{SPACE}{TAB}{SPACE}{TAB}{SPACE}{TAB}{SPACE}&quot) Send(&quot{ENTER}&quot) WinWaitActive(&quotWinamp Installer&quot, &quotInstallation Complete&quot) Send(&quot{TAB}{SPACE}{ENTER}&quot)ابزار Code UI: ابزاری هست که در نسخه Enterprise برنامه Visual Studio قرار دارد. در نتیجه تیمهایی هم از آن استفاده میکنند که بر روی راه حل های تجاری مبتنی بر ویندوز کار میکنند. امکان ضبط مراحل تست و تولید اتوماتیک کد به صورت VBscript و #C هم در آن وجود دارد. علاوه بر این برای اتوماسیون تحت وب هم میتوان از آن استفاده کرد. هرچند برای پشتیبانی از Chrome و Firefox نیاز به افزونه های مجزا دارد. در کل میتوان گفت ابزاری است که در میان جامعه مایکروسافتی محبوبیت دارد.در ویدئو زیر میتوانید نحوه استفاده از آن برای تست برنامه ماشین حساب ویندوز را ببینید:https://www.youtube.com/watch?v=nSrV2DYx_cIعلاه و موارد بالا ابزارهای عمداً تجاری و بزرگی دیگری مانند TestComplete و QTP هم وجود دارند که از برنامه ای مبتنی بر دسکتاپ نیز پیشتیبانی میکنند. اما بتازگی تعدادی از برنامه نویسان مایکروسافت پروژه ای کوچک و کد بازی بنام WinAppDriver را آغاز کرده اند که ایده آن در واقع راه حلی مانند Selenium Webdriver است که برای سیستم برنامه تحت ویندوز، چه دسکتاپ و چه موبایل استفاده شود. در پست های آینده در مورد این ابزاز و همچنین Sikuli که در میان موارد نام برده محبوبیت بالاتری دارد، بیشتر مینویسم.