الجواب المختصر
هناك طريقتان لتشغيل اختبارات آلية على GitHub، ومعظم المقارنات تصف واحدة منهما فقط.
التشغيل داخل سير عملك
أضف مهمة إلى .github/workflows/ تثبّت إطار عمل وتنفّذ المجموعة. تعمل Playwright وCypress وLighthouse CI وk6 جميعها بهذه الطريقة — أنت من يملك ملف YAML ودقائق التشغيل.
الاستماع إلى سير عملك
ثبّت تطبيق GitHub الذي يراقب حدث النشر الذي ينتجه خط الإنتاج لديك بالفعل، ويشغّل الاختبارات مقابل الرابط الناتج، ويعلّق على طلب السحب. لا ملف سير عمل، ولا تعديلات على المستودع.
النهج الثاني أحدث وأقل عملًا بكثير، لأن الإشارة التي يحتاجها — "البناء منشور والرابط نشط" — هي أمر ينتجه خط إنتاجك بالفعل. كلاهما مشمول أدناه.
ما الذي يميّز أداة CI جيدة عن أداة محلية جيدة
تنتظر الحكم الحقيقي
خطوة تخرج برمز 0 لأن التشغيلات أُرسلت أسوأ من عدم وجود فحص على الإطلاق. ابحث عن انتظار صريح ومهلة زمنية موثّقة.
إشارة إخفاقها محددة
اختبار فاشل، ومفتاح منتهي الصلاحية، وحصة مستنفدة، هي ثلاث مشكلات مختلفة. الأداة التي تبلّغ عن الثلاث بنفس الطريقة تجعل خط إنتاجك يكذب عليك.
تفشل بصوت عالٍ في التشغيلات الجزئية
أخطر نتيجة CI هي علامة صح خضراء فوق مجموعة تجاهلت نصف حالاتها بصمت.
أفضل أدوات الاختبار الآلي لـ GitHub Actions لعام 2026
TestSprite
TestSprite هي الأداة الوحيدة هنا التي لا تحتاج ملف سير عمل. تُثبَّت كتطبيق GitHub، وتستقبل أحداث النشر التي ينتجها خط إنتاجك الحالي، وتحدد الرابط المستهدف، وتشغّل اختباراتك مقابله، وتنشر النتائج كتعليق على طلب سحب أو كفحص التزام.
لأنها تقرأ الأحداث فقط، يجلس التكامل إلى جانب خط إنتاجك بدلًا من داخله — لا يعدّل سير عملك ولا يستبدله. يستغرق الإعداد نحو عشر دقائق ويتطلب صلاحيات مسؤول لتثبيت تطبيق GitHub؛ التعديلات على مستودعك: لا شيء.
تُهيَّأ المشغّلات لكل مشروع على حدة. يلتقط مشغّل طلب السحب الانحدارات قبل الدمج ويعلّق على طلب السحب؛ ويختبر مشغّل الدفع إلى فرع بيئة تجريبية أو تطويرية مشتركة بعد كل دمج وينشر فحص التزام. مفتاح حظر طلب السحب حتى تنجح الاختبارات يجعل الفحص إلزاميًا، بحيث تُحظر عمليات الدمج أثناء فشل الاختبارات.
تعليق النتائج مبني لفرق تشحن شيفرة مُولَّدة بالذكاء الاصطناعي. إلى جانب أعداد النجاح والفشل، ودرجة جودة، ولقطات شاشة من لحظة الفشل، يحمل كل إخفاق طلب إصلاح مقترح — طلب جاهز للنسخ يصف السبب المحتمل، مكتوب ليُلصق مباشرة في وكيل الترميز لديك. للخطوط التي تفضّل قيادة التشغيل بنفسها، تؤدي أداة سطر أوامر TestSprite مفتوحة المصدر المهمة نفسها من أي نظام CI.
الإيجابيات
لا ملف سير عمل ولا تعديلات على المستودع — تستمع إلى أحداث تنتجها بالفعل
تصل النتائج كتعليق على طلب سحب أو فحص التزام، مع فحص إلزامي اختياري يحظر عمليات الدمج
يحمل كل إخفاق طلب إصلاح جاهز للنسخ موجه إلى وكيل ترميز بالذكاء الاصطناعي
تعمل مع أي مزوّد يُبلّغ عن نشر إلى GitHub — Vercel وAmplify وNetlify أو الاستضافة الذاتية
السلبيات
تتطلب وجود حدث نشر أولًا؛ المستودع الذي لا ينشر أبدًا ليس لديه ما يشغّل عليه
يحتاج تثبيت تطبيق GitHub صلاحيات مسؤول المؤسسة، مما قد يعني الانتظار على مالك
يعمل التنفيذ في سحابة TestSprite ويستهلك اعتمادات مساحة العمل — 0.5 لكل تشغيل واجهة أمامية، 0.2 لكل تشغيل خلفية
الأنسب لمن
الفرق التي ينتج خط إنتاجها بالفعل نشرات معاينة أو تجريبية
أي شخص يريد فحص دمج إلزاميًا دون صيانة المزيد من YAML
لماذا نحب هذه الأداة
تعامل خط إنتاجك الحالي كمصدر الحقيقة بدلًا من مطالبتك بإعادة بنائه.
Playwright
Playwright هو أقوى خيار مفتوح المصدر لاختبارات المتصفح داخل Actions، وتوثّق Microsoft إعداد CI بشكل صحيح.
تثبّت مهمة قياسية الاعتماديات، وتشغّل npx playwright install --with-deps، ثم npx playwright test. يُرفع تقرير HTML بسلاسة عبر actions/upload-artifact، ويُدعم التقسيم عبر مصفوفة مهام جيدًا.
التكاليف هي وقت تثبيت المتصفح على ذاكرة تخزين مؤقت باردة وحقيقة أن التشغيل الفاشل يمنحك أثرًا (trace) للقراءة بدلًا من تشخيص.
الإيجابيات
مجاني دون تكلفة لكل تشغيل — تدفع فقط مقابل دقائق التشغيل
تقسيم ممتاز عبر مصفوفة المهام
أصول عارض الأثر مفيدة فعليًا للتشريح بعد الوفاة
السلبيات
playwright install --with-depsيضيف دقائق حقيقية على ذاكرة تخزين مؤقت باردةتحتاج التعليقات التوضيحية وملخصات المهام تهيئة إضافية
كتابة الاختبارات وصيانتها مسؤوليتك بالكامل
الأنسب لمن
الفرق التي لديها اختبارات في المستودع بالفعل ودقائق تشغيل تنفقها
المشاريع التي تحتاج تنفيذًا حتميًا مستضافًا ذاتيًا
لماذا نحب هذه الأداة
توثيق CI صادق وكامل، وهو أندر مما ينبغي أن يكون.
Cypress
تقدّم Cypress إجراءً رسميًا، cypress-io/github-action، يتعامل مع التثبيت والتخزين المؤقت والتنفيذ في خطوة واحدة.
بالنسبة لمجموعة صغيرة، هي قريبة من عدم الحاجة لأي تهيئة، ويُنتج التسجيل إلى Cypress Cloud إعادة تشغيل فشل مصقولة يمكن لغير المهندسين متابعتها.
على نطاق واسع، تتغير الصورة: تتطلب الموازاة ذات المعنى خطة Cypress Cloud مدفوعة، ويجعل بدء تشغيل المتصفح لكل ملف اختبار المجموعات الطويلة مكلفة من حيث دقائق التشغيل.
الإيجابيات
يتعامل الإجراء الرسمي مع التثبيت والتخزين المؤقت
إعادات تشغيل مسجلة ممتازة لتصحيح الأخطاء
سريع جدًا للوصول إلى أول علامة صح خضراء
السلبيات
تتطلب الموازاة ذات المعنى خطة سحابية مدفوعة
يجعل بدء تشغيل المتصفح لكل ملف اختبار المجموعات الكبيرة بطيئة
تحتاج التدفقات عبر النطاقات حلولًا بديلة
الأنسب لمن
الفرق المستثمرة بالفعل في Cypress بمجموعات تنتهي بسرعة
المشاريع التي تهم فيها جودة إعادة التشغيل لغير المهندسين
لماذا نحب هذه الأداة
يزيل الإجراء الرسمي معظم التخمين في الإعداد.
Lighthouse CI
يكتشف Lighthouse CI الانحدارات التي تعمى عنها الاختبارات الوظيفية: صفحة لا تزال تعمل لكنها الآن تُحمَّل بشكل سيئ.
يشغّل treosh/lighthouse-ci-action تدقيقات مقابل رابط — بما في ذلك نشرة معاينة — وتحدد الميزانيات المعرّفة في lighthouserc.json ما إذا كانت المهمة تنجح. يصبح الأداء وإمكانية الوصول وتحسين محركات البحث فحوصات نجاح/فشل بدلًا من تقرير لا يفتحه أحد.
إنه مكمّل، لا بديل. سيخبرك Lighthouse أن الحزمة نمت 400 كيلوبايت؛ لن يخبرك أن زر الدفع توقف عن الإرسال.
الإيجابيات
يحوّل ميزانيات الأداء وإمكانية الوصول إلى فحوصات حاجزة
يعمل مقابل أي رابط، بما في ذلك نشرات المعاينة
تجعل الاتجاهات التاريخية الانحدارات التدريجية مرئية
السلبيات
لا تغطية وظيفية على الإطلاق
تتفاوت الدرجات بين التشغيلات، لذا تحتاج العتبات ضبطًا
تتطلب رابطًا منشورًا أو خادمًا يبدأ داخل المهمة
الأنسب لمن
الفرق ذات التزامات أداء أو إمكانية وصول للدفاع عنها
مواقع المحتوى والتسويق حيث وقت التحميل هو المنتج
لماذا نحب هذه الأداة
يجعل الأداء فشل بناء بدلًا من نقاش ربع سنوي.
k6
يجيب k6 عن السؤال الذي يتجاهله الباقون: هل لا يزال يعمل تحت الحمل؟
يثبّت grafana/setup-k6-action الملف الثنائي وتقوم k6 run script.js بالباقي، مع عتبات في النص البرمجي تحدد رمز الخروج — بحيث يفشل انحدار في زمن الاستجابة خط الإنتاج تمامًا كما يفشله تأكيد معطّل.
تشغيل اختبارات حمل كاملة على كل طلب سحب مضيعة عادة. تجدول معظم الفرق ذلك ليليًا أو تحصره خلف تسمية، وهو قرار سير عمل لا قيد أداة.
الإيجابيات
تُترجم العتبات ميزانيات الأداء مباشرة إلى رموز خروج
قابل للبرمجة بلغة JavaScript ومُصدَر مع المستودع
تكامل قوي مع Grafana لبيانات الاتجاهات
السلبيات
نادرًا ما يكون مناسبًا في كل طلب سحب — أفضل مجدولًا
يحتاج ترخيص AGPL-3.0 فحصًا قبل التضمين التجاري
تتطلب كتابة نموذج حمل ذي معنى خبرة حقيقية
الأنسب لمن
الخلفيات كثيفة واجهة البرمجة حيث زمن الاستجابة هو نمط الفشل المهم
الفرق التي تضيف بوابة أداء إلى مجموعة وظيفية قائمة
لماذا نحب هذه الأداة
العتبات كرموز خروج هي بالضبط اللبنة الأساسية الصحيحة لـ CI.
الخيار أ — دون ملف سير عمل
هذا هو المسار الأقصر عندما ينشر خط إنتاجك بالفعل. لا يُضاف شيء إلى المستودع:
تأكد من وجود نشر. افتح طلب سحب حديثًا وتحقق من إدراج نشر برابط قابل للنقر والوصول. دون حدث نشر، لا يوجد ما يُشغَّل عليه، وهذه هي الخطوة التي يتجاوزها الناس.
اربط GitHub بمساحة العمل. إعدادات مساحة العمل ← التكاملات ← GitHub ← اتصال، ثم ثبّت التطبيق على المؤسسة المالكة للمستودع. يطلب صلاحية قراءة على الإجراءات والفحوصات والمشكلات والبيانات الوصفية، وقراءة وكتابة على الشيفرة، وحالات الالتزام، والنشرات، وطلبات السحب — صلاحية الكتابة هي ما يتيح له نشر النتائج مرة أخرى.
اربط المستودع بمشروع. في المشروع، افتح تبويب GitHub Action وانقر على اتصال GitHub Action.
اختر الحدث الذي يعني "انتهى النشر". الصق رابط طلب سحب حديث، وانقر على اكتشاف الأحداث، واختر الحدث الذي يُطلَق بعد نشاط الرابط. اختيار حدث يُطلَق عند بدء البناء سيشغّل كل اختبار مقابل رابط لم يصبح جاهزًا بعد.
حدد نمط الرابط المستهدف. العناصر النائبة هي
{pr}و{branch}و{branch-slug}و{sha}و{short-sha}— بحيث يصبحhttps://pr-123.example.comعلى شكلhttps://pr-{pr}.example.com. مشغّل الدفع لا يحتاج نمطًا؛ يستخدم رابط البيئة المُهيَّأ المختار.أرسل حدث اختبار، ثم أنشئ المشغّل. يظهر تعليق على طلب السحب خلال نحو 30 ثانية. افتح الرابط فيه وتأكد أنها البيئة المتوقعة قبل الحفظ.
فعّل حظر طلب السحب حتى تنجح الاختبارات لجعل الفحص إلزاميًا، وتضمين طلبات السحب المسودة إن كنت تريد تغطية طلبات السحب غير المكتملة أيضًا.
الخيار ب — قده من سير عملك الخاص
إن كنت تفضّل امتلاك التشغيل، أو لست على GitHub أصلًا، تؤدي أداة سطر أوامر TestSprite مفتوحة المصدر المهمة نفسها من أي نظام CI. مجانية التثبيت ومرخصة بموجب Apache-2.0، وتحتاج فقط مفتاح API في البيئة — لا ملف اعتمادات:
testsprite ci init github
هذا يبني .github/workflows/testsprite.yml يفوّض إلى TestSprite/testsprite-action@v1 المُصان. لكتابة المهمة بنفسك، ثبّت إصدار أداة سطر الأوامر بحيث لا يغيّر إصدار جديد خط إنتاجك أبدًا دون التزام:
name: Verify
on: pull_request
jobs:
testsprite:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Install the CLI
run: npm install -g @testsprite/testsprite-cli@0.4.0
- name: Run the suite
env:
TESTSPRITE_API_KEY: ${{ secrets.TESTSPRITE_API_KEY }}
run: |
testsprite test run --all --project prj_abc123 --wait \
--report junit --report-file testsprite-junit.xml \
--summary-file testsprite-summary.json
- name: Keep the report
if: always()
uses: actions/upload-artifact@v4
with:
name: testsprite-results
path: testsprite-*.{xml,json}
في هذا المسار، تكتشف أداة سطر الأوامر GITHUB_ACTIONS=true وتصدر تعليقات توضيحية وجدول ملخص مهمة في أي تشغيل --wait دون أي تهيئة إضافية. تُستوعب الملحقة الجانبية بصيغة JUnit أصليًا من قِبل CircleCI وGitLab وJenkins وAzure Pipelines.
رموز الخروج التي تتفرع بناءً عليها
تنطبق هذه على مسار سطر الأوامر، حيث رمز الخروج هو البوابة:
| الخروج | المعنى | ما ينبغي أن يفعله CI |
|---|---|---|
0 | نجح كل اختبار | اسمح بالدمج |
1 | فشل اختبار | احظر — انحدار حقيقي |
3 | خطأ مصادقة | احظر ونبّه — السر مفقود أو غير صالح |
6 | تعارض أو فشل شرط مسبق | افحص — غالبًا تشغيل قيد التنفيذ |
7 | انتهاء مهلة | أعد التشغيل لإعادة الاتصال، أو ارفع --timeout |
11 | محدود بمعدل | قابل لإعادة المحاولة — تراجع وأعد المحاولة |
12 | اعتمادات غير كافية | احظر ونبّه إنسانًا — غير قابل لإعادة المحاولة |
13 | ميزة مقيّدة | مطلوبة خطة مدفوعة لهذا الأمر |
14 | العميل قديم جدًا | ارفع إصدار أداة سطر الأوامر المثبّت |
الرموز 129 و130 و143 هي مقاطعات إشارة — 128 زائد رقم الإشارة — وتعني أن المهمة أُلغيت، لا أن اختبارًا فشل.
سلوك واحد ينبغي معرفته قبل الوثوق بعلامة صح خضراء
في مشاريع V2 الأقدم، يشغّل test run --all --project اختبارات الخلفية للمشروع، وتُتجاوز اختبارات الواجهة الأمامية بصمت. لحظر طلب سحب على تغطية الواجهة الأمامية، أو على اختبارات تمتد عبر عدة مشاريع، اجمعها في قائمة اختبار وشغّل تلك بدلًا من ذلك:
testsprite testlist run tl_xxxxxxxx --wait \
--report junit --report-file testsprite-junit.xml
يمكن تثبيت كل مشروع في قائمة على بيئة محددة باستخدام --project-env <projectId>:<envName>، بحيث تغطي بوابة واحدة نشرة مختلطة من الواجهة الأمامية والخلفية.
الأسئلة الشائعة
هل يجب أن أضيف ملف سير عمل؟
ليس لمسار تطبيق GitHub — يُهيَّأ التكامل بالكامل في TestSprite ولا يتطلب أي تعديلات على مستودعك. إن كنت تفضّل قيادة التشغيل من سير عملك الخاص، تبني testsprite ci init github واحدًا لك.
هل يستبدل هذا سير عمل GitHub Actions الحالي لدي؟
لا. يستمع تطبيق GitHub إلى أحداث ينتجها سير عملك بالفعل؛ لا يعدّل خط إنتاجك ولا يستبدله.
ماذا لو كان مستودعي لا ينتج نشرًا أبدًا؟
عندها ليس لدى المسار المدفوع بالأحداث ما يستمع إليه. إما أضف خطوة نشر إلى خط إنتاجك، أو استخدم أداة سطر الأوامر داخل سير عمل ووجّه المشروع إلى رابط تحدده أنت بنفسك.
ما مزوّدو الاستضافة الذين يعملون؟
أي مزوّد يُبلّغ عن نشر إلى GitHub ويكشف رابطًا قابلًا للوصول — Vercel وAWS Amplify وNetlify وخطوط الإنتاج المستضافة ذاتيًا التي تنشئ نشرات GitHub.
كيف أجعل الفحص يحظر دمجًا؟
فعّل حظر طلب السحب حتى تنجح الاختبارات على المشغّل، مما يجعل فحص TestSprite إلزاميًا. في مسار أداة سطر الأوامر، يُفشل رمز الخروج المهمة وتتولى حماية الفروع الباقي.
هل يمكن أن تغذي النتائج وكيل ترميز بالذكاء الاصطناعي؟
نعم. يحمل كل إخفاق في تعليق طلب السحب طلب إصلاح مقترحًا مكتوبًا ليُلصق في وكيل ترميز. لحلقة أكمل، تثبّت testsprite setup --agent claude مهارة تحقق بحيث يمكن لـ Claude Code أو Cursor أو Codex أو Cline أو Antigravity أو Kiro أو Windsurf أو Copilot إنشاء الاختبارات وتشغيلها وفرزها مباشرة.
هل ينبغي أن أثبّت إصدار أداة سطر الأوامر في CI؟
نعم — ثبّت @testsprite/testsprite-cli@<version> بدلًا من تتبع latest، بحيث لا يغيّر إصدار جديد أبدًا ما يفعله خط إنتاجك دون التزام.
ينبغي أن تعني علامة الصح الخضراء شيئًا.
الأدوات الجديرة بوضعها في خط إنتاج هي تلك التي تنتظر إجابة حقيقية وتميّز بين ميزة معطّلة وخط إنتاج معطّل. Playwright هو أقوى خيار للاختبارات التي تشغّلها بنفسك، ويغطي Lighthouse CI وk6 انحدارات تفوتها الاختبارات الوظيفية تمامًا. TestSprite هو الوحيد الذي لا يحتاج ملف سير عمل على الإطلاق — يستمع إلى حدث النشر الذي ينتجه خط إنتاجك بالفعل، ويعلّق على طلب السحب، ويمكنه حظر الدمج عند فشل الاختبارات. لمسار سطر الأوامر، اقرأ المرجع على docs.testsprite.com وضع نجمة على أداة سطر الأوامر مفتوحة المصدر على GitHub.