k6 اختبار التحميل: دليل عملي لـ APIs

دليل عملي لاختبار التحميل باستخدام k6: تثبيت k6، كتابة أول سكربت لك، تعيين المستخدمين الافتراضيين (VUs)، والمراحل، والعتبات، قراءة نتائج p95/p99، وتشغيله في الدمج المستمر (CI).

Ashley Goolam

Ashley Goolam

25 يونيو 2026

k6 اختبار التحميل: دليل عملي لـ APIs

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

إذا كان واجهة برمجة التطبيقات (API) الخاص بك يعمل بشكل جيد لمستخدم واحد ولكنه يتعثر تحت الضغط المروري، فأنت بحاجة إلى اختبار التحميل، وk6 هو أحد أنظف الطرق للقيام بذلك. يغطي هذا الدليل ماهية k6، وكيفية تثبيته، وكيفية كتابة أول برنامج نصي لك، وكيفية قراءة النتائج، بحيث يمكنك التعامل مع اختبار التحميل كجزء من روتينك العادي لـ اختبار أداء واجهة برمجة التطبيقات (API). وسننظر أيضًا في كيفية ملاءمة k6 جنبًا إلى جنب مع الاختبار الوظيفي في CI، بالاعتماد على وثائق k6 الرسمية حيث تهم التفاصيل.

ما هو k6؟

k6 هو أداة اختبار تحميل مفتوحة المصدر، تتولى Grafana صيانتها الآن. تقوم بكتابة اختبارك كملف JavaScript، ويقوم k6 بتشغيله باستخدام محرك Go سريع، ويضغط على نقاط النهاية الخاصة بك بحركة مرور محاكية. هذا الانقسام مقصود: أنت تقوم بتأليف الاختبارات بلغة يعرفها معظم المطورين بالفعل، ولكن مولد التحميل نفسه يعمل كبرنامج Go مُجمّع، لذا يمكن لآلة واحدة أن تدفع عددًا كبيرًا من المستخدمين الافتراضيين دون اختناق.

تم تصميم k6 لمهمة واحدة ويقوم بها جيدًا: توليد حمل مستدام ومتكرر وقياس كيفية استجابة نظامك. فهو يقدم تقارير عن مئويات زمن الاستجابة، ومعدلات الطلبات، ومعدلات الأخطاء، ويتيح لك تعيين قواعد النجاح/الفشل لهذه الأرقام. هذا التركيز هو المهم. k6 ليس عميل واجهة برمجة تطبيقات، أو أداة توثيق، أو إطار عمل للاختبار الوظيفي. إنه محرك تحميل.

بعض المصطلحات التي ستصادفها باستمرار:

تثبيت k6

يُشحن k6 كملف ثنائي واحد، لذا فإن التثبيت قصير. على نظام macOS باستخدام Homebrew:

brew install k6

على نظام Windows باستخدام Chocolatey:

choco install k6

على Debian أو Ubuntu، أضف مستودع Grafana apt وقم بالتثبيت:

sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg \
  --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" \
  | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6

تأكيد العمل:

k6 version

صورة Docker متاحة أيضًا إذا كنت تفضل عدم تثبيت أي شيء محليًا. تحقق من صفحة التثبيت في الوثائق للحصول على الأوامر الحالية، حيث تتغير تفاصيل الحزمة بمرور الوقت.

أول برنامج نصي لك باستخدام k6

اختبار k6 هو وحدة JavaScript ذات دالة افتراضية. يستدعي k6 تلك الدالة مرة واحدة لكل تكرار، ولكل مستخدم افتراضي. إليك برنامج نصي بسيط يضرب نقطة نهاية واحدة ويتحقق من الاستجابة:

import http from 'k6/http';
import { check, sleep } from 'k6';

export default function () {
  const res = http.get('https://test-api.example.com/users');

  check(res, {
    'status is 200': (r) => r.status === 200,
    'body is not empty': (r) => r.body.length > 0,
  });

  sleep(1);
}

احفظه باسم script.js وقم بتشغيله:

k6 run script.js

بشكل افتراضي، يشغل k6 مستخدمًا افتراضيًا واحدًا لتكرار واحد. تضيف sleep(1) هذه وقفة لمدة ثانية واحدة بين التكرارات، مما يحاكي توقف مستخدم حقيقي بين الإجراءات. بدون النوم، تتكرر كل VU بأسرع ما تسمح به الشبكة، وهو أمر مفيد لاختبارات الإنتاجية الخام ولكنه غير واقعي لمحاكاة سلوك المستخدم.

استدعاءات check() هي تأكيدات غير صارمة. يظهر التحقق الفاشل في الملخص ولكنه لا يوقف التشغيل. هذا مقصود. تحت التحميل الثقيل، تتوقع بعض الإخفاقات، وتريد أن يستمر الاختبار في القياس حتى تتمكن من رؤية مدى سوء الوضع.

المستخدمون الافتراضيون (VUs)، المراحل، والعتبات

يشغل البرنامج النصي الأول مستخدمًا واحدًا مرة واحدة. يهدف اختبار التحميل الحقيقي إلى التحكم في عدد المستخدمين الذين يضغطون على واجهة برمجة التطبيقات (API) الخاصة بك ومدة ذلك. يمكنك تهيئة ذلك باستخدام كائن options المصدر.

الشكل الأبسط يحدد عددًا ثابتًا من المستخدمين الافتراضيين ومدة:

export const options = {
  vus: 50,
  duration: '30s',
};

هذا يشغل 50 مستخدمًا افتراضيًا لمدة 30 ثانية. والأكثر فائدة هو ملف تعريف تصاعدي مبني من مراحل، والذي يتيح لك محاكاة تصاعد حركة المرور، وثباتها، ثم انخفاضها:

export const options = {
  stages: [
    { duration: '1m', target: 100 },  // ramp up to 100 VUs
    { duration: '3m', target: 100 },  // hold at 100 VUs
    { duration: '1m', target: 0 },    // ramp down to 0
  ],
  thresholds: {
    http_req_duration: ['p(95)<500'],   // 95% of requests under 500ms
    http_req_failed: ['rate<0.01'],     // less than 1% errors
  },
};

العتبات هي المكان الذي يكسب فيه k6 مكانته في CI. إذا فشلت عتبة، يخرج k6 برمز غير صفري. وهذا يعني أن خطوة في المسار يمكن أن تفشل البناء عندما يتجاوز زمن الاستجابة أو معدلات الأخطاء الخط الذي حددته. أنت تقوم بترميز ميزانية أداء كتعليمات برمجية، بنفس الطريقة التي تقوم بها بترميز تأكيد وظيفي.

خريطة سريعة لملفات تعريف التحميل الشائعة والسؤال الذي يجيب عليه كل منها:

الملف الشخصي الهدف ما يخبرك به
Smoke (دخان) حمل صغير، تحقق من تشغيل النص البرمجي الاختبار نفسه صحيح
Load (تحميل) حركة المرور العادية المتوقعة هل يتحمل API الضغط اليومي
Stress (إجهاد) تجاوز الذروة المتوقعة أين يبدأ في الانهيار
Spike (ارتفاع مفاجئ) قفزة حادة ومفاجئة في المستخدمين الافتراضيين هل يمكنه النجاة من زيادة مفاجئة في حركة المرور
Soak (غمر) حمل معتدل على مدار ساعات تسرب الذاكرة، تدهور بطيء

لا تحتاج إلى كل الخمسة. ابدأ باختبارات Smoke و Load. أضف Stress و Spike بمجرد أن تعرف أرقامك العادية. للحصول على مسح أوسع للأساليب والمقاييس الكامنة وراءها، فإن أساسيات اختبار الأداء تنطبق على كل أداة، وليس k6 فقط.

قراءة نتائج k6

عندما ينتهي التشغيل، يطبع k6 ملخصًا في الطرفية. الأسطر الأكثر أهمية:

اقرأ المئويات، وليس المتوسطات. يبدو متوسط وقت الاستجابة البالغ 200 مللي ثانية جيدًا حتى ترى مئوي 99 يبلغ 4 ثوانٍ، مما يعني أن واحدًا من كل مائة مستخدم ينتظر أربع ثوانٍ. هذه الذيل هو المكان الذي يفقد فيه المستخدمون اهتمامهم.

لأي شيء يتجاوز مجرد النظر إلى الطرفية، يمكن لـ k6 بث النتائج إلى مخرجات خارجية. يكتب بتنسيق JSON أو CSV، ويتكامل مع لوحات تحكم Grafana و Prometheus لتحليل مرئي مباشر أثناء التشغيل. هذا الاقتران، k6 مع Grafana، هو سبب رؤيتك للأداة غالبًا باسم "grafana k6". بالنسبة للاختبار لمرة واحدة، يكون ملخص الطرفية كافيًا؛ للمراقبة المستمرة، قم بشحن المقاييس إلى مكان يمكنك رسمها فيه.

أين يتناسب k6، وأين يتناسب Apidog

k6 هو محرك تحميل. يجيب على السؤال "كيف يتصرف نظامي تحت حركة مرور مستمرة". لا يتحقق مما إذا كانت واجهة برمجة التطبيقات (API) الخاصة بك تُرجع البيانات الصحيحة، أو تتطابق مع عقدها، أو تتعامل مع المصادقة بشكل صحيح عبر كل نقطة نهاية. هذه أسئلة اختبار وظيفي وعقود، وهي تحتاج إلى أداة مختلفة.

هذا هو الانقسام الذي يستحق التوضيح. أنت تريد كلا النوعين من الاختبارات في مسار عملك، وهما لا يتنافسان:

الاهتمام الأفضل أن تُعالجه بواسطة ماذا يجيب
تحميل ثقيل مستمر، مئويات على نطاق واسع k6 هل يبقى سريعاً تحت الضغط المروري
الصحة الوظيفية، العقد، المصادقة Apidog هل يعيد الشيء الصحيح
التراجع في CI عند كل التزام Apidog (apidog run) هل كسر هذا التغيير نقطة نهاية
ميزانيات الأداء في CI عتبات k6 هل تجاوز زمن الاستجابة أو الأخطاء حداً معيناً

يتعامل Apidog مع جانب الصحة. يمكنك تصميم أو استيراد واجهة برمجة التطبيقات (API) الخاصة بك، وبناء سيناريوهات اختبار مع تأكيدات مرئية، وتشغيلها في CI باستخدام apidog run، بنفس الطريقة التي تشغل بها برنامج k6 النصي. يوضح دليل Apidog CLI كيفية ربط تلك الاختبارات الوظيفية بمسار العمل. يتضمن Apidog أيضًا ميزات اختبار أداء أخف للفحوصات السريعة، والتي يتم تغطيتها في دليل اختبار أداء API في Apidog، ولكنه ليس مولد تحميل من فئة k6 ولا يحاول أن يكون كذلك.

يبدو سير العمل العملي على النحو التالي. عند كل التزام، يقوم Apidog بتشغيل اختباراتك الوظيفية والعقود لتأكيد أن واجهة برمجة التطبيقات (API) لا تزال تعمل كما ينبغي. وفقًا لجدول زمني أو قبل الإصدار، يقوم k6 بتشغيل ملف تعريف تحميل مقابل بيئة اختبار للتأكد من أن واجهة برمجة التطبيقات (API) تظل سريعة تحت الضغط المروري. بوابة للصحة وبوابة للأداء، كل منهما بالأداة المصممة لها.

إذا كنت تقارن المحركات قبل الالتزام، فإن k6 يجلس بجانب JMeter و Gatling و Locust. يعرض ملخص أدوات اختبار التحميل وهذه مقارنة بدائل Locust المقايضات إذا غيرت لغة البرمجة أو النطاق اختيارك.

الأسئلة الشائعة

هل k6 مجاني؟

نعم. k6 مفتوح المصدر بموجب ترخيص AGPL، والبرنامج الثنائي مجاني للتشغيل محليًا بدون حد أقصى للمستخدمين الافتراضيين يتجاوز إمكانيات جهازك الخاص. تقدم Grafana أيضًا k6 Cloud، وهي خدمة مدفوعة لتشغيل اختبارات موزعة كبيرة وتخزين النتائج، ولكنك لست مضطرًا لاستخدامها أبدًا. تغطي الأداة الأساسية معظم الفرق. إذا كنت ترغب في استعراض الخيارات المجانية الأخرى أولاً، فإن نظرة عامة على أدوات اختبار التحميل تسرد ما تقدمه كل أداة.

هل أحتاج إلى معرفة JavaScript لاستخدام k6؟

أنت بحاجة إلى معرفة أساسيات JavaScript، وليس خبرة عميقة. معظم برامج k6 النصية عبارة عن دالة افتراضية، وبعض استدعاءات http.get أو http.post، وعدد قليل من عمليات التحقق، وكائن خيارات. إذا كنت تستطيع قراءة الأمثلة في هذا الدليل، فيمكنك كتابة اختبار يعمل. لا توجد خطوة بناء ولا إطار عمل للتعلم، فقط واجهة برمجة تطبيقات k6.

ما الفرق بين k6 و Apidog لاختبار الأداء؟

k6 هو مولد تحميل مخصص ومصمم لقيادة حركة مرور ثقيلة ومستمرة وتقديم تقارير عن المئويات على نطاق واسع. Apidog هو منصة واجهة برمجة تطبيقات (API) تركز على التصميم والاختبار الوظيفي واختبار العقود، مع ميزات اختبار أداء أخف للفحوصات السريعة. استخدم k6 عندما تحتاج إلى تحميل حقيقي وميزانيات أداء CI. استخدم Apidog للصحة، والتحقق من العقود، وتشغيل الاختبارات الوظيفية عند كل التزام. إنهما يحلان مشكلات مختلفة ويعملان بشكل جيد معًا.

هل يمكنني تشغيل k6 في CI/CD؟

نعم، وهذا إعداد شائع. يخرج k6 برمز غير صفري عندما تفشل عتبة، لذا يمكن لأي نظام CI أن يفشل البناء عند تراجع في الأداء. قم بتشغيل k6 run script.js كخطوة في المسار، وجهه إلى بيئة اختبار، واضبط العتبات لزمن الاستجابة p95 ومعدل الخطأ. ادمجه مع الاختبارات الوظيفية من apidog run بحيث يحصل كل التزام على فحص صحة وفحص تحميل.

الخلاصة

يوفر لك k6 طريقة نظيفة وقابلة للبرمجة لوضع حمل حقيقي على واجهة برمجة التطبيقات (API) الخاصة بك وقياس ما يحدث. قم بتثبيت الملف الثنائي، واكتب ملف JavaScript قصيرًا، واضبط المستخدمين الافتراضيين والمراحل، وأضف العتبات، واقرأ المئويات. هذه هي الدورة الكاملة. حافظ على فصل اختبار التحميل عن الاختبار الوظيفي، حيث يجيب كل منهما على سؤال مختلف، وقم بتشغيل كليهما في CI حتى لا يمر أي شيء دون ملاحظة.

لجانب الصحة في هذا الانقسام، يتيح لك Apidog تصميم واجهة برمجة التطبيقات (API) الخاصة بك واختبارها ومحاكاتها وتوثيقها في مكان واحد، ثم تشغيل الاختبارات الوظيفية في CI باستخدام apidog run. قم بتنزيل Apidog لربط الثقة على مستوى العقد مع تشغيلات تحميل k6 الخاصة بك.

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات