بهینه سازی تست پایان به پایان: استراتژی هایی برای سرعت ، قابلیت اطمینان و کارآیی

نمای کلی سریع: تست های E2E چیست؟
تست های پایان به پایان (E2E) برای اجرای در بالای برنامه شما طراحی شده اند و تعامل واقعی کاربر مانند کلیک بر روی دکمه ها ، تایپ ورودی ، پیمایش بین صفحات و موارد دیگر را شبیه سازی می کنند.
این آزمایشات برای بررسی اینکه کل گردش کار مطابق انتظار کار می کند بسیار مفید است. به عنوان مثال ، در یک برنامه تجارت الکترونیکی ، یک آزمایش E2E می تواند یک سفر خرید کامل را شبیه سازی کند: انتخاب یک محصول ، اضافه کردن آن به سبد خرید ، ثبت کارت اعتباری و تکمیل روند پرداخت. با آزمایش سناریوهای دنیای واقعی ، تست های E2E به اطمینان از ویژگی های اصلی برنامه شما به خوبی در کنار هم کار می کنند.
زمینه
اخیراً ، در پروژه فعلی من ، ما با وظیفه بازگرداندن برخی از آزمایشات قدیمی و پرش E2E روبرو شدیم. در حین کار از طریق آنها ، ما چندین فرصت برای بهبود مشاهده کردیم. بسیاری از این آزمایشات را می توان به روشی کارآمدتر ادغام یا بازنویسی کرد ، و ما فهمیدیم که رویکرد ما برای بازیابی بانک اطلاعاتی برای هر آزمون به طور قابل توجهی افزایش زمان اجرای را افزایش می دهد.
علاوه بر این ، ما پتانسیل را برای موازی کردن برخی از سناریوهای آزمون مشخص کردیم ، که می تواند روند آزمایش ما را بیشتر بهینه کند. این مشاهدات باعث شد تا ما روی تکنیک هایی برای بهبود عملکرد ، مانند ادغام و بهینه سازی موارد تست ، اعمال موازی سازی و تجدید نظر در استراتژی ترمیم پایگاه داده خود تمرکز کنیم. در این مقاله ، این استراتژی ها را در درجه اول بر اساس تجربه من با استفاده از نمایشنامه نویس به عنوان یک ابزار تست E2E به اشتراک می گذارم. با این حال ، این تکنیک ها به احتمال زیاد در اکثر چارچوب های آزمایش E2E کاربرد دارند.
موازی سازی
موازی سازی در پرونده ها
تست های موازی سازی یکی از موثرترین راه های سرعت بخشیدن به اجرای آزمایش E2E است ، به خصوص با رشد مجموعه تست شما. با اجرای چندین تست به طور همزمان ، می توانید از منابع سیستم خود به طور کارآمدتر استفاده کنید و به طور قابل توجهی کل زمان اجرا را کاهش دهید.
در پروژه ما ، نمایشنامه نویس را پیکربندی کردیم تا از 5 کارگر به طور پیش فرض استفاده کنیم. هر کارگر یک فایل آزمایشی را به طور مستقل اجرا می کند و حداکثر 5 تست را قادر می سازد تا همزمان اجرا کنند. در اینجا نحوه تنظیم آن آورده شده است:
// playwright.config.js
import { defineConfig } from '@playwright/test';
export default defineConfig({
workers: 5,
});
این تغییر ساده منجر به پیشرفت چشمگیر در سرعت اجرای تست شد ، زیرا آزمایش های متعدد می توانند به طور همزمان انجام شوند.
با این حال ، برخی از آزمایشات به دلیل عوارض جانبی نیاز به بازنویسی داشتند. به عنوان مثال ، تست های خاصی از منابع ایجاد شده یا اصلاح شده که آزمایش های دیگر به آن بستگی دارند. هنگامی که این آزمایشات به صورت موازی انجام شد ، دستور اجرای آنها گاهی اوقات باعث خرابی می شود ، زیرا دولت مشترک به درستی اداره نمی شد.
تست های موازی سازی در پرونده ها
علاوه بر تست های موازی سازی در چندین پرونده ، دریافتیم که امکان اجرای موازی در یک فایل آزمایشی واحد نیز وجود دارد. این رویکرد به ویژه هنگامی مفید است که چندین تست مستقل در همان پرونده گروه بندی شده و می خواهید زمان اجرای را بیشتر بهینه کنید.
در نمایشنامهنویس ، این کار را می توان با بسته بندی تست های شما در test.describe.parallel
بشر تمام آزمایشات موجود در این بلوک به طور همزمان انجام می شود:
test.describe.parallel('Group of parallel tests', () => {
test('Test 1', async ({ page }) => {
// Test logic here
});
test('Test 2', async ({ page }) => {
// Test logic here
});
});
بر اساس تجربه ما موازی سازی تست ها در بین پرونده ها ، اصول کلیدی یکسان باقی مانده است:
- از عوارض جانبی خودداری کنید: اطمینان حاصل کنید که تست ها کاملاً مستقل هستند و منابع را به گونه ای به اشتراک نمی گذارند که می تواند در سایر تست ها دخالت کند.
- استفاده مجدد از منابع عاقلانه: منابع مشترک ، مانند نمونه های مرورگر یا داده های آزمون را مدیریت کنید ، به طور مؤثر برای جلوگیری از مشاجره یا درگیری در هنگام اجرای موازی. این تکنیک می تواند یک سرعت قابل توجه را برای پرونده های بزرگ تست ارائه دهد ، اما برای حفظ قابلیت اطمینان آزمایش و جلوگیری از نتایج پوسته پوسته نیز نیاز به برنامه ریزی دقیق دارد. با جداسازی تست ها و مدیریت موثر منابع ، می توانید از اجرای موازی در پرونده ها استفاده کامل کنید.
از پیش تأیید
پیش تأیید یک گام مهم برای اطمینان از شروع هر آزمون با یک جلسه کاربر معتبر و معتبر است. این تکنیک نیاز به انجام مکرر انجام اقدامات ورود به سیستم را برای هر آزمایش از بین می برد ، به طور قابل توجهی سرعت و قابلیت اطمینان در آزمایشات را بهبود می بخشد ، به خصوص هنگامی که آزمایش ها به صورت موازی انجام می شوند.
این رویکرد شامل اعمال توانایی نمایشنامه نویس در کار با آن است storageState
، که اطلاعات جلسه (به عنوان مثال ، کوکی ها ، ذخیره سازی محلی) را برای کاربران از پیش تأیید شده ذخیره می کند. با بازگرداندن این حالت در ابتدای هر آزمون ، کاربر در حال حاضر وارد سیستم شده است و به آزمایشات اجازه می دهد تا به جای پیمایش جریان ورود به سیستم ، روی تأیید عملکرد تمرکز کنند.
test('User View - TEST_ID#153', async ({ browser }) => {
const context = await browser.newContext({
storageState: path.join(__dirname, `../.auth/${email}.json`), // Pre-authenticated session
});
const page = await context.newPage();
await page.goto('/'); // User is already logged in at this point
});
این رویکرد تضمین می کند که هر آزمون در انزوا کار می کند و از آلودگی متقابل داده های جلسه جلوگیری می کند. از قبل معتبر storageState
تضمین می کند که مراحل ورود به سیستم را از بین می برد و باعث صرفه جویی در وقت ارزشمند ضمن حفظ قوام در مجموعه می شود.
البته ، چالش هایی برای در نظر گرفتن وجود دارد ، مانند اطمینان از آن .auth/${email}.json
پرونده ها به طور مداوم با داده های جلسه معتبر به روز می شوند. علاوه بر این ، مهم است که روی قابلیت استفاده مجدد از عملکردهای یاور ، اجتناب از داده های محکم یا کد خطرناک که می تواند قابلیت حفظ و قابلیت اطمینان مجموعه آزمون را به خطر بیاندازد ، تمرکز کنید.
بهترین روشها برای آزمایش E2E کارآمد
برای به حداکثر رساندن کارآیی تست های E2E خود:
- اولویت بندی جداسازی آزمون: اطمینان حاصل کنید که تست ها مستقل هستند و در هر صورت ممکن از وضعیت مشترک جلوگیری می کنند.
- وابستگی ها را به حداقل برسانید: یاران قابل استفاده مجدد و قابل استفاده مجدد می توانند افزونگی را کاهش داده و قابلیت اطمینان آزمون را بهبود بخشند.
- نظارت بر عملکرد خط لوله: به طور منظم زمان های آزمایشی و استفاده از منابع را برای شناسایی تنگناها یا فرصت های بهینه سازی بررسی کنید.
- پوشش تعادل و زمان اجرای: تمرکز خود را بر روی پوشش گردش کار مهم بدون بارگذاری بیش از حد خط لوله با آزمایش های غیر ضروری متمرکز کنید.
با رعایت این بهترین شیوه ها ، می توانید یک چارچوب تست E2E قوی ، مقیاس پذیر و کارآمد بسازید که ضمن صرفه جویی در وقت و منابع ، نتایج قابل اعتماد را ارائه می دهد.
پایان
بهینه سازی تست های E2E یک فرآیند مداوم است که شامل تعادل عملکرد ، قابلیت اطمینان و پوشش است. با استفاده از تکنیک های اعمال موازی سازی ، قبل از تأیید و مدیریت دقیق منابع ، می توانید بدون به خطر انداختن دقت ، زمان اجرای آزمایش را به میزان قابل توجهی بهبود بخشید. در حالی که چالش هایی مانند عوارض جانبی و حفظ کد قابل استفاده مجدد نیاز به توجه دارد ، مزایای یک مجموعه E2E بهینه شده بسیار بیشتر از این تلاش است. این شیوه ها ، هنگامی که با فکر کردن اجرا می شوند ، راه را برای یک فرآیند آزمایش کارآمدتر و قابل اطمینان تر هموار می کنند و امکان تحویل سریعتر نرم افزار با کیفیت را فراهم می کنند.