معرفی
k6 یک ابزار متنباز برای تست بار و ارزیابی کارایی نرمافزار است. توسعهدهندگان و مهندسان تست با آن بررسی میکنند که API، وبسایت یا سرویس در برابر الگوی مشخصی از بار چگونه پاسخ میدهد، چه زمانی کند میشود و در چه شرایطی نرخ خطا افزایش پیدا میکند.
سناریوهای تست در k6 با JavaScript نوشته میشوند و ابزار از خط فرمان اجرا میشود. اسکریپت میتواند درخواستهای HTTP، WebSocket و gRPC را اجرا کند، کاربر مجازی ایجاد کند، الگوی بار را مشخص کند و شاخصهایی مانند زمان پاسخ، نرخ خطا و تعداد درخواست را گزارش دهد. پیش از استفاده از هر پروتکل، سازگاری نسخه نصبشده و وضعیت قابلیت را در مستندات HTTP، مستندات WebSocket و مستندات gRPC بررسی کنید.
در k6، تعداد کاربر مجازی همیشه معادل تعداد کاربر واقعی سامانه نیست. نوع سناریو و Executor تعیین میکند بار چگونه تولید شود. برای نمونه میتوان تعداد ثابتی کاربر مجازی داشت، تعداد آنها را بهتدریج افزایش داد یا نرخ شروع Iterationها را مشخص کرد. جزئیات طرحها و شیوه اجرا در مستندات Grafana Cloud k6 آمده است.
k6 برای تیمهایی مناسب است که میخواهند تست کارایی را مانند کد در مخزن Git نگه دارند و در خط لوله یکپارچهسازی و تحویل مستمر اجرا کنند. نسخه متنباز آن روی محیط اجرایی تیم قابل استفاده است. Grafana Cloud k6 نیز امکانات مدیریتشده برای اجرای تست و نگهداری و تحلیل نتایج ارائه میکند.
شروع یک تست کارایی با k6
یک مسیر API مهم و کمخطر، مانند دریافت فهرست یا جستوجو، انتخاب کنید.
الگوی بار را تا جای ممکن از داده واقعی ترافیک استخراج کنید یا فرضهای خود را بنویسید.
برای زمان پاسخ، نرخ خطا و نرخ درخواست، وضعیت پایه را ثبت کنید.
Thresholdها (آستانهها) را بر اساس هدف تست، SLO یا معیار مورد انتظار تعیین کنید.
تست را با بار کنترلشده در محیط مناسب اجرا کنید و خروجی k6 را در کنار معیارهای سرویس، لاگها و Traceها بررسی کنید.
Threshold در k6 معیار قبولی یا شکست تست است. برای نمونه میتوانید تعیین کنید نرخ خطا کمتر از مقدار مشخصی باشد یا ۹۵ درصد درخواستها در کمتر از زمان تعیینشده پاسخ بگیرند. شکست Threshold میتواند باعث شود اجرای k6 با وضعیت ناموفق تمام شود و همین ویژگی برای استفاده در CI/CD مهم است.
در آگهیهای ایران، آشنایی با k6 میتواند برای مهندس QA و تست، مهندس DevOps و توسعهدهنده بکاند مفید باشد، بهخصوص در تیمهایی که API و استقرار خودکار دارند. اجرای تست بار روی سامانههای پرداخت، فروش، ثبتنام یا هر سامانه عملیاتی باید با مجوز مالک سامانه و هماهنگی تیم زیرساخت انجام شود.
در صورت نیاز، میتوان معیارهای تست را با ابزارهای پایش و نمایش داده مانند Grafana و Prometheus یکپارچه کرد. GitLab و Jenkins نیز بسته به پیکربندی خط لوله میتوانند اجرای اسکریپتهای k6 را خودکار کنند.
این ابزار را با نامهای دیگری نیز میشناسند:
- کیسیکس
- گرافانا k6
- Grafana k6
- k6 OSS
ویژگیهای کلیدی
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
اسکریپتنویسی با JavaScript
سناریوی درخواستها، دادههای ورودی، اعتبارسنجی پاسخ و جریان کاربر در فایلهای JavaScript تعریف میشود. به همین دلیل بازبینی، نسخهبندی و نگهداری آن در کنار کد محصول سادهتر است.
-
مدلسازی کاربر و بار
میتوانید تعداد کاربران مجازی، مدت اجرا و الگوی ورود کاربران را تعریف کنید. برای نمونه میتوان بار را بهتدریج افزایش داد یا در یک بازه کوتاه فشار بیشتری ایجاد کرد. نوع سناریو و Executor نیز روی شیوه تولید بار اثر دارد.
-
آستانهها (Thresholds)
با Thresholdها میتوان شرطهایی مانند محدودبودن نرخ خطا یا زمان پاسخ را تعیین کرد تا اجرای تست در CI/CD هنگام نقض معیارها ناموفق شود.
-
معیارها و گزارش اجرای تست
k6 معیارهای مربوط به درخواست، زمان پاسخ، خطا و کاربران مجازی را جمعآوری میکند و خروجی مناسب برای تحلیل محلی یا ارسال به سامانههای پایش فراهم میکند.
-
پشتیبانی از پروتکلهای رایج سرویسها
برای تست سرویسهای HTTP، WebSocket و gRPC کاربرد دارد و میتواند جریانهای مبتنی بر API را با درخواستهای متوالی و دادههای پویا اجرا کند.
-
اجرای خط فرمان و خودکارسازی
اجرای بدون رابط گرافیکی، استفاده از متغیرهای محیطی و خروجی قابلپردازش، قرار دادن تستهای کارایی در خط لوله استقرار را سادهتر میکند.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
تست بار API پیش از انتشار
پیش از انتشار نسخه جدید، مسیرهای حساس مانند ورود، ثبت سفارش یا جستوجو را با بار مورد انتظار آزمایش کنید و تغییر زمان پاسخ یا نرخ خطا را با نسخه قبلی مقایسه کنید.
-
بررسی فرضیههای افت عملکرد
بار را مرحلهبهمرحله بالا ببرید تا نقطه شروع افزایش زمان پاسخ یا نرخ خطا مشخص شود. سپس با معیارهای سرویس، لاگها و Traceها فرضیههایی مانند اشباع اتصال پایگاه داده یا کندی یک وابستگی خارجی را بررسی و با آزمون کنترلشده تایید یا رد کنید.
-
کنترل افت کارایی در CI/CD
یک سناریوی کوتاه و پایدار را در خط لوله اجرا کنید و با آستانههای مشخص، تغییری را که کارایی مسیرهای کلیدی را به شکل قابلتوجهی کاهش میدهد شناسایی کنید.
-
اعتبارسنجی ظرفیت در رویدادهای پرترافیک
برای کمپین، ثبتنام، فروش محدود یا انتشار قابلیت پرمخاطب، الگوی احتمالی افزایش کاربران را شبیهسازی کنید و پیش از رویداد ظرفیت و محدودیتها را بررسی کنید.
-
تست سرویسهای داخلی و وابستگیها
با سناریوهای جداگانه یا زنجیرهای، اثر کندی و خطای سرویسهای داخلی بر API اصلی را بسنجید. بار واقعی را فقط در محیطی اجرا کنید که ظرفیت و مجوز لازم برای آن وجود دارد.
ابزارهای جایگزین
پرسشهای رایج درباره k6
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
آیا برای استفاده از k6 باید JavaScript بلد باشم؟
برای سناریوهای ساده، آشنایی مقدماتی با JavaScript کافی است. باید بتوانید متغیر، تابع، شرط، آرایه و ماژول را بخوانید و بنویسید. بخش مهمتر، شناخت HTTP، API، معیارهای کارایی و طراحی سناریوی نزدیک به رفتار واقعی سامانه است.
k6 برای تست عملکرد رابط کاربری مناسب است؟
k6 علاوه بر تست در سطح پروتکل، ماژول مرورگر نیز دارد که امکان تعامل با مرورگر مبتنی بر Chromium و جمعآوری معیارهای کارایی فرانتاند و Web Vitals را فراهم میکند. این قابلیت برای بررسی کارایی در سطح مرورگر و بعضی جریانهای انتها به انتها کاربرد دارد. برای تولید حجم زیادی از بار، تست در سطح پروتکل معمولا سبکتر است. میتوان تستهای سطح پروتکل و مرورگر را نیز در یک سناریوی کلی در کنار هم استفاده کرد.
تفاوت k6 و Apache JMeter چیست؟
هر دو برای تست بار کاربرد دارند و طراحی سناریو در هر دو به شناخت پروتکل و مدل بار نیاز دارد. در JMeter معمولا Test Plan با رابط گرافیکی طراحی میشود. k6 سناریوها را در اسکریپتهای JavaScript تعریف میکند و برای نگهداری تستها در Git و اجرای آنها از خط فرمان و CI/CD مناسب است. انتخاب میان این دو فقط به رابط کاربری بستگی ندارد. نوع پروتکل، تجربه تیم، روش نگهداری تستها و شیوه اجرای آنها در فرایند توسعه نیز باید بررسی شود.
آیا اجرای k6 روی محیط عملیاتی خطر دارد؟
بله. تست بار میتواند منابع سرویس، پایگاه داده و سرویسهای وابسته را مصرف کند یا حتی باعث اختلال شود. بهتر است ابتدا تست را در محیط آزمایشی اجرا کنید. برای محیط عملیاتی، دامنه تست، زمان اجرا، سقف بار، معیار توقف و هماهنگی با تیمهای مسئول را از قبل مشخص کنید.
آیا نسخه متنباز k6 رایگان است؟
بله. هسته متنباز k6 برای اجرای روی زیرساخت خودتان در دسترس است. Grafana Cloud k6 سرویس جداگانهای برای اجرای مدیریتشده تست، نگهداری نتایج و قابلیتهای ابری ارائه میکند و مدل استفاده و قیمتگذاری آن جدا است.