كيفية تمرير البيانات بين خطوات الاختبار في Apidog

Oliver Kingsley

Oliver Kingsley

6 أغسطس 2025

كيفية تمرير البيانات بين خطوات الاختبار في Apidog

Apidog للمؤسسات

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

SSO و RBAC

متوافق مع SOC 2

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

عند تصميم سير عمل الاختبارات الآلية في Apidog، ستستخدم أنواعًا مختلفة من خطوات الاختبار—مثل طلبات واجهة برمجة التطبيقات (API)، استعلامات قواعد البيانات، حلقة For، حلقة ForEach، البرامج النصية (Scripts)، والمزيد.

أنواع خطوات الاختبار

غالبًا ما تحتاج البيانات التي يتم إنتاجها في خطوة ما إلى استخدامها في خطوة لاحقة. وهذا يخلق تدفقًا منطقيًا حيث البيانات هي المحرك للعملية، والخطوات مترابطة.

على سبيل المثال، قد تقوم بما يلي:

وهذا يثير سؤالاً هامًا:

كيف يمكنك الإشارة بشكل صحيح إلى البيانات من الخطوات السابقة (المنبع) في الخطوات اللاحقة (المصب)؟

آليتان لتمرير البيانات في Apidog

في الاختبارات الآلية لـ Apidog، توجد طريقتان رئيسيتان لتمرير البيانات بين خطوات الاختبار المختلفة:

1. استرداد بيانات الخطوة السابقة عبر "القيم الديناميكية" (Dynamic Values)

يمكنك الإشارة مباشرة إلى مخرجات خطوة سابقة (منبع) في خطوة لاحقة (مصب) باستخدام ميزة "القيمة الديناميكية". يتيح لك هذا جلب البيانات أثناء التنفيذ دون الحاجة لتخزينها.

استرداد بيانات الخطوة السابقة عبر "القيم الديناميكية" في اختبار Apidog الآلي

2. تخزين المتغيرات وإعادة استخدامها

يمكنك استخلاص البيانات الهامة من خطوة سابقة (منبع) وتخزينها كمتغير. يمكن بعد ذلك إعادة استخدام هذه المتغيرات في أي خطوة لاحقة.

إتقان هاتين الطريقتين لتمرير البيانات هو المفتاح لبناء سير عمل آلي فعال ومدفوع بالبيانات في Apidog.

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

استخلاص واستخدام بيانات استجابة نقطة النهاية (Endpoint)

فهم بيانات استجابة نقطة النهاية (Endpoint Response Data)

في الاختبارات الآلية، عادةً ما تُرجع طلبات واجهة برمجة التطبيقات (API) استجابات JSON منظمة، والتي غالبًا ما تكون بمثابة مدخلات لخطوات الاختبار اللاحقة.

على عكس أنواع الخطوات الأخرى، تميل استجابات نقاط النهاية إلى أن تكون أكثر تعقيدًا — حيث تتضمن غالبًا كائنات ومصفوفات متداخلة.

كيفية استخلاص البيانات من استجابة نقطة النهاية

هناك طريقتان رئيسيتان لاستخلاص وتمرير بيانات استجابة نقطة النهاية بين خطوات الاختبار:

الطريقة الأولى: الإشارة إلى القيمة الديناميكية (Dynamic Value Reference)

استخدم "القيم الديناميكية" للإشارة مباشرة إلى البيانات من الخطوات السابقة:

الطريقة الثانية: استخلاص البيانات كمتغيرات

يمكنك أيضًا استخدام ميزة "استخلاص المتغيرات" (Extract Variables) في معالجات ما بعد نقطة النهاية (endpoint post processors) لاستخلاص حقول محددة من الاستجابة كمتغيرات.

على سبيل المثال، لاستخلاص id المنتجات في استجابة:

في الخطوات اللاحقة، قم بالإشارة إليه ببساطة باستخدام {{products_id}}.

كيفية استخدام البيانات المستخلصة من استجابة نقطة النهاية

بمجرد استخلاص البيانات من استجابة واجهة برمجة التطبيقات (API)—سواء باستخدام "القيم الديناميكية" أو "المتغيرات المستخلصة"—يمكنك استخدام تلك البيانات في الخطوات اللاحقة بعدة طرق:

1. استخدام البيانات في طلبات نقطة النهاية (endpoint requests)

استخدام البيانات المستخلصة في طلبات واجهة برمجة التطبيقات (API)

2. استخدام البيانات في عمليات قاعدة البيانات

يمكنك استخدام استجابة واجهة برمجة التطبيقات (API) كمدخل في استعلام قاعدة بيانات. كلتا الطريقتين تعملان:

SELECT * FROM products WHERE id = '{{$.1.response.body.products[0].id}}'

استخدم القيم الديناميكية للإشارة إلى بيانات استجابة واجهة برمجة التطبيقات مباشرة في استعلام SQL:

SELECT * FROM products WHERE id = '{{products_id}}'

3. استخدام البيانات في حلقة For

لتكرار الخطوات بناءً على طول مصفوفة من استجابة واجهة برمجة التطبيقات (API):

{{$.1.response.body.products.length}}

يحدد هذا عدد تكرارات الحلقة.

استخدام البيانات في حلقة For

4. استخدام البيانات في حلقات ForEach

إذا كنت ترغب في التكرار عبر كل عنصر في مصفوفة تم إرجاعها بواسطة نقطة نهاية:

استخدام البيانات في حلقات ForEach عبر طريقة القيمة الديناميكية

5. استخدام البيانات في البرامج النصية (scripts)

لاستخدام البيانات من الخطوات السابقة داخل برنامج نصي، استخدم طريقة pm.variables.get(). إليك كيفية ذلك:

const products = pm.variables.get("$.1.response.body.products")
استخدام البيانات المستخلصة في البرامج النصية عبر طريقة القيمة الديناميكية

احصل على قيمة متغير مؤقت:

const products = pm.variables.get("products") 

احصل على قيمة متغير بيئة:

const products = pm.environment.get("products") 

احصل على قيمة متغير عام:

const products = pm.globals.get("products")
💡
في البرامج النصية، لا يمكنك استخدام صيغة الاستيفاء (interpolation syntax) مثل {{products}} مباشرة. بدلاً من ذلك، يجب عليك استرداد قيم المتغيرات باستخدام الطرق المناسبة المذكورة أعلاه.

استخلاص واستخدام نتائج استعلام قاعدة البيانات

فهم بيانات قاعدة البيانات

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

نتائج استعلام قاعدة البيانات في Apidog

على عكس استجابات نقاط النهاية، لا يمكن الوصول إلى البيانات من خطوات قاعدة البيانات مباشرة باستخدام المتغيرات الديناميكية. يجب عليك أولاً استخلاص القيم في متغيرات.

كيفية استخلاص البيانات من قاعدة البيانات

بعد تشغيل استعلام SQL في خطوة قاعدة بيانات، سيقوم Apidog تلقائيًا بتحليل الاستجابة إلى بيانات منظمة، مثل هذا:

[
  {
    "id": "1000",
    "title": "Title 1",
    "description": "Description for Title 1"
  }
]

يمكنك بعد ذلك استخدام JSONPath لاستخلاص حقول محددة وحفظها كمتغيرات.

على سبيل المثال:

استخدام JSONPath لاستخلاص حقول محددة وحفظها كمتغيرات

كيفية استخدام البيانات المستخلصة من قاعدة البيانات

1. استخدام البيانات في طلبات نقطة النهاية (endpoint requests)

إذا كان استعلام قاعدة البيانات الخاص بك يُرجع معرفًا وقمت بحفظه كمتغير (products_id)، يمكنك استخدامه مباشرة في طلب نقطة نهاية لاحق:

استخدام البيانات المستخلصة من قاعدة البيانات في طلبات نقطة النهاية

2. استخدام البيانات في حلقات ForEach

إذا كان استعلامك يُرجع قائمة من السجلات، وترغب في معالجة كل سجل على حدة، يمكنك استخدام المصفوفة بأكملها كمصدر لحلقة ForEach:

الفرضية هي أنك تحفظ المصفوفة بأكملها عند استخلاص المتغيرات في عمليات قاعدة البيانات، على سبيل المثال:

3. استخدام البيانات في البرامج النصية (scripts)

لاستخدام متغيرات قاعدة البيانات المستخلصة في برنامج نصي، استخدم نفس الطريقة كما هو الحال مع المتغيرات الأخرى.

احصل على قيمة متغير مؤقت:

const products = pm.variables.get("products")

احصل على قيمة متغير بيئة:

const products = pm.environment.get("products")

احصل على قيمة متغير عام:

const products = pm.globals.get("products")

استخلاص واستخدام البيانات من حلقات For

كيف تعمل حلقات For؟

تُستخدم حلقة For لتكرار مجموعة محددة من الإجراءات عدة مرات. تعمل بناءً على عدد محدد من التكرارات.

يمكنك إما تعيين عدد ثابت من مرات التكرار، أو استخدام قيمة ديناميكية مثل طول مصفوفة .length التي تم إرجاعها من خطوة سابقة. على سبيل المثال: {{$.1.response.body.products.length}}:

ملاحظة: على عكس الخطوات الأخرى التي تُخرج البيانات، فإن حلقة For نفسها لا تُرجع البيانات مباشرة. إنها توفر فقط قيمة فهرس (تبدأ من 0) لإظهار عدد مرات تنفيذ الحلقة.

كيفية استخلاص البيانات من حلقات For

أثناء عملية التنفيذ، يمكنك الوصول إلى فهرس الحلقة الحالي باستخدام صيغة المتغير الديناميكي: {{$.9.index}}

كيفية استخدام البيانات المستخلصة من حلقات For

1. استخدام البيانات في البرامج النصية (scripts)

إذا كنت ترغب في استخدام معلومات متعلقة بالحلقة في برنامج الاختبار النصي الخاص بك، يمكنك استخدام pm.variables.get() للحصول على الفهرس الحالي:

// Get the current loop index
const index = pm.variables.get("$.7.index");
استخدام بيانات حلقات For المستخلصة في البرامج النصية

2. استخدام البيانات مع مصادر بيانات أخرى

حالة استخدام شائعة لـ حلقة For هي معالجة البيانات من الخطوات السابقة—مثل التكرار عبر مصفوفة والتعامل مع كل عنصر:

// Get the array from a previous step
const products = pm.variables.get("$.1.response.body.products");

// Get the current loop index
const index = pm.variables.get("$.7.index");

// Access the current item in the array using the index
console.log(products[index]);

يتيح لك هذا إجراء عمليات مجمعة على كل عنصر في المصفوفة خلال كل تكرار للحلقة.

استخلاص واستخدام البيانات من حلقة ForEach

كيف تعمل حلقة ForEach؟

تم تصميم حلقة ForEach خصيصًا لبيانات المصفوفات. فهي تتكرر تلقائيًا عبر كل عنصر في المصفوفة وتنفذ نفس المجموعة من العمليات.

الفرق الرئيسي بين حلقة ForEach و حلقة For هو أن حلقة ForEach تستخلص تلقائيًا البيانات الكاملة لعنصر المصفوفة الحالي في كل تكرار، مما يجعلها قابلة للوصول مباشرة في خطواتها الفرعية.

الوصول إلى البيانات في حلقة ForEach

ضمن حلقة ForEach، يقوم النظام تلقائيًا بإنشاء متغيرين خاصين:

ملاحظة: يشير الرقم 4 إلى معرف خطوة حلقة ForEach. في سير عملك الفعلي، استبدل هذا بمعرف الخطوة الصحيح من عمليتك.

حالات الاستخدام الشائعة لبيانات حلقة ForEach

1. استخدام البيانات في طلبات نقطة النهاية (endpoint requests)

تعتبر حلقات ForEach مثالية للتعامل مع عمليات البيانات المجمعة. على سبيل المثال، إذا كان لديك مصفوفة من العناصر، يمكنك إرسال طلب نقطة نهاية تلقائيًا لكل عنصر في المصفوفة. خلال كل حلقة، يتم إعادة استخدام نفس قالب الطلب، ولكن يتم ملؤه ببيانات مختلفة، مثل {{$.4.element.id}}.

2. استخدام البيانات في عمليات قاعدة البيانات

يمكنك استخدام البيانات من عنصر الحلقة الحالي لتشغيل استعلامات قاعدة البيانات أو إدراج صفوف متعددة.

مثال: استعلام قاعدة البيانات باستخدام حقل العنصر الحالي

SELECT * FROM products WHERE id = '{{$.4.element.id}}' 

يمكن الوصول إلى التعبير {{$.4.element.id}} باستخدام ميزة القيمة الديناميكية.

إدراج حقول متعددة من العنصر الحالي في جدول:

INSERT INTO products (id, title) VALUES ('{{$.4.element.id}}', '{{$.4.element.title}}') 

3. استخدام البيانات في البرامج النصية (scripts)

إذا كنت بحاجة إلى معالجة البيانات من الحلقة بشكل أكبر في برنامج نصي مخصص، يمكنك استخدام طريقة pm.variables.get() لاسترداد القيم:

// Get the current element
const item = pm.variables.get("$.4.element");

// Get the current index
const index = pm.variables.get("$.4.index");

استخلاص واستخدام البيانات من البرامج النصية (Scripts)

كيف تعمل بيانات البرامج النصية (Script Data)

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

كيفية استخلاص البيانات من برنامج نصي

يمكنك حفظ القيم في أنواع مختلفة من المتغيرات هكذا:

// Get JSON response data
// 1. From the current endpoint response
// const currentData = pm.response.json();

// 2. Or get it from a previous step using a dynamic value
const preData = pm.variables.get("$.1.response.body");

// Save to environment variables
pm.environment.set('products', preData.products);
pm.environment.set('products_id', preData.products[0].id);

// Save to global variables
pm.globals.set('products', preData.products);

// Save to temporary variables (valid only during this run)
pm.variables.set('products', preData.products);

بمجرد استخلاص المتغيرات وتعيينها، يمكنك الإشارة إليها في الخطوات اللاحقة باستخدام الصيغة {{variableName}}.

كيفية استخدام البيانات المستخلصة من البرامج النصية (Scripts)

1. استخدام البيانات في طلبات نقطة النهاية (endpoint requests)

يمكن استخدام المتغيرات المعينة في برنامج نصي مباشرة كمعاملات في طلبات نقطة النهاية اللاحقة. على سبيل المثال، إذا قمت بحفظ products_id في البرنامج النصي، يمكنك الإشارة إليه في طلب لاحق هكذا: {{products_id}}.

استخدام البيانات المستخلصة في طلبات واجهة برمجة التطبيقات (API)

2. استخدام البيانات في عمليات قاعدة البيانات

يمكن أيضًا استخدام متغيرات البرنامج النصي لبناء عبارات SQL ديناميكية. على سبيل المثال:

SELECT * FROM products WHERE id = '{{products_id}}'

3. استخدام البيانات في حلقة For

يمكنك استخدام برنامج نصي لإنشاء عدد التكرارات أو القيم الوسيطة الأخرى، وتخزينها كـ "متغيرات مؤقتة"، وتمريرها إلى خطوة حلقة For:

pm.variables.set("loopCount", 5); 

ثم، في إعدادات الحلقة، استخدم {{loopCount}} كعدد التكرارات.

4. استخدام البيانات في حلقات ForEach

يمكنك تخزين مصفوفة كاملة في متغير واستخدامها كمصدر بيانات لـ حلقة ForEach.

مثال:

// Optionally retrieve array from a previous step using dynamic values
// const preData = pm.variables.get("$.1.response.body.products")

const preData = [{id: 1}, {id: 2}, {id: 3}];

// Save to environment variable
pm.environment.set('products', preData);

ثم في حلقة ForEach، عيّن مصدر البيانات إلى {{products}}.

الخلاصة

لبناء سير عمل اختبار آلي فعال، من الضروري فهم كيفية استخلاص واستخدام البيانات من أنواع مختلفة من الخطوات:

من خلال الجمع بين الإشارة إلى القيمة الديناميكية واستخلاص المتغيرات، يمكنك تصميم عملية اختبار مرنة وقوية تعتمد على البيانات.

أفضل الممارسات لتمرير البيانات:

سيجعل اختيار الطريقة الصحيحة بناءً على تعقيد البيانات وتكرار الاستخدام سير عملك أكثر قابلية للصيانة وفعالية.

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

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