لديك نقطة نهاية GraphQL وتريد اختبار السلوك الفعلي، لا مجرد التأكد من أن الخادم يعمل: هل يعيد استعلام user الحقول التي يستهلكها التطبيق؟ هل تحفظ عملية createOrder طلبًا جديدًا؟ وهل تبقى الاستجابة صحيحة عند تغيير المتغيرات؟ بما أن GraphQL يرسل العمليات إلى عنوان URL واحد عادةً عبر POST، فأنت تحتاج إلى عميل يفهم الاستعلامات والمخطط والمتغيرات، ويتيح لك التحقق من JSON الناتج.
يتعامل Apidog مع GraphQL كنوع طلب أساسي إلى جانب HTTP وgRPC وWebSocket وSSE وSOAP. في هذا الدليل ستنشئ طلب GraphQL، وتجلب المخطط لتفعيل الإكمال التلقائي، وتمرر المتغيرات، وتشغّل mutation لإنشاء طلب، ثم تضيف تحققًا قابلًا للتكرار. يعتمد المثال على API لمتجر إلكتروني. وللتفاصيل النظرية، راجع وثائق GraphQL الرسمية ومقارنة REST وGraphQL.
ما الذي تختبره ولماذا يختلف GraphQL
في REST، تتعامل عادةً مع عدة نقاط نهاية، ولكل نقطة شكل استجابة محدد. أما GraphQL فيوفر نقطة نهاية واحدة ويترك للعميل اختيار الحقول المطلوبة.
لذلك يختلف الاختبار في نقطتين أساسيتين:
- الطلب عبارة عن مستند GraphQL داخل الجسم، لا عنوان URL مختلفًا لكل مورد. بدلًا من:
GET /users/42
ترسل عملية مثل:
user(id: 42) {
...
}
-
رمز HTTP
200 OKلا يعني بالضرورة نجاح العملية. قد يعيد GraphQL حالة200 OKمع مصفوفةerrorsفي الجسم:
{
"data": null,
"errors": [
{
"message": "User not found"
}
]
}
لذلك لا تعتمد على رمز الحالة فقط. يجب أن تتحقق من errors ومن القيم داخل data.
إنشاء طلب GraphQL في Apidog
ابدأ بتنزيل Apidog أو فتحه من المتصفح، ثم افتح مشروعك أو أنشئ مشروعًا جديدًا.
الخطوة 1: أنشئ طلبًا واضبط الجسم على GraphQL
- انقر على
+. - اختر
New Request. - اضبط الطريقة على
POST. - أضف عنوان نقطة نهاية GraphQL:
https://api.yourstore.com/graphql
- افتح قسم
Body. - اختر
GraphQL.
سيظهر محرر يحتوي على حقل Query لكتابة العملية، وحقل للمتغيرات عند الحاجة.
إذا كانت نقطة النهاية محمية، افتح Authorization وأضف رمز Bearer أو آلية التخويل المطلوبة. رغم أن محتوى الجسم هو GraphQL، يبقى الطلب في الأساس طلب HTTP عاديًا.
الخطوة 2: اكتب استعلامًا أوليًا
في تبويب Run، أضف استعلامًا لجلب مستخدم وطلباته:
query GetUserWithOrders {
user(id: "usr_1024") {
id
name
email
orders {
id
total
status
createdAt
}
}
}
هذا الاستعلام يطلب مستخدمًا واحدًا وقائمة طلباته المتداخلة. يجب أن تتطابق أسماء الحقول، مثل email وcreatedAt، مع مخطط API الفعلي.
الخطوة 3: اجلب المخطط لتفعيل الإكمال التلقائي
بدل تخمين أسماء الحقول والأنواع:
- تأكد من تعيين عنوان URL الصحيح.
- انقر على
Fetch Schema. - انتظر حتى ينتهي طلب الاستكشاف (
introspection). - ابدأ كتابة حقل داخل الاستعلام للحصول على اقتراحات صالحة من المخطط.
بعد جلب المخطط، يساعدك المحرر على اكتشاف:
- الحقول المتاحة لكل نوع.
- أنواع الوسائط والمدخلات.
- الحقول المتداخلة الصالحة.
- أخطاء التهجئة قبل إرسال الطلب.
الإكمال التلقائي لا يبدأ تلقائيًا؛ يجب تشغيل
Fetch Schemaيدويًا. إذا كانت بيئة الإنتاج تعطل الاستكشاف لأسباب أمنية، استخدم وثائق API أو مخططًا متاحًا داخليًا. وأعد الجلب بعد أي تعديل على المخطط.
الخطوة 4: شغّل الطلب وافحص بنية الاستجابة
انقر على Send. قد تكون الاستجابة الناجحة بهذا الشكل:
{
"data": {
"user": {
"id": "usr_1024",
"name": "Dana Whitfield",
"email": "dana@example.com",
"orders": [
{
"id": "ord_5001",
"total": 89.9,
"status": "SHIPPED",
"createdAt": "2026-07-01T09:14:00Z"
},
{
"id": "ord_5002",
"total": 12.5,
"status": "PENDING",
"createdAt": "2026-07-12T16:03:00Z"
}
]
}
}
}
توجد نتيجة العملية داخل data. عند كتابة تأكيداتك لاحقًا، استخدم مسارات مثل:
$.data.user.id
$.data.user.orders
ولا تفترض أن القيم موجودة في جذر الاستجابة.
تمرير المتغيرات لجعل الطلب قابلًا لإعادة الاستخدام
تشفير "usr_1024" داخل الاستعلام مناسب للتجربة السريعة، لكنه غير مناسب لاختبار قابل لإعادة الاستخدام. استخدم متغيرات GraphQL لتغيير القيم دون تعديل الاستعلام نفسه. راجع وثائق متغيرات GraphQL للصيغة القياسية.
عدّل الاستعلام كالتالي:
query GetUserWithOrders($userId: ID!) {
user(id: $userId) {
id
name
orders {
id
total
status
}
}
}
ثم أضف القيمة في جسم المتغيرات:
{
"userId": "usr_1024"
}
الآن يمكنك تشغيل العملية للمستخدمين المختلفين بتغيير JSON فقط.
لجعل الطلب يعمل بين البيئات، استخدم متغيرات البيئة في Apidog لعنوان الخادم أو قيم التخويل، مثل:
{{baseUrl}}/graphql
بهذا يمكنك استخدام الاستعلام نفسه في الاختبار أو المرحلة أو الإنتاج، مع تغيير البيئة فقط.
كتابة mutation لإنشاء طلب
تستخدم mutation لتغيير البيانات. لا تحتاج إلى تبويب منفصل: اكتبها في مربع Query نفسه، لكن استخدم الكلمة المفتاحية mutation بدل query.
مثال لإنشاء طلب جديد:
mutation CreateOrder($input: CreateOrderInput!) {
createOrder(input: $input) {
id
total
status
createdAt
}
}
مرر الحمولة عبر المتغيرات:
{
"input": {
"userId": "usr_1024",
"items": [
{
"sku": "TSHIRT-BLK-M",
"quantity": 2
},
{
"sku": "MUG-CERAMIC",
"quantity": 1
}
],
"currency": "USD"
}
}
بعد الضغط على Send، قد تحصل على استجابة مثل:
{
"data": {
"createOrder": {
"id": "ord_5003",
"total": 42.3,
"status": "PENDING",
"createdAt": "2026-07-15T10:22:11Z"
}
}
}
لا تشغّل عمليات الكتابة على الإنتاج أثناء الاختبار. استخدم بيئة اختبار أو مرحلة.
نمط عملي مفيد للاختبار:
- شغّل استعلام المستخدم.
- شغّل
createOrder. - احفظ
idالطلب الناتج. - أعد تشغيل استعلام المستخدم.
- تحقق من ظهور الطلب الجديد ضمن
orders.
تحقق من الاستجابة بدلًا من فحصها يدويًا
الفحص اليدوي مناسب أثناء الاستكشاف، لكن الاختبارات القابلة للتكرار تحتاج إلى تأكيدات تمر أو تفشل تلقائيًا. يمكنك إعداد ذلك في Apidog باستخدام تأكيدات API.
بالنسبة لطلبات GraphQL، أضف هذه التحققات:
- تأكيد أن حالة HTTP تساوي
200. - تأكيد غياب الحقل
errors. - تأكيد القيم المتوقعة داخل
data.
أمثلة لمسارات JSONPath:
$.data.createOrder.status
$.data.createOrder.id
$.data.user.orders
أمثلة للتحقق:
| التحقق | القيمة المتوقعة |
|---|---|
| حالة HTTP | 200 |
errors |
غير موجود |
$.data.createOrder.status |
PENDING |
$.data.createOrder.id |
موجود وغير فارغ |
$.data.user.orders |
الطول أكبر من صفر |
هذا يمنع حالات الفشل الشائعة، مثل استجابة 200 تحتوي على errors، أو نجاح العملية مع بنية استجابة غير متوقعة.
احفظ التدفق في سيناريو اختبار
طلب واحد مع تأكيدات هو اختبار دخان جيد. أما الاختبار الأقوى فهو سيناريو يربط عدة عمليات:
- جلب مستخدم.
- إنشاء طلب جديد.
- استخراج
idمن استجابةcreateOrder. - جلب المستخدم أو الطلب مرة أخرى.
- التحقق من استمرار البيانات الجديدة.
تتيح لك سيناريوهات Apidog تمرير البيانات بين الخطوات وتشغيل التدفق كاملًا بنقرة واحدة. راجع كيفية كتابة سيناريو اختبار باستخدام Apidog لإعداد السيناريو.
اربط التأكيدات بكل خطوة، خصوصًا:
- غياب
errors. - وجود معرف الطلب بعد الإنشاء.
- تطابق حالة الطلب مع القيمة المتوقعة.
- ظهور الطلب في الاستعلام اللاحق.
للمقارنة بين الأساليب المختلفة، راجع REST مقابل GraphQL مقابل gRPC وأدوات اختبار ومحاكاة GraphQL. وإذا كنت تختبر SOAP أيضًا، فراجع كيفية اختبار واجهات برمجة تطبيقات SOAP في Apidog.
أتمتة سير العمل باستخدام Apidog CLI
بعد حفظ السيناريوهات في المشروع، يمكنك تشغيل سيناريوهات الاختبار المحفوظة من الطرفية أو من مشغل تكامل مستمر.
ثبّت Apidog CLI وسجّل الدخول:
npm install -g apidog-cli
apidog login --with-token <your-token>
شغّل سيناريو محفوظًا باستخدام معرف السيناريو والبيئة:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
المعاملات الأساسية:
-
-t: معرف سيناريو الاختبار. -
-e: معرف البيئة. -
-r: نوع التقرير، مثلcliأوhtmlأوjunit.
يمكنك إنشاء أكثر من تقرير:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r html,cli
تشير وثائق CLI إلى تنفيذ سيناريوهات HTTP، لكنها لا تؤكد صراحة دعم السيناريوهات التي تحتوي خطوات GraphQL دون واجهة رسومية. استخدم CLI لتشغيل اختبارات HTTP المحفوظة ومزامنة المواصفات عبر أمر import، ونفّذ عمليات GraphQL والاستعلامات والتحقق منها داخل التطبيق عند الحاجة.
للتفاصيل، راجع دليل تثبيت Apidog CLI وApidog CLI في خط أنابيب GitHub Actions.
الأسئلة الشائعة
هل أحتاج إلى خطة مدفوعة لاختبار GraphQL في Apidog؟
لا تقيد وثائق طلب GraphQL هذه الميزة بخطة محددة. يمكنك البدء بالطبقة المجانية ومراجعة Apidog لمعرفة تفاصيل الخطط الحالية.
لماذا يعيد طلب GraphQL حالة 200 لكنه يفشل؟
لأن نجاح النقل عبر HTTP لا يضمن نجاح عملية GraphQL. تحقق دائمًا من غياب errors بالإضافة إلى فحص حالة HTTP، كما هو موضح في تأكيدات API.
كيف أحصل على اقتراحات الحقول أثناء كتابة الاستعلام؟
انقر على Fetch Schema بعد إدخال عنوان نقطة النهاية. يجلب Apidog المخطط ويتيح اقتراح الحقول والأنواع الصالحة في المحرر. أعد جلب المخطط بعد تغييره.
أين أكتب mutation؟
اكتبها في مربع Query نفسه. استبدل query بـmutation، ومرر البيانات عبر المتغيرات، ثم انقر على Send.
كيف أغيّر القيم دون إعادة كتابة الاستعلام؟
عرّف متغيرات GraphQL في توقيع العملية، ثم مرر قيمها ككائن JSON. استخدم صيغة متغيرات GraphQL القياسية، واربِطها بمتغيرات البيئة عند الحاجة.
خاتمة
لاختبار GraphQL عمليًا:
- أنشئ طلب
POSTواضبط الجسم علىGraphQL. - اكتب الاستعلام في مربع
Query. - استخدم
Fetch Schemaلتقليل أخطاء الحقول والأنواع. - انقل القيم الثابتة إلى متغيرات.
- تحقق من
errorsومن القيم داخلdata. - اختبر
mutationفي بيئة غير إنتاجية. - اجمع الاستعلامات والتغييرات في سيناريو قابل لإعادة التشغيل.
ابدأ ببناء تدفق المستخدم والطلبات، ثم احفظه كسيناريو تراجعي تشغله كلما تغير مخطط GraphQL أو منطق API.
Top comments (0)