- طلب HTTP
- مَعلمات المسار
- نص الطلب
- نص الاستجابة
- نطاقات التفويض
- حزمة أدوات الاختبار
- TestCase
- التوقّعات
- FunctionMock
- المتوسط
- النتيجة
- PathEncoding
- ExpressionReportLevel
- المشكلة
- SourcePosition
- درجة الخطورة
- نتيجة الاختبار
- الولاية
- FunctionCall
- visited Expression
- ExpressionReport
- عدد القيم
- التجربة الآن
اختبار Source
للتأكّد من الصحة النحوية والدلالية سيتم إرجاع المشاكل، إن وُجدت، إلى المتصل مع وصفها ودرجة الخطورة وموقع المصدر.
يمكن تنفيذ طريقة الاختبار باستخدام Source
. يُعدّ اجتياز Source
مفيدًا لاختبار القواعد الجديدة.
يُرجى العلم أنّ الاختبارات التي يتم إجراؤها باستخدام واجهة برمجة تطبيقات REST تستخدم قواعد بيانات الإنتاج وحِزم التخزين والمصادر والمصادر ذات الصلة. وقد يتم تحصيل رسوم استخدام من خلال هذا الاختبار. ننصحك بشدة باستخدام "حزمة أدوات المحاكاة المحلية من Firebase" لاختبار القواعد، لأنّه بإمكانك إجراء الاختبارات على موارد غير إنتاجية بلا اتصال بالإنترنت بدون رسوم استخدام.
في ما يلي مثال على السمة Source
التي تسمح للمستخدمين بتحميل الصور إلى حزمة تحمل رقم تعريف المستخدم الخاص بهم وتتطابق مع البيانات الوصفية الصحيحة:
مثال
// Users are allowed to subscribe and unsubscribe to the blog.
service firebase.storage {
match /users/{userId}/images/{imageName} {
allow write: if userId == request.auth.uid
&& (imageName.matches('*.png$')
|| imageName.matches('*.jpg$'))
&& resource.mimeType.matches('^image/')
}
}
طلب HTTP
POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test
يستخدِم عنوان URL بنية تحويل ترميز gRPC.
مَعلمات المسار
المَعلمات | |
---|---|
name |
مطلوب. لإجراء اختبارات مقابل |
نص الطلب
يحتوي نص الطلب على بيانات بالبنية التالية:
تمثيل JSON | |
---|---|
{ "source": { object ( |
الحقول | |
---|---|
source |
سيتم التحقّق من صحة |
testSuite |
تمثّل هذه السمة عند توفير |
نص الاستجابة
إذا كانت الاستجابة ناجحة، سيحتوي نص الاستجابة على بيانات بالبنية التالية:
تمثّل هذه السمة الردّ على FirebaseRulesService.TestRuleset
.
تمثيل JSON | |
---|---|
{ "issues": [ { object ( |
الحقول | |
---|---|
issues[] |
مشاكل |
testResults[] |
تمثّل هذه السمة مجموعة نتائج الاختبارات استنادًا إلى حالات الاختبار في |
نطاقات الأذونات
يتطلب هذا الإعداد أحد نطاقات OAuth التالية:
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/firebase
https://www.googleapis.com/auth/firebase.readonly
لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة حول المصادقة.
مجموعة أدوات الاختبار
TestSuite
هي مجموعة من مثيلات TestCase
التي تتحقق من صحة القواعد المنطقية. قد تتم الإشارة إلى TestSuite
بشكل مضمَّن في استدعاء projects.test
أو كجزء من عنصر Release
كفحص تجريبي.
تمثيل JSON | |
---|---|
{
"testCases": [
{
object ( |
الحقول | |
---|---|
testCases[] |
جمع حالات الاختبار المرتبطة بـ |
حالة الاختبار
تقدّم رسائل TestCase
سياق الطلب وتوقّع ما إذا كان سيتم السماح بالسياق المحدّد أو رفضه. قد تحدِّد حالات الاختبار request
وresosurce
وfunctionMocks
من أجل محاكاة استدعاء دالة إلى دالة مقدَّمة من خلال خدمة.
يمثّل الكائن request
السياق المتاح في وقت الطلب.
تشير السمة resource
إلى قيمة المورد الهدف (مثل البيانات الوصفية لعنصر GCS أو مستند Firestore) كما تظهر في مساحة التخزين الدائمة قبل تنفيذ الطلب.
اطّلِع أيضًا على المستندات المرجعية ذات الصلة بخدمة Cloud Firestore ( الطلب والمورد) وCloud Storage for Firebase (طلب والمورد).
تمثيل JSON | |
---|---|
{ "expectation": enum ( |
الحقول | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation |
اختبار التوقعات. |
||||||||||||||||
request |
اطلب سياقًا. يعتمد التنسيق الدقيق لسياق الطلب على الخدمة. راجِع مستندات الخدمة المناسبة للحصول على معلومات عن الحقول والأنواع المتوافقة في الطلب. تتوافق جميع الخدمات على الأقل مع الحقول والأنواع التالية:
إذا لم تكن قيمة الطلب مُنسّقة بشكل صحيح للخدمة، سيتم رفض الطلب كوسيطة غير صالحة. |
||||||||||||||||
resource |
قيمة اختيارية للمورد كما تظهر في مساحة التخزين الدائمة قبل تنفيذ الطلب. يعتمد نوع المورد على قيمة |
||||||||||||||||
functionMocks[] |
نماذج تجريبية لدالة "القواعد الاختيارية" للدوال المحدَّدة بالخدمة وفي حال ترك هذه السياسة بدون ضبط، من المتوقّع أن تعرض أي دالة "قواعد" محدّدة للخدمة خطأً، ما قد يؤثر أو لا يؤثّر في نتيجة الاختبار. |
||||||||||||||||
pathEncoding |
تحدِّد هذه السياسة ما إذا كان قد تم ترميز المسارات (مثل request.path) وطريقة إجراء ذلك. |
||||||||||||||||
expressionReportLevel |
لتحديد ما يجب تضمينه في الرد. |
التوقّع
مجموعة التوقّعات المتوافقة مع حالة الاختبار.
تعدادات | |
---|---|
EXPECTATION_UNSPECIFIED |
توقُّع غير محدَّد. |
ALLOW |
قد تكون هناك نتيجة مسموح بها. |
DENY |
من المتوقع أن تكون النتيجة مرفوضة. |
نموذج FunctionMock
تعريف دالة "القواعد" الوهمية
يجب أن تشير النماذج الأولية إلى دالة معرَّفة من خلال الخدمة المستهدَفة. نوع الدالة سيتم استنتاجه في وقت الاختبار. إذا كانت قيم الوسيط أو النتيجة غير متوافقة مع تعريف نوع الدالة، سيتم اعتبار الطلب غير صالح.
يمكن تقديم أكثر من FunctionMock
واحدة لاسم دالة معيّن ما دامت مطابقة Arg
مختلفة. قد تكون هناك دالة واحدة فقط لحِمل زائد معيّن، حيث تكون جميع قيَم Arg
هي Arg.any_value
.
راجِع أيضًا الدوال بلغة "قواعد الأمان".
تمثيل JSON | |
---|---|
{ "function": string, "args": [ { object ( |
الحقول | |
---|---|
function |
تمثّل هذه السمة اسم الدالة. يجب أن يتطابق اسم الدالة مع الاسم الوارد في بيان الخدمة. |
args[] |
قائمة قيم |
result |
النتيجة الوهمية لاستدعاء الدالة. |
أرغ
مُطابقات الوسيطات للدالة الوهمية.
تمثيل JSON | |
---|---|
{ // Union field |
الحقول | ||
---|---|---|
حقل الاتحاد type . قيم الوسيطات المسموح بها يمكن أن يكون type واحدًا فقط مما يلي: |
||
exactValue |
الوسيطة تطابق تمامًا القيمة المقدمة. |
|
anyValue |
تطابق الوسيطة أي قيمة مقدمة. |
النتيجة
قيم النتائج المحتملة من الاستدعاء التجريبي للدالة.
تمثيل JSON | |
---|---|
{ // Union field |
الحقول | ||
---|---|---|
حقل الاتحاد type . قيم النتائج المسموح بها يمكن أن يكون type واحدًا فقط مما يلي: |
||
value |
والنتيجة هي قيمة فعلية. يجب أن يتطابق نوع القيمة مع نوع النوع الذي تعلنه الخدمة. |
|
undefined |
النتيجة غير محددة، مما يعني أنه لا يمكن حساب النتيجة. |
ترميز المسار
نوع ترميز المسار المستخدم.
تعدادات | |
---|---|
ENCODING_UNSPECIFIED |
لم يتم تحديد أي ترميز. قيم افتراضية على "URL_ENCODED" السلوك. |
URL_ENCODED |
يتم التعامل مع أجزاء المسار على أنّها عنوان URL مُرمَّز ولكن بفواصل غير مرمّزة ("/"). وهذا هو السلوك التلقائي. |
PLAIN |
تتعامل مع المسار الإجمالي على أنّه ليس عنوان URL مرمّزًا، مثل: خام. |
مستوى تقرير التعبير
مقدار البيانات المراد تضمينها في الرد على تقرير التعبير.
تعدادات | |
---|---|
LEVEL_UNSPECIFIED |
لم يتم تحديد أي مستوى. القيم التلقائية على "بدون" السلوك. |
NONE |
لا تُدرِج أيّ معلومات إضافية. |
FULL |
تضمين تقارير تفصيلية عن التعبيرات التي تم تقييمها |
VISITED |
قم فقط بتضمين التعبيرات التي تمت زيارتها أثناء التقييم. |
مشكلة
تشمل المشاكل التحذيرات والأخطاء وإشعارات الإيقاف.
تمثيل JSON | |
---|---|
{ "sourcePosition": { object ( |
الحقول | |
---|---|
sourcePosition |
موضع المشكلة في |
description |
وصف مختصر للخطأ. |
severity |
درجة خطورة المشكلة. |
موضع المصدر
الموضع في محتوى Source
، بما في ذلك السطر ورقم العمود وفهرس File
في رسالة Source
يُستخدَم لأغراض تصحيح الأخطاء.
تمثيل JSON | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
الحقول | |
---|---|
fileName |
اسم جهاز |
line |
رقم السطر للجزء المصدر. يستند إلى 1. |
column |
العمود الأول في سطر المصدر المرتبط بجزء المصدر |
currentOffset |
موضع البدء بالنسبة إلى بداية الملف. |
endOffset |
موضع النهاية بالنسبة إلى بداية الملف. |
درجة الخطورة
تمثّل هذه السمة مجموعة شدة المشكلة.
تعدادات | |
---|---|
SEVERITY_UNSPECIFIED |
درجة خطورة غير محدّدة |
DEPRECATION |
مشكلة إيقاف البيانات والطريقة التي ربما لم تعد متاحة أو لم تعد متاحة |
WARNING |
تحذيرات مثل: المتغيّرات غير المستخدَمة. |
ERROR |
أخطاء مثل: الأقواس المعقوفة غير المتطابقة أو إعادة التعريف المتغيّرة. |
TestResult
رسالة نتيجة الاختبار تحتوي على حالة الاختبار بالإضافة إلى وصف وموضع المصدر لحالات تعذُّر الاختبار.
تمثيل JSON | |
---|---|
{ "state": enum ( |
الحقول | |
---|---|
state |
حالة الاختبار. |
debugMessages[] |
تصحيح أخطاء الرسائل ذات الصلة بمشاكل تنفيذ الاختبار التي حدثت أثناء التقييم. قد تكون رسائل تصحيح الأخطاء مرتبطة بعدد كبير جدًا أو قليل جدًا من الاستدعاءات لنماذج الدوال أو أخطاء وقت التشغيل التي تحدث أثناء التقييم. مثلاً: |
errorPosition |
تمثّل هذه السمة موضع حدوث الخطأ في بيئة التشغيل الأساسية في قد يؤدي تقييم تعبير إلى حدوث خطأ. يتم رفض القواعد تلقائيًا، وبالتالي يكون توقُّع مثلاً: |
functionCalls[] |
مجموعة استدعاءات الدوال التي يتم إجراؤها للطرق المحددة للخدمة. يتم تضمين طلبات الدوال بالترتيب الذي تظهر به خلال عملية التقييم، ويتم توفيرها لكل من الدالتَين النموذجيتَين وغير النموذجيتَين، ويتم تضمين هذه الطلبات في الاستجابة بغض النظر عن اختبار |
visitedExpressions[] |
مجموعة من تعابير الأذونات التي تمّت زيارتها في اختبار معيَّن يؤدي ذلك إلى عرض المواضع ونتائج التقييم لجميع تعبيرات الأذونات التي تمت زيارتها والتي كانت ذات صلة بحالة الاختبار، مثلاً
للحصول على تقرير تفصيلي عن حالات التقييم الوسيطة، يُرجى الاطّلاع على حقل |
expressionReports[] |
التعيين من التعبير في AST لمجموعة القواعد إلى القيم التي تم تقييمها لها. مدمجة جزئيًا لتعكس بنية AST. يُرجى ملاحظة أن هذا الحقل يتتبع في الواقع التعبيرات وليس عبارات الأذونات على عكس "visitedExpressions". أعلاه. يتم حذف التعبيرات الحرفية. |
الولاية
الحالات الصالحة لنتيجة الاختبار
تعدادات | |
---|---|
STATE_UNSPECIFIED |
لم يتم ضبط حالة الاختبار. |
SUCCESS |
نجح الاختبار. |
FAILURE |
تعذّر الاختبار. |
دالة FunctionCall
يمثل هذا الإعداد استدعاء دالة محددة للخدمة تم استدعاؤها أثناء التنفيذ التجريبي.
تمثيل JSON | |
---|---|
{ "function": string, "args": [ value ] } |
الحقول | |
---|---|
function |
تم استدعاء اسم الدالة. |
args[] |
الوسيطات التي تم توفيرها للدالة. |
تمت زيارة Expression
تخزين الموضع ونتائج الوصول لتعبير تمت زيارته في القواعد
تمثيل JSON | |
---|---|
{
"sourcePosition": {
object ( |
الحقول | |
---|---|
sourcePosition |
الموضع في |
value |
القيمة المُقيّمة للتعبير الذي تمت زيارته، مثل صواب/خطأ |
تقرير التعبيرات
تصف مكان العثور على تعبير في ملف وما تم تقييمه على مدار استخدامه.
تمثيل JSON | |
---|---|
{ "sourcePosition": { object ( |
الحقول | |
---|---|
sourcePosition |
موضع التعبير في مصدر القواعد الأصلية |
values[] |
القيم التي تم تقييم هذا التعبير عليها عند العثور عليها. |
children[] |
تعبيرات فرعية |
عدد القيم
صف لعدد المرات التي تم فيها تقييم تعبير لقيمة تعبير معينة.
تمثيل JSON | |
---|---|
{ "value": value, "count": integer } |
الحقول | |
---|---|
value |
القيمة المعروضة للتعبير |
count |
عدد مرات عرض هذا التعبير. |