تسلط بر اتوماسیون تست پیشرفته Cypress.io [Part 4/4]: نوشتن توابع سفارشی
![تسلط بر اتوماسیون تست پیشرفته Cypress.io [Part 4/4]: نوشتن توابع سفارشی تسلط بر اتوماسیون تست پیشرفته Cypress.io [Part 4/4]: نوشتن توابع سفارشی](https://nabfollower.com/blog/wp-content/uploads/2023/05/تسلط-بر-اتوماسیون-تست-پیشرفته-Cypressio-Part-44-نوشتن-توابع-780x470.jpeg)
در پایان این بخش، در نوشتن توابع سفارشی برای مجموعه آزمایشی Cypress.io خود مهارت خواهید داشت و راه را برای اتوماسیون تست پیشرفته هموار میکنید. بنابراین، بیایید شروع کنیم!
درک توابع سفارشی در Cypress.io
قبل از اینکه وارد کد شویم، اجازه دهید ابتدا بفهمیم که چه توابع سفارشی در زمینه Cypress.io هستند.
در حالی که Cypress.io بسیاری از دستورات داخلی را برای تعامل با عناصر وب ارائه می دهد، ممکن است شرایطی وجود داشته باشد که شما نیاز به انجام اقدامات پیچیده تر یا نوشتن ادعاهای سفارشی داشته باشید. خوشبختانه Cypress.io به شما اجازه می دهد تا عملکردهای سفارشی خود را ایجاد کنید که عملکرد Cypress.io را گسترش می دهد. آنها می توانند برای انجام وظایف خاصی که به صورت بومی توسط Cypress.io پشتیبانی نمی شوند، یا برای ساده کردن کد و خوانایی بیشتر استفاده شوند.
نوشتن یک تابع سفارشی در Cypress.io [Example-1]
اکنون که متوجه شدیم توابع سفارشی چیست، بیایید به نوشتن یکی برویم. در این مثال، ما یک تابع سفارشی برای تولید نام های کاربری تصادفی ایجاد می کنیم.
function generateRandomUsername() {
let text = "";
let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < 8; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return "user_" + text;
}
بیایید کد بالا را تجزیه کنیم. را generateRandomUsername
تابع هیچ پارامتری نمی گیرد و یک مقدار رشته ای برمی گرداند. با اعلام دو متغیر شروع می شود text
و possible
.
text
در ابتدا یک رشته خالی است و possible
شامل تمام کاراکترهای ممکن است که می توان از آنها برای تولید رشته تصادفی استفاده کرد.
بعد، الف for
حلقه برای 8 بار تکرار استفاده می شود و در هر تکرار یک کاراکتر تصادفی از possible
رشته با استفاده از Math.random()
تابع. سپس کاراکتر انتخاب شده به رشته متن اضافه می شود.
در نهایت، تابع با الحاق کردن یک مقدار رشته ای را برمی گرداند text
رشته ای با پیشوند “user_”.
با استفاده از تابع سفارشی [Example-1] در یک مورد آزمایشی
اکنون که تابع سفارشی خود را داریم، بیایید از آن در یک مورد آزمایشی استفاده کنیم. در این مثال، از تابع سفارشی برای ایجاد یک نام کاربری تصادفی و پر کردن آن در فرم ثبت نام استفاده می کنیم.
it('registers a new user with a random username', () => {
const username = generateRandomUsername();
cy.visit('https://example.com/register')
cy.get('#username').type(username)
cy.get('#email').type('test@example.com')
cy.get('#password').type('password123')
cy.get('#submit').click()
cy.contains('Registration successful!')
})
مورد آزمایشی بالا با ایجاد یک نام کاربری تصادفی با استفاده از تابع سفارشی ما شروع می شود generateRandomUsername()
. سپس به صفحه ثبت نام مراجعه کرده و از آن استفاده می کنیم cy.get()
دستور برای انتخاب #username
، #email
، #password
، و #submit
عناصر موجود در صفحه فیلدهای فرم را با داده های آزمایشی خود پر می کنیم و روی دکمه ارسال کلیک می کنیم.
در نهایت، با بررسی وجود پیام موفقیت، تأیید می کنیم که ثبت نام با موفقیت انجام شده است.
نوشتن یک تابع سفارشی در Cypress.io [Example-2]
فرض کنید باید بررسی کنید که یک عنصر خاص در صفحه قابل مشاهده است و اندازه خاصی دارد. شما می توانید یک تابع سفارشی بنویسید که این منطق را در بر بگیرد:
Cypress.Commands.add('assertElementIsVisibleAndHasSize', (selector, width, height) => {
cy.get(selector).should('be.visible').and(($el) => {
expect($el.width()).to.equal(width)
expect($el.height()).to.equal(height)
})
})
در اینجا، ما با استفاده از دستور سفارشی را تعریف می کنیم Cypress.Commands.add()
روش. دستور ما سه پارامتر دارد: انتخابگر عنصر، عرض مورد انتظار و ارتفاع مورد انتظار. سپس از cy.get()
دستور انتخاب عنصر و زنجیر کردن .should()
روشی برای بررسی قابل مشاهده بودن آن در نهایت از .and()
روشی برای انجام ادعاهای اضافی بر روی عرض و ارتفاع عنصر.
اکنون میتوانید از این دستور سفارشی در تستهای خود مانند هر دستور دیگر Cypress.io استفاده کنید:
it('Checks the size of a visible element', () => {
cy.visit('https://www.example.com')
cy.assertElementIsVisibleAndHasSize('.my-element', 100, 200)
})
خلاصه: در اینجا نحوه نوشتن توابع سفارشی در Cypress.io برای گسترش عملکرد چارچوب و مقابله با سناریوهای پیچیده اتوماسیون تست را دیدیم. ما توضیح مفصلی در مورد هر خط کد ارائه کردهایم، تفاوت آن با نمونههای آزمایشی اولیه و نحوه غلبه بر عوارض رایج. با استفاده از توابع سفارشی، می توانید کد تست خود را خواناتر، قابل نگهداری و قابل استفاده مجدد کنید. توابع سفارشی می توانند به شما در ساده سازی موارد آزمایشی پیچیده، مدیریت داده های پویا و کاهش تکرار کد کمک کنند.
قسمت های قبلی: قسمت 1، قسمت 2، قسمت 3
اگر این را دوست داشتید، روی ❤ کلیک کنید تا دیگران نیز به اینجا توجه کنند.
نمونه های دنیای واقعی
در حالی که مثالهایی که در این سری از موضوعات پیشرفته و پیچیده ارائه کردهایم، برای یادگیری نحوه مدیریت iframeها، نادیده گرفتن شبکه، حل وعدهها و توابع سفارشی مفید هستند، اما تا حدودی ساختگی هستند. برای تسلط واقعی بر این تکنیک ها، مهم است که ببینیم چگونه می توان آنها را در سناریوهای دنیای واقعی اعمال کرد.
به عنوان مثال، فرض کنید در حال آزمایش یک وب سایت تجارت الکترونیک هستید که از iframes برای نمایش اطلاعات محصول از یک فروشنده شخص ثالث استفاده می کند. ممکن است لازم باشد آزمایش کنید که اطلاعات صحیح محصول در iframe نمایش داده می شود و کاربران می توانند با گزینه های محصول تعامل داشته باشند و محصول را به سبد خرید خود اضافه کنند.
به طور مشابه، فرض کنید در حال آزمایش یک برنامه رسانه اجتماعی هستید که به شدت به درخواست های شبکه برای نمایش محتوای کاربر متکی است. ممکن است برای شبیهسازی اتصالات کند شبکه یا پاسخهای خطا، و آزمایش اینکه برنامه چگونه با این موقعیتها برخورد میکند، نیاز به استفاده از stubbing شبکه داشته باشید.
در نهایت، فرض کنید در حال آزمایش یک برنامه مالی هستید که نیاز به تعاملات پیچیده با عناصر وب دارد. ممکن است لازم باشد توابع سفارشی را برای انجام محاسبات بنویسید یا تأیید کنید که برخی از داده های مالی به درستی نمایش داده می شوند.
با گنجاندن سناریوهای دنیای واقعی در استراتژی اتوماسیون تست خود، میتوانید اطمینان حاصل کنید که تستهای شما در تشخیص مسائل دنیای واقعی مرتبط و موثر هستند. به خاطر داشته باشید که این تکنیکهای پیشرفته فقط ابزارهایی در زرادخانه آزمایشی شما هستند – نکته کلیدی استفاده عاقلانه و استراتژیک از آنها برای دستیابی به اهداف آزمایشی است.
اظهارات قطعی
در این سری از موضوعات، ما برخی از تکنیکهای پیشرفته برای اتوماسیون تست Cypress.io را بررسی کردهایم، از جمله مدیریت iframe، stubbing شبکه، حل وعده و توابع سفارشی. ما نمونههای کد ارائه کردهایم و هر مفهوم را با جزئیات توضیح دادهایم، و همچنین اهمیت گنجاندن سناریوهای دنیای واقعی را در استراتژی تست شما برجسته کردهایم.
با تسلط بر این تکنیکها، میتوانید تستهای خودکار کارآمدتر و مؤثرتری بنویسید و قبل از رسیدن به تولید، اشکالات را تشخیص دهید. با قابلیتهای تست قدرتمند Cypress.io و مهارتهای جدیدتان، میتوانید بازی آزمایشی خود را به سطح بالاتری ببرید. تست مبارک!