المتغيراتتصفَّح الأدلة

المتغيرات

صيغة {{token}}، ومن أين تأتي القيم وبأي ترتيب، والتقاط القيم أثناء التشغيل، ولماذا يُفشِل الرمز الذي لا قيمة له الخطوةَ فورًا.

الاختبار الذي يثبِّت في خطواته https://staging.example.com وكلمة مرور لا يعمل إلا في مكان واحد، وفي يوم واحد. والمتغيرات هي ما يجعل اختبار Vera قابلًا للنقل: اكتب {{baseUrl}} و{{password}} في الخطوة، ودع التشغيل يعوِّضهما بقيمتيهما.

الصيغة

حيثما أخذت الخطوة نصًّا، يُعوَّض {{name}} بقيمته وقت التشغيل:

goto    {{baseUrl}}/checkout
fill    [data-testid=email]     {{email}}
fill    [data-testid=password]  {{password}}
assert  text  [data-testid=greeting]  contains  {{firstName}}

والأسماء من حروف الكلمات وحدها — فـ {{base_url}} و{{baseUrl2}} صالحان، أما {{base-url}} و{{user.email}} فلا.

ويبلغ التعويض كل حقل نصي في الخطوة، ومعه قيم خريطة headers في خطوة api-request — فتستطيع ترويسة المصادقة أن تحمل رمزًا التُقط في وقت سابق من التشغيل:

api-request  GET  {{apiBase}}/me
             headers: Authorization: Bearer {{token}}

الرمز الذي لا قيمة له يُفشِل الخطوة

إن لم تكن لـ {{name}} قيمة، فلن تكتب Vera النص الحرفي {{name}} في الصفحة. بل تفشل الخطوة فورًا برسالة تسمِّي المتغير الذي لم تُضبط له قيمة.

وهذا اختيار مقصود. فكتابة {{password}} في حقل كلمة المرور تنتهي بفشل في تسجيل الدخول، أو خطأ في التحقُّق من الحقل، أو مهلة تنقضي بعد ثلاث خطوات — فتذهب تبحث عن عِلّة في التطبيق، والناقص في الحقيقة متغير.

من أين تأتي القيم

تُحسم بهذا الترتيب، واللاحق يغلب السابق:

  1. متغيرات المشروع — القيم الافتراضية، تُضبط على المشروع.
  2. متغيرات البيئة — البيئة المسمّاة (staging، production) تتجاوز قيم المشروع للأسماء نفسها، وهذا ما يجعل اختبارًا واحدًا يعمل مقابل أكثر من نشر.
  3. بيانات اعتماد الدور النشط — يُدمج {{email}} و{{password}} من دور المصادقة الذي يستعمله التشغيل، فتملأ خطوات تسجيل الدخول المولَّدة بالذكاء الاصطناعي والمسجَّلة بيانات حقيقية بدل أن تختلقها. ومتغير المشروع الصريح الذي يحمل الاسم نفسه يغلب هذا المصدر.
  4. القيم الملتقطة أثناء التشغيل — كل ما وضعته خطوة extract أو api-request في متغير، متاحًا لكل خطوة بعدها.

وفي السلسلة العابرة للمشاريع يكون الترتيب: المشروع < السلسلة < المتراكم، فالقيمة الملتقطة في المقطع الأول تتجاوز قيمة البداية الخاصة بالسلسلة في المقطع الثاني.

التقاط القيم أثناء التشغيل

تأخذ extract شيئًا من الصفحة؛ وتأخذه api-request من استجابة JSON. وكلتاهما تكتب في خريطة المتغيرات لتقرأها الخطوات اللاحقة:

1  goto         /orders/new
2  click        [data-testid=submit]
3  extract      [data-testid=order-id]  →  orderId
4  api-request  GET  {{apiBase}}/orders/{{orderId}}   →  status  (json: $.status)
5  assert       variable  status  equals  confirmed

وهذا هو النمط الذي يدع اختبار المتصفح يتحقق من شيء لا تعرضه الواجهة أبدًا — فالخطوة 5 تتحقق مما سجَّلته الخلفية فعلًا، لا مما ادّعته الصفحة.

القيم الحساسة

المتغير الموسوم حسّاسًا يُحجب عند التخزين: يظهر *** في نتائج الخطوات وفي لقطة متغيرات تشغيل السلسلة، بينما تُستعمل قيمته الحقيقية في الذاكرة للتعويض. فيمكن مشاركة سجلّ التشغيلات دون تسريب رمز.

وبيانات الاعتماد المضبوطة على مشروع أو على دور مصادقة تُخزَّن مع المشروع، وتُعامَل حسّاسةً في كل مكان.

النطاق

متغيرات المشروع والبيئات خاصة بكل مشروع. أما القيم الملتقطة في تشغيل فتعيش مدة ذلك التشغيل وحده — فلا شيء تلتقطه extract ينتقل إلى التشغيل التالي، وبهذا تبقى التشغيلات مستقلة ويمكن إعادتها بأي ترتيب.

انظر أيضًا