الخلاصة أولًا
-
اختر Selenium إذا كنت بحاجة إلى تحكّم دقيق، أو إلى تغطية متصفحات أو منصات غير معتادة، أو كنت تعمل داخل منظومة مبنية أصلًا حول WebDriver.
-
اختر TestSprite إذا كان العائق هو تحديد ما ينبغي اختباره وإبقاء مجموعة الاختبارات حيّة، خصوصًا حين يأتي جزء كبير من الشيفرة من وكيل برمجي.
-
شغّل الاثنين معًا إذا كانت لديك مجموعة اختبارات Selenium يثق بها الناس. أبقِ عليها، وأضِف تحقّق الوكيل من أجل الاتساع الذي لا يملك أحد وقتًا لكتابته.
جنبًا إلى جنب
| المحور | Selenium | TestSprite |
|---|---|---|
| ما هو | معيار لأتمتة المتصفحات مع واجهات ربط بلغات برمجة عديدة | وكيل يخطّط الاختبارات ويشغّلها ويحلّل نتائجها على التطبيق الحي |
| من يكتب الاختبارات | مهندسوك، بلغات Java وPython وC# وJavaScript وغيرها | تُولَّد من مصادرك وتُنقَّح بلغة طبيعية |
| التحكّم في الخطوة الواحدة | كامل. أنت من يحدّد كل تفاعل | الخطوات نوايا، فتقايض الدقة بالمتانة |
| عند تغيّر الـ UI | تتعطّل المحدِّدات ويتولّى أحدهم إصلاحها | التغييرات الشكلية تمرّ عادةً دون كسر |
| مدى تغطية المتصفحات والمنصات | الأوسع في القطاع، بما في ذلك الأهداف القديمة | مسارات المتصفحات الحديثة على تطبيقك المنشور |
| الكلفة المستمرة | الكتابة إضافةً إلى الصيانة، وتنمو مع نمو المجموعة | المراجعة والتنقيح، وتنمو بوتيرة أبطأ |
| الأضعف في | الاتساع. لا تغطّي إلا ما كتبه أحدهم | التحكّم الدقيق في تفاعل بعينه |
أين يبقى Selenium هو الجواب الصحيح
متطلبات تغطية غير معتادة. متصفحات قديمة، أو سلوك محدَّد لمشغّل بعينه، أو أهداف مدمجة. لا شيء آخر يقترب من هذا المدى.
تسلسلات حتمية. حين يكون الترتيب الدقيق للتفاعلات جزءًا من العقد ولا يجوز أن ينحرف أبدًا.
شبكة تشغيل قائمة. البنية التحتية والمهارات والأعراف التي تراكمت عبر سنوات هي أصل تملكه، لا عبء موروث.
أين يبلغ هذا النموذج حدّه
الحدّ هنا مسألة حساب. كل اختبار يكتبه إنسان، وعدد الأشخاص ثابت بينما عدد الميزات ليس كذلك. وتظهر علامتان أولًا: تتركّز التغطية على المسارات التي كان من الممتع كتابتها بدلًا من المسارات التي تتعطّل فعلًا، وترتفع حصة الصيانة من كل سبرنت حتى يقترح أحدهم حذف الاختبارات المتذبذبة.
ما تكلّفه الهجرة فعليًا
الفرق التي تقرّر الانتقال عن Selenium تستهين عادةً بأمر وتبالغ في تقدير أمر آخر.
ما يُستهان به: الشبكة ليست بنية تحتية فحسب، بل مجموعة افتراضات مغروسة في كل اختبار. مهلات زمنية مضبوطة على زمن استجابتها، وتوازٍ مضبوط على سعتها، ومعالجة للقطات الشاشة مضبوطة على تخزينها. وهذه الافتراضات لا تنتقل معك، وتبقى غير مرئية حتى أول تشغيل في مكان آخر.
ما يُبالَغ في تقديره: الاختبارات نفسها. معظم المجموعات فيها نواة من عشرين أو ثلاثين مسارًا يعتمد عليها الناس فعلًا، وذيل طويل لم ينظر فيه أحد منذ سنة. ترحيل النواة يستغرق أسبوعًا، أما قرار التخلي عن الذيل فهو ما يستغرق ثلاثة اجتماعات، وهو في الغالب القرار الصحيح.
ولهذا فإن تشغيل أداة إلى جانب ما لديك أفضل من الترحيل. فأنت تكتشف أي المسارات كان يحمل ثقلًا حقيقيًا حين ترى أيّها ينتبه أحد إلى صمته.
تشغيل الاثنين معًا
قسّم العمل بحسب من قرّر أن الاختبار ينبغي أن يوجد. المسارات المحدَّدة عن قصد تبقى في Selenium، أما الانحدار الواسع والتحقق من التغييرات الآتية من وكيل برمجي فيذهبان إلى الوكيل. ويعمل الاثنان من خط الأنابيب نفسه دون أن يعلم أحدهما بالآخر.
إن كنت في مرحلة التقييم، فاكسر شيئًا عمدًا
أدخِل انحدارًا حقيقيًا، مثل زر حفظ لم يعد يحفظ البيانات، وراقب ما تبلّغ عنه كل أداة. ثلاثة أسئلة: هل تفشل؟ وهل يسمّي الفشلُ الانحرافَ الفعلي؟ وهل يستطيع الشخص أو الوكيل الذي سيصلحه أن يبدأ من ذلك المخرَج دون إعادة استنتاج القصة؟ والأداة التي تبلّغ عن نجاح في تشغيل لم يصل أصلًا إلى تأكيداته تكون قد رسبت في الاختبار الوحيد الذي يهم.
مساران، والاختيار بينهما يتعلق في جوهره بمن يملك خط الأنابيب. فربط GitHub App من لوحة التحكم لا يتطلب أي تغيير في مستودعك على الإطلاق، لأنه يتفاعل مع النشر الذي يُصدره بناؤك أصلًا. أما إضافة خطوة GitHub Actions فتضع الفحص داخل المستودع حيث يُراجَع كسائر عناصر البناء؛ والأوامر الحالية موجودة في مستودع CLI.
ما الذي يضيفه TestSprite إلى فريق يعمل بـ Selenium
تغطية لا تستهلك وقت الكتابة. تُولَّد الحالات من منتجك وتُنقَّح بلغة بسيطة، فلا يبقى الاتساع محدودًا بعدد المهندسين الذين يمكنك تفريغهم لكتابة الاختبارات.
ويظهر فارقان آخران في الاستخدام اليومي. فالخطوات نوايا لا محدِّدات، ومن ثَمّ فإن إعادة تصميم لا تغيّر شيئًا وظيفيًا لن تحوّل المجموعة إلى اللون الأحمر، وهو ما يزيل أكبر مصدر منفرد للصيانة. كما يعود الفشل في صورة وصف لما جرت محاولته، وما فعله التطبيق، وأين افترق الاثنان، بحيث يصلح لوكيل برمجي كما يصلح لإنسان.
وتبقى شبكتك ومجموعة اختباراتك الحالية كما هي تمامًا. والنتيجة العملية أن المسارات التي لم يجد أحد وقتًا لأتمتتها تصبح مغطاة، بينما تظل المسارات التي كتبها فريقك عن قصد تحت سيطرتك.
هل صار Selenium متقادمًا؟
لا. فهو الطبقة الأساسية لجزء كبير من القطاع، ولا يزال يملك أوسع مدى متاح على مستوى المنصات. الضغط الواقع عليه يتعلق بالسعة لا بالقدرة.
هل علينا الترحيل؟
لا، والترحيل الشامل نادرًا ما يكون مقايضة جيدة. أضِف تغطية في طبقة مختلفة بدلًا من نقل ما يعمل أصلًا.
وماذا عن اختبارات Selenium المتذبذبة؟
معظم التذبذب سببه هشاشة المحدِّدات أو افتراضات التوقيت. والخطوات القائمة على النية تزيل حصة كبيرة من السبب الأول. ولا يصلح أيٌّ من النهجين بيئةً غير مستقرة فعلًا.
هل يستطيع TestSprite تصدير شيفرة نشغّلها في شبكتنا؟
يمكن طباعة الشيفرة المصدرية للاختبار المولَّد أو كتابتها في ملف. تعامل معها كلقطة لمسار واحد، لا كالأثر الذي تصونه بيدك.
أيّهما أرخص؟
قارن الكلفة الإجمالية. Selenium مجاني، أما وقت الهندسة اللازم لكتابة المجموعة وصيانتها فليس مجانيًا. والجواب يتوقف كليًا تقريبًا على ما إذا كانت لديك تلك السعة.
تحكّم في مقابل سعة، لا قديم في مقابل جديد.
يمنحك Selenium تحكمًا كاملًا ويطلب منك الكتابة والصيانة. أبقِ عليه للمسارات التي حدّدها فريقك عن قصد ولمدى المنصات غير المعتاد، وأضِف تحقّق الوكيل من أجل الاتساع الذي لا يملك أحد وقتًا لكتابته.