- درخواست HTTP
- پارامترهای مسیر
- درخواست بدن
- بدن پاسخگو
- محدوده مجوز
- TestSuite
- TestCase
- انتظار
- FunctionMock
- ارگ
- نتیجه
- رمزگذاری مسیر
- ExpressionReportLevel
- موضوع
- منبع موقعیت
- شدت
- نتیجه آزمایش
- حالت
- FunctionCall
- VisitedExpression
- ExpressionReport
- ValueCount
- آن را امتحان کنید!
Source
تست برای صحت نحوی و معنایی. مشکلات موجود، در صورت وجود، با توضیحات، شدت و محل منبع به تماسگیرنده بازگردانده میشود.
روش تست ممکن است با Source
اجرا شود. Passing Source
برای تست واحد قوانین جدید مفید است.
توجه داشته باشید که آزمایشهایی که با استفاده از REST API اجرا میشوند از پایگاههای داده تولید، سطلهای ذخیرهسازی و منابع rsesource مرتبط استفاده میکنند. چنین آزمایشی می تواند هزینه های استفاده را به همراه داشته باشد. ما قویاً توصیه میکنیم که از مجموعه شبیهساز محلی 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 Transcoding استفاده می کند.
پارامترهای مسیر
مولفه های | |
---|---|
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
TestSuite
مجموعه ای از نمونه های TestCase
است که صحت منطقی قوانین را تأیید می کند. TestSuite
ممکن است به صورت خطی در یک فراخوانی projects.test
یا به عنوان بخشی از یک شی Release
به عنوان یک بررسی پیش از انتشار ارجاع داده شود.
نمایندگی JSON | |
---|---|
{
"testCases": [
{
object ( |
زمینه های | |
---|---|
testCases[] | مجموعه ای از موارد تست مرتبط با |
TestCase
پیامهای TestCase
زمینه درخواست و این انتظار را فراهم میکنند که آیا زمینه داده شده مجاز یا رد میشود. موارد آزمایشی ممکن است request
، resosurce
، و functionMocks
را برای تمسخر فراخوانی تابع به یک تابع ارائه شده توسط سرویس مشخص کنند.
شی request
نشان دهنده زمینه موجود در زمان درخواست است.
resource
مقدار منبع هدف است (مثلاً ابرداده یک شی GCS یا سند Firestore) همانطور که قبل از اجرای درخواست در ذخیره سازی دائمی ظاهر می شود.
همچنین به مستندات مرجع مرتبط برای Cloud Firestore ( درخواست ، منبع ) و Cloud Storage برای Firebase ( درخواست ، منبع ) مراجعه کنید.
نمایندگی JSON | |
---|---|
{ "expectation": enum ( |
زمینه های | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | انتظار آزمون | ||||||||||||||||
request | زمینه را درخواست کنید. قالب دقیق زمینه درخواست وابسته به سرویس است. برای اطلاعات در مورد فیلدها و انواع پشتیبانی شده در درخواست، به اسناد سرویس مناسب مراجعه کنید. حداقل، تمام سرویس ها از فیلدها و انواع زیر پشتیبانی می کنند:
اگر مقدار درخواست برای سرویس به خوبی شکل نگیرد، درخواست به عنوان یک آرگومان نامعتبر رد خواهد شد. | ||||||||||||||||
resource | مقدار منبع اختیاری همانطور که در ذخیره سازی دائمی قبل از انجام درخواست ظاهر می شود. نوع منبع به مقدار | ||||||||||||||||
functionMocks[] | تابع قواعد اختیاری برای توابع تعریف شده توسط سرویس تمسخر می کند. در صورت تنظیم نشدن، انتظار میرود که هر تابع قوانین تعریفشده توسط سرویس، خطایی را برگرداند، که ممکن است بر نتیجه آزمایش تأثیر بگذارد یا نداشته باشد. | ||||||||||||||||
pathEncoding | مشخص می کند که آیا مسیرها (مانند request.path) کدگذاری می شوند یا خیر. | ||||||||||||||||
expressionReportLevel | مشخص می کند که چه چیزی باید در پاسخ گنجانده شود. |
انتظار
مجموعه ای از انتظارات مورد آزمایش پشتیبانی شده.
Enums | |
---|---|
EXPECTATION_UNSPECIFIED | انتظار نامشخص |
ALLOW | انتظار یک نتیجه مجاز را داشته باشید. |
DENY | انتظار یک نتیجه انکار شده را داشته باشید. |
FunctionMock
تعریف تابع قوانین ساختگی
Mocks باید به یک تابع اعلام شده توسط سرویس هدف اشاره داشته باشد. نوع تابع args و نتیجه در زمان تست استنباط می شود. اگر مقادیر arg یا نتیجه با اعلان نوع تابع سازگار نباشد، درخواست نامعتبر تلقی می شود.
ممکن است بیش از یک 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 | نتیجه تعریف نشده است، به این معنی که نتیجه قابل محاسبه نیست. |
رمزگذاری مسیر
نوع رمزگذاری مسیر مورد استفاده
Enums | |
---|---|
ENCODING_UNSPECIFIED | هیچ کدگذاری مشخص نشده است. رفتار "URL_ENCODED" پیشفرض است. |
URL_ENCODED | بخش های مسیر را به عنوان URL رمزگذاری شده اما با جداکننده های غیر رمزگذاری شده ("/") تلقی می کند. این رفتار به طور پیش فرض است. |
PLAIN | کل مسیر را بهعنوان غیرنشانی اینترنتی رمزگذاریشده بهعنوان مثال خام تلقی میکند. |
ExpressionReportLevel
مقدار داده ای که باید در پاسخ گزارش عبارت گنجانده شود.
Enums | |
---|---|
LEVEL_UNSPECIFIED | هیچ سطحی مشخص نشده است. رفتار پیشفرض "NONE". |
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 | موقعیت پایان نسبت به ابتدای فایل. |
شدت
مجموعه ای از شدت موضوع.
Enums | |
---|---|
SEVERITY_UNSPECIFIED | شدت نامشخص |
DEPRECATION | موضوع منسوخ شدن برای بیانیهها و روشهایی که ممکن است دیگر پشتیبانی یا نگهداری نشوند. |
WARNING | هشدارهایی مانند: متغیرهای استفاده نشده. |
ERROR | خطاهایی مانند: مهاربندهای فرفری بی همتا یا تعریف مجدد متغیر. |
نتیجه آزمایش
پیام نتیجه تست حاوی وضعیت تست و همچنین توضیحات و موقعیت منبع برای شکست تست.
نمایندگی JSON | |
---|---|
{ "state": enum ( |
زمینه های | |
---|---|
state | وضعیت آزمون |
debugMessages[] | پیامهای اشکالزدایی مربوط به مشکلات اجرای آزمایشی که در حین ارزیابی با آن مواجه میشوند. پیامهای اشکالزدایی ممکن است به فراخوانیهای بسیار زیاد یا بسیار کم از شبیهسازیهای عملکرد یا خطاهای زمان اجرا که در حین ارزیابی رخ میدهند مرتبط باشند. به عنوان مثال: |
errorPosition | موقعیتی در ارزیابی یک عبارت ممکن است منجر به خطا شود. قوانین بهطور پیشفرض رد میشوند، بنابراین انتظار به عنوان مثال |
functionCalls[] | مجموعه ای از فراخوانی های تابعی که به روش های تعریف شده توسط سرویس انجام می شود. فراخوانیهای تابع به ترتیبی که در حین ارزیابی با آنها مواجه میشوند، گنجانده میشوند، هم برای عملکردهای مسخرهشده و هم غیرمسخرهشده ارائه میشوند و بدون در نظر گرفتن |
visitedExpressions[] | مجموعه ای از عبارات مجوز بازدید شده برای یک آزمون معین. این موقعیت ها و نتایج ارزیابی تمام عبارات مجوز بازدید شده را که مربوط به مورد آزمایشی بودند، برمی گرداند
برای گزارش دقیق وضعیت های ارزیابی میانی، به قسمت |
expressionReports[] | نگاشت از بیان در مجموعه قوانین AST تا مقادیری که آنها به آنها ارزیابی شدند. تا حدی تو در تو به ساختار AST آینه. توجه داشته باشید که این فیلد در واقع عبارات را ردیابی می کند و نه عبارات مجوز را برخلاف قسمت "visitedExpressions" در بالا. عبارات تحت اللفظی حذف شده اند. |
حالت
حالت های معتبر برای نتیجه آزمایش
Enums | |
---|---|
STATE_UNSPECIFIED | وضعیت تست تنظیم نشده است. |
SUCCESS | تست موفقیت آمیز است |
FAILURE | تست شکست است |
FunctionCall
نشان دهنده یک فراخوانی تابع تعریف شده توسط سرویس است که در طول اجرای آزمایش فراخوانی شده است.
نمایندگی JSON | |
---|---|
{ "function": string, "args": [ value ] } |
زمینه های | |
---|---|
function | نام تابع فراخوانی شده |
args[] | آرگومان هایی که به تابع ارائه شد. |
VisitedExpression
ذخیره موقعیت و نتیجه دسترسی برای عبارتی که در قوانین بازدید شده است.
نمایندگی JSON | |
---|---|
{
"sourcePosition": {
object ( |
زمینه های | |
---|---|
sourcePosition | موقعیت در |
value | مقدار ارزیابی شده برای عبارت بازدید شده، به عنوان مثال true/false |
ExpressionReport
توضیح می دهد که یک عبارت در کجای یک فایل یافت می شود و در طول استفاده از آن به چه چیزی ارزیابی شده است.
نمایندگی JSON | |
---|---|
{ "sourcePosition": { object ( |
زمینه های | |
---|---|
sourcePosition | موقعیت بیان در منبع قوانین اصلی. |
values[] | مقادیری که این عبارت هنگام مواجه شدن با آنها ارزیابی می شود. |
children[] | عبارات فرعی |
ValueCount
چند بار یک Expression به یک ExpressionValue خاص ارزیابی شده است.
نمایندگی JSON | |
---|---|
{ "value": value, "count": integer } |
زمینه های | |
---|---|
value | مقدار بازگشتی عبارت |
count | تعداد دفعاتی که آن عبارت برگشته است. |