چکیده: Cypress و Selenium ابزارهای اتوماسیون تست هستند که برای تست Functional برنامههای وب، بوسیله اتوماسیون Functionهای مرورگر استفاده میشوند. سلنیوم سالهاست که ابزاری پرکاربرد است، در حالی که Cypress ابزاریست که تقریبا به تازگی در جامعه تست نرمافزار معرفی شده است. این دو ابزار با یک هدف، اما تفاوتهای اساسی به جامعه تسترها معرفی شدهاند.
۱- چرا Cypress و سلنیوم را مقایسه میکنیم؟
Cypress و Selenium ابزارهای اتوماسیون تست هستند که برای تست Functional برنامههای وب، بوسیله اتوماسیون Functionهای مرورگر استفاده میشوند. سلنیوم سالهاست که ابزاری پرکاربرد است، در حالی که Cypress ابزاریست که تقریبا به تازگی در جامعه تست نرمافزار معرفی شده است.
علی رغم اینکه Cypress به تازگی معرفی شده است، لکن با توجه به بیش از ۲۲ هزار ستاره در Github، و بیش از ۵۳۰ هزار بار دانلود هفتگی جذابیت زیادی پیدا کرده است. با چنین رشد قابل توجهی در پذیرش Cypress، طبیعیست که تسترها قبل از انتخاب ابزاری ایده آل برای اتوماسیون تست، این دو را با هم مقایسه کنند.
اکنون، سوال این است، که Cypress چگونه با سلنیوم مقایسه میشود؟ آیا Cypress جایگزین بهتری برای سلنیوم است، یا این یک سوال خام است؟
یک راه آسان برای پاسخ به این سوالات ارزیابی مزایا و محدودیت های هر ابزار است.
۲- Cypress
Cypress ابزاری کاملاً مبتنی بر جاوا اسکریپت است که برای وب مدرن ساخته شده است. هدف از این کار پرداختن به نقاطیست که ناراحتی زیادی به توسعه دهندگان یا مهندسان QA هنگام تست یک برنامه کاربردی تحمیل میکند. Cypress ابزاری سازگارتر برای توسعهدهندگان است که از تکنیک منحصر به فرد دستکاری DOM استفاده کرده و مستقیماً در مرورگر عمل میکند. Cypress همچنین یک اجرا کننده تعاملی تست(Interactive Test Runner) منحصر به فرد ارائه میدهد که در آن تمام دستورات(Command) را اجرا میکند.
در اسناد رسمی آمده است که Cypress نسبت به سلنیوم تفاوت معماری و اساسی دارد.
با استفاده از Cypress ، QA یا توسعه دهندگان میتوانند موارد زیر را ایجاد نمایند:
- Unit Testها
- Integration Testها
- End to End Testها
به دنبال رویکرد Agile، توسعه دهندگان Front-End شروع به ایجاد Test Caseهای خود کردهاند. JavaScript زبانیست که به طور گسترده در بین توسعه دهندگان Front-End مورد استفاده قرار میگیرد. این واقعیت که Cypress کاملاً مبتنی بر JavaScript است نشان میدهد که چگونه این ابزار به صورت ویژه برای پاسخگویی به نیازهای توسعهدهندگان Front-End طراحی شده است. به طور طبیعی، قبل از شروع تست با استفاده از Cypress، باید درJavaScript مهارت داشته باشید.
پیشرفتهای معماری در Cypress، تسترها را بوسیله قابیلت انجام توسعه تست محور(Test Driven Development-TDD) با تست End-to-End توانمند کرده است. Cypress با هدف ایجاد توسعه و تست یک فرایند موازی ساخته شده است.
توجه: اسکریپتهای Cypress مانند سلنیوم در خارج از مرورگر قابل اجرا نیستند. همه اسکریپتهای تست Cypress در مرورگر اجرا میشوند. به عنوان مثال، برای کلیک بر روی یک دکمه خاص، Cypress با استفاده از یک درایور خاص، دستور را به مرورگر نمیفرستد، بلکه به جای آن، از رویدادهای DOM برای ارسال دستور کلیک روی دکمه استفاده میکند. این منجر به اجرای سریعتر تست و حصول نتایج تست(Test Result) میشود.
الف. مزایای Cypress
- چارچوب Cypress در زمان اجرای تست Snapshot(عکس فوری) ثبت میکند. این به QA یا توسعه دهندگان اجازه میدهد، روی یک دستور خاص در Command Log، هاور(Hover) کرده تا ببینند دقیقاً چه اتفاقی در آن مرحله رخ داده است.
- برخلاف سلنیوم نیازی به افزودن دستورات صریح یا ضمنی برای انتظار(Wiating) در اسکریپت های تست، نیست. Cypress به طور خودکار منتظر دستورات و Assertهاست.
- توسعهدهندگان یا QA میتوانند از Spyها، Stubها و Clockها برای بررسی و کنترل رفتار پاسخها، Functionها یا تایمرهای سرور استفاده کنند.
- عملیات پیمایش خودکار اطمینان از مشاهده یک عنصر را قبل از انجام هر عملی(به عنوان مثال کلیک کردن روی یک دکمه) تضمین میکند.
- Cypress در نسخ ابتدایی فقط از تست در Chrome پشتیبانی میکرد. با این حال، با به روزرسانیهای اخیر، Cypress اکنون از مرورگرهای Firefox و Edge نیز پشتیبانی میکند.
- همانطور که برنامهنویس Commandها را مینویسد، Cypress آنها را به صورت Real Time اجرا میکند و هنگام اجرا بازخورد تصویری ارائه میدهد.
- Cypress مستنداتی عالی به همراه دارد.
ب. محدودیتهای Cypress
- نمیتوان از Cypress برای هدایت همزمان دو مرورگر استفاده کرد.
- از چند برگه(Multi Tab) پشتیبانی نمیکند.
- Cypress فقط از JavaScript برای ایجاد Test Case پشتیبانی میکند.
- Cypress در حال حاضر از مرورگرهایی مانند Safari و IE پشتیبانی نمیکند.
- پشتیبانی محدود از iFrameها
۳- Selenium
همانطور که قبلاً ذکر شد، سلنیوم ابزاری محبوب برای اتوماسیون تست است که مرورگرهای وب را خودکار میکند. این ابزار Open Source بیش از یک دهه است که یکی از گزینه های اصلی تسترهاست.
این ابزار به QA اجازه میدهد تا با استفاده از کتابخانه Selenium WebDriver همراه با یک چارچوب مخصوص زبانی، Test Caseها را برای مرورگر مورد نظر خود اتوماتیک نماید. قبل از شروع به کار با اتوماسیون مرورگر، باید درایور مخصوص مرورگر را دانلود نمایید، تا دستورات نوشته شده شما، قابلیت اجرا در آن مرورگر را داشته باشد.
توسعه دهندگان و QA همچنین از انعطافپذیری در انتخاب زبان برنامهنویسی به دلخواه خود، برخوردار هستند. توسعهدهندگان سلنیوم Bindingهای زبانی را برای چندین زبان مانند Ruby ، Python ، Java و غیره ایجاد کردهاند.
WebDriver از پروتکل JSON Wire برای اجرای Test Caseها استفاده میکند. در سطح بالا، اجرا شامل سه مرحله اصلی است:
- دستورات تست به یک URL ترجمه میشوند
- درایورهای مرورگر این URLها را با استفاده از سرور HTTP دریافت میکنند
- URLها به عنوان درخواست به مرورگرهای واقعی ارسال میشوند و تمام دستورات موجود در اسکریپتهای تست اجرا میگردد.
الف. مزایای سلنیوم
- سازگار با چندین سیستم عامل مانند ویندوز، لینوکس، یونیکس، مک.
- QA را برای انتخاب زبان برنامهنویسی مورد نظر خود مانند جاوا، Ruby، Python و غیره فراهم میکند.
- سازگار با مرورگرهای مدرن مانند Safari ، Chrome ، Firefox و غیره.
- APIهای گوناگون.
ب. محدودیت های سلنیوم:
- دستور Built-in(توکار یا داخلی) برای تولید خودکار نتایج تست وجود ندارد، و باید از Frameworkهایی مانند NUint یا Junit و یا Frameworkهای جدیدتری مانند TestNG استفاده نمایید.
- کنترل بارگذاری صفحه یا بارگذاری عنصر دشوار است.
- پشتیبانی محدود از تصاویر تست.
- وقتگیرتر بودن ایجاد Test Caseها به نسبت Cypress.
- تنظیم محیط تست در مقایسه با Cypress مقداری دشوار است.
۴- مقایسه تفاوتهای کلیدی سلنیوم و Cypress
اگرچه سلنیوم و Cypress هر دو برای اتوماسیون مرورگرها با هدف تست طراحی شدهاند، اما از نظر معماری و عملکرد تفاوت زیادی دارند.
به هیچ وجه نمیتوان گفت کدام ابزار بهتر است. ابزارها، بهتر و بدتر ندارند، بلکه بر حسب شرایط، بهتر است از یکی استفاده نموده و دیگری را کنار بگذارید. همین شرایط به سادگی میتواند در پروژه دیگری کاملا معکوس شود، که منجر به انتخاب ابزار دیگر میشود. بنابراین استفاده یا عدم استفاده از یک ابزار تست، موضوعیست که کاملا به شرایط و محدودیتهای تیم و پروژه شما بستگی دارد. به عنوان نمونه:
- اگر نیازمند Integration با ابزارهای گوناگون هستید، Selenium گزینه مناسبیت.
- اگر نیاز ندارید خود را درگیر بسیاری از جزییات کنید، Cypress انتخاب معقولتریست، اما اگر معکوس این صادق است، احتمالا باید به سراغ Selenium بروید.
- اگر روی مروگر خاصی کار میکنید، که در لیست مرورگرهای پشتیبانی شده در Cypress نیست باید به Selenium بازگردید.
- در عوض سرعت اجرای تست در Cypress بالاست. اما Selenium هم به کمک Grid، قابلیت اجرای N تست موازی(که منجر به افزایش شدید سرعت اجرا میشود) روی انواع مرورگرها و ماشینهای مختلف را به شما میدهد، و با این راهکار چالش سرعت اجرا را حل کرده است.
- Cypress ابزاریست که Front-end Developerها بیشتر هوادار آن هستند، اما Selenium عموم تسترها را هدف قرار میدهد.