REST Resource: projects.testMatrices

المرجع: TestMatrix

تجمع TestMatrix جميع التفاصيل المتعلقة بالاختبار. فهي تحتوي على تهيئة البيئة ومواصفات الاختبار وعمليات تنفيذ الاختبار والحالة العامة والنتائج.

تمثيل JSON
{
  "testMatrixId": string,
  "projectId": string,
  "clientInfo": {
    object (ClientInfo)
  },
  "testSpecification": {
    object (TestSpecification)
  },
  "environmentMatrix": {
    object (EnvironmentMatrix)
  },
  "testExecutions": [
    {
      object (TestExecution)
    }
  ],
  "resultStorage": {
    object (ResultStorage)
  },
  "state": enum (TestState),
  "timestamp": string,
  "invalidMatrixDetails": enum (InvalidMatrixDetails),
  "extendedInvalidMatrixDetails": [
    {
      object (MatrixErrorDetail)
    }
  ],
  "flakyTestAttempts": integer,
  "outcomeSummary": enum (OutcomeSummary),
  "failFast": boolean
}
الحقول
testMatrixId

string

النتائج فقط. المعرّف الفريد الذي تحدّده الخدمة

projectId

string

يشير ذلك المصطلح إلى المشروع على السحابة الإلكترونية الذي يملك مصفوفة الاختبار.

clientInfo

object (ClientInfo)

معلومات عن العميل الذي استدعى الاختبار.

testSpecification

object (TestSpecification)

مطلوب. كيفية إجراء الاختبار.

environmentMatrix

object (EnvironmentMatrix)

مطلوب. الأجهزة التي يتم إجراء الاختبارات عليها.

testExecutions[]

object (TestExecution)

النتائج فقط. قائمة بعمليات تنفيذ الاختبار التي تنشئها الخدمة لهذه المصفوفة.

resultStorage

object (ResultStorage)

مطلوب. حيث تتم كتابة نتائج المصفوفة.

state

enum (TestState)

النتائج فقط. تشير إلى التقدم الحالي لمصفوفة الاختبار.

timestamp

string (Timestamp format)

النتائج فقط. الوقت الذي تم فيه إنشاء مصفوفة الاختبار هذه في البداية.

طابع زمني بتنسيق RFC3339 حسب التوقيت العالمي المنسَّق (UTC) "زولو" بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: "2014-10-02T15:01:23Z" و"2014-10-02T15:01:23.045123456Z".

invalidMatrixDetails

enum (InvalidMatrixDetails)

النتائج فقط. تصف سبب اعتبار المصفوفة غير صالحة. تكون مفيدة فقط للمصفوفات التي تكون في الحالة "غير صالحة".

extendedInvalidMatrixDetails[]

object (MatrixErrorDetail)

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

flakyTestAttempts

integer

عدد المرّات التي يجب فيها إعادة محاولة إجراء اختبار TestExecution في حال تعذّر حلّ حالة واحدة أو أكثر من حالات الاختبار الخاصة به لأي سبب من الأسباب. الحدّ الأقصى لعدد عمليات إعادة التشغيل المسموح به هو 10.

القيمة التلقائية هي 0، ما يعني عدم إعادة التشغيل.

outcomeSummary

enum (OutcomeSummary)

النتائج فقط. النتيجة الإجمالية للاختبار. يتم ضبط السياسة فقط في حال تم الانتهاء من حالة مصفوفة الاختبار.

failFast

boolean

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

في العادة، يتم إجراء محاولتين أو أكثر في حالة اكتشاف مشكلة محتملة في البنية الأساسية.

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

ClientInfo

معلومات عن العميل الذي استدعى الاختبار.

تمثيل JSON
{
  "name": string,
  "clientInfoDetails": [
    {
      object (ClientInfoDetail)
    }
  ]
}
الحقول
name

string

مطلوب. اسم العميل، مثل gcloud.

clientInfoDetails[]

object (ClientInfoDetail)

تمثّل هذه السمة قائمة بالمعلومات التفصيلية حول العميل.

ClientInfoDetail (معلومات العميل)

زوج المفتاح/القيمة من المعلومات التفصيلية عن العميل الذي استدعى الاختبار. أمثلة: {'Version', '1.0'}، {'Release Track', 'BETA'}.

تمثيل JSON
{
  "key": string,
  "value": string
}
الحقول
key

string

مطلوب. تمثّل هذه السمة مفتاح معلومات العميل التفصيلية.

value

string

مطلوب. قيمة المعلومات التفصيلية عن العميل.

مواصفات الاختبار

تمثّل هذه السمة وصفًا لطريقة إجراء الاختبار.

تمثيل JSON
{
  "testTimeout": string,
  "disableVideoRecording": boolean,
  "disablePerformanceMetrics": boolean,

  // Union field setup can be only one of the following:
  "testSetup": {
    object (TestSetup)
  },
  "iosTestSetup": {
    object (IosTestSetup)
  }
  // End of list of possible types for union field setup.

  // Union field test can be only one of the following:
  "androidInstrumentationTest": {
    object (AndroidInstrumentationTest)
  },
  "androidRoboTest": {
    object (AndroidRoboTest)
  },
  "androidTestLoop": {
    object (AndroidTestLoop)
  },
  "iosXcTest": {
    object (IosXcTest)
  },
  "iosTestLoop": {
    object (IosTestLoop)
  },
  "iosRoboTest": {
    object (IosRoboTest)
  }
  // End of list of possible types for union field test.
}
الحقول
testTimeout

string (Duration format)

يُسمح بالحد الأقصى لمدة تنفيذ الاختبار قبل إلغائه تلقائيًا. القيمة التلقائية هي 5 دقائق.

مدة بالثواني مكونة من تسعة أرقام كسور كحد أقصى وتنتهي بالأرقام "s" مثال: "3.5s"

disableVideoRecording

boolean

لإيقاف تسجيل الفيديو. قد يقلّل هذا الخيار من وقت استجابة الاختبار.

disablePerformanceMetrics

boolean

لإيقاف تسجيل مقاييس الأداء. قد يقلّل هذا الخيار من وقت استجابة الاختبار.

حقل الاتحاد setup. اختبار متطلبات الإعداد يمكن أن يكون setup واحدًا فقط مما يلي:
testSetup

object (TestSetup)

اختبار متطلبات إعداد Android، على سبيل المثال الملفات لتثبيتها، والنصوص البرمجية التمهيدية.

iosTestSetup

object (IosTestSetup)

اختبار متطلبات الإعداد لنظام التشغيل iOS

حقل الاتحاد test. مطلوب. تمثّل هذه السمة نوع الاختبار المطلوب إجراؤه. يمكن أن يكون test واحدًا فقط مما يلي:
androidInstrumentationTest

object (AndroidInstrumentationTest)

اختبار قياس حالة Android

androidRoboTest

object (AndroidRoboTest)

اختبار robo على Android

androidTestLoop

object (AndroidTestLoop)

تطبيق Android يتضمّن حلقة اختبار.

iosXcTest

object (IosXcTest)

XCTest لنظام التشغيل iOS، عبر ملف xctestrun.

iosTestLoop

object (IosTestLoop)

تطبيق iOS يتضمّن حلقة اختبار.

iosRoboTest

object (IosRoboTest)

اختبار Robo على أجهزة iOS

اختبار الإعداد

وصف لطريقة إعداد جهاز Android قبل إجراء الاختبار

تمثيل JSON
{
  "filesToPush": [
    {
      object (DeviceFile)
    }
  ],
  "directoriesToPull": [
    string
  ],
  "initialSetupApks": [
    {
      object (Apk)
    }
  ],
  "additionalApks": [
    {
      object (Apk)
    }
  ],
  "account": {
    object (Account)
  },
  "networkProfile": string,
  "environmentVariables": [
    {
      object (EnvironmentVariable)
    }
  ],
  "systrace": {
    object (SystraceSetup)
  },
  "dontAutograntPermissions": boolean
}
الحقول
filesToPush[]

object (DeviceFile)

قائمة بالملفات المطلوب إرسالها إلى الجهاز قبل بدء الاختبار.

directoriesToPull[]

string

قائمة بالأدلة على الجهاز المراد تحميلها إلى خدمة GCS في نهاية الاختبار ويجب أن تكون مسارات مطلقة ضمن /sdcard أو /storage أو /data/local/tmp. تقتصر أسماء المسارات على الأحرف a-z A-Z 0-9 _ - . + و /

ملاحظة: سيتم توفير المسارات /sdcard و /البيانات وسيتم التعامل معها على أنّها بدائل ضمنية للمسارات. مثلاً: في حال عدم ربط /sdcard على جهاز معيّن بمساحة تخزين خارجية، سيستبدلها النظام ببادئة مسار التخزين الخارجي لذلك الجهاز.

initialSetupApks[]

object (Apk)

هذه السمة اختيارية. حِزم APK التي يتم إعدادها بشكلٍ أوّلي كي يتم تثبيتها قبل تثبيت التطبيق الذي يخضع للاختبار الحد الأقصى حاليًا هو 100

additionalApks[]

object (Apk)

حِزم APK المراد تثبيتها بالإضافة إلى التطبيقات التي يتم اختبارها مباشرةً. سيتم تثبيتها بعد اختبار التطبيق. الحد الأقصى حاليًا هو 100

account

object (Account)

سيتم تسجيل دخول الجهاز إلى هذا الحساب طوال مدة الاختبار.

networkProfile

string

ملف تعريف حركة بيانات الشبكة المستخدَم لإجراء الاختبار. يمكن البحث عن الملفات الشخصية المتاحة للشبكة باستخدام نوع البيئة NETWORK_CONFIGURATION عند استدعاء TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.

environmentVariables[]

object (EnvironmentVariable)

متغيرات البيئة المطلوب ضبطها للاختبار (ينطبق فقط على اختبارات قياس حالة التطبيق)

systrace
(deprecated)

object (SystraceSetup)

إعدادات Systrace للتشغيل متوقّفة نهائيًا: استخدمت Systrace لغة Python 2 التي تم إيقافها نهائيًا في 01-01-2020. لم يعُد Systrace متوافقًا مع Cloud Testing API، ولن يتم تقديم أي ملف Systrace في النتائج.

dontAutograntPermissions

boolean

تحديد ما إذا كان سيتم منح جميع أذونات وقت التشغيل عند تثبيت التطبيق

ملف الجهاز

وصف ملف على جهاز واحد

تمثيل JSON
{

  // Union field device_file can be only one of the following:
  "obbFile": {
    object (ObbFile)
  },
  "regularFile": {
    object (RegularFile)
  }
  // End of list of possible types for union field device_file.
}
الحقول
حقل الاتحاد device_file. مطلوب. يمكن أن يكون device_file واحدًا فقط مما يلي:
obbFile

object (ObbFile)

مرجع إلى ملف ثنائي كبير ثنائي غير شفاف.

regularFile

object (RegularFile)

مرجع لملف عادي.

ملف ObbFile

يشير ذلك المصطلح إلى ملف ثنائي غير شفاف يجب تثبيته على الجهاز قبل بدء الاختبار.

تمثيل JSON
{
  "obbFileName": string,
  "obb": {
    object (FileReference)
  }
}
الحقول
obbFileName

string

مطلوب. اسم ملف OBB الذي يجب أن يتوافق مع التنسيق المحدّد بواسطة Android، مثلاً [main|patch].0300110.com.example.android.obb الذي سيتم تثبيته في <shared-storage>/Android/obb/<package-name>/ على الجهاز.

obb

object (FileReference)

مطلوب. ملفات Blob الثنائية المعتمة (OBB) المطلوب تثبيتها على الجهاز.

مرجع الملف

يشير إلى مرجع لملف يُستخدَم لإدخالات المستخدمين.

تمثيل JSON
{

  // Union field file can be only one of the following:
  "gcsPath": string
  // End of list of possible types for union field file.
}
الحقول
حقل الاتحاد file. مطلوب. مرجع الملف. يمكن أن يكون file واحدًا فقط مما يلي:
gcsPath

string

مسار إلى ملف في Google Cloud Storage. مثال: gs://build-app-1414623860166/app%40debug-unaligned.apk من المتوقّع أن تكون هذه المسارات بترميز عناوين URL (ترميز بنسبة مئوية).

ملف عادي

ملف أو دليل مطلوب تثبيته على الجهاز قبل بدء الاختبار

تمثيل JSON
{
  "content": {
    object (FileReference)
  },
  "devicePath": string
}
الحقول
content

object (FileReference)

مطلوب. ملف المصدر

devicePath

string

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

${EXTERNAL_STORAGE} أو /sdcard أو /storage

${ANDROID_DATA}/local/tmp أو /data/local/tmp

إنّ تحديد مسار خارج مجموعات الأشجار هذه غير صالح.

سيتم توفير المسارات /sdcard و /البيانات وسيتم التعامل معها على أنّها بدائل ضمنية للمسارات. مثلاً: في حال عدم ربط /sdcard على جهاز معيّن بمساحة تخزين خارجية، سيستبدلها النظام ببادئة مسار التخزين الخارجي لذلك الجهاز وينسخ الملف إليها.

ننصح بشدة باستخدام Environment API في التطبيق واختبار الرمز للوصول إلى الملفات على الجهاز بطريقة قابلة للنقل.

APK

ملف حزمة Android للتثبيت.

تمثيل JSON
{
  "location": {
    object (FileReference)
  },
  "packageName": string
}
الحقول
location

object (FileReference)

المسار إلى حزمة APK المراد تثبيتها على الجهاز قبل بدء الاختبار

packageName

string

حزمة جافا لحِزمة APK المطلوب تثبيتها ويتم تحديد القيمة من خلال فحص بيان التطبيق.

الحساب

يحدد حسابًا وكيفية تسجيل الدخول إليه.

تمثيل JSON
{

  // Union field account_type can be only one of the following:
  "googleAuto": {
    object (GoogleAuto)
  }
  // End of list of possible types for union field account_type.
}
الحقول
حقل الاتحاد account_type. مطلوب. نوع الحساب، استنادًا إلى الغرض منه (على سبيل المثال، Google) وآلية تسجيل الدخول الخاصة به (مثل اسم المستخدم وكلمة المرور). يمكن أن يكون account_type واحدًا فقط مما يلي:
googleAuto

object (GoogleAuto)

حساب تسجيل دخول تلقائي إلى Google.

GoogleAuto

لا يحتوي هذا النوع على أي حقول.

لتفعيل تسجيل الدخول التلقائي إلى حساب Google. في حال ضبط هذه السياسة، تُنشئ الخدمة تلقائيًا حسابًا تجريبيًا على Google وتضيفه إلى الجهاز قبل إجراء الاختبار. ويُرجى العِلم بأنّه قد تتم إعادة استخدام الحسابات الاختبارية. تعرض العديد من التطبيقات مجموعتها الكاملة من الوظائف عند توفّر حساب على الجهاز. يسمح تسجيل الدخول إلى الجهاز باستخدام هذه الحسابات التي تم إنشاؤها باختبار المزيد من الوظائف.

متغيّر البيئة

يتم تمرير زوج المفتاح/القيمة كمتغير بيئي إلى الاختبار.

تمثيل JSON
{
  "key": string,
  "value": string
}
الحقول
key

string

مفتاح لمتغيّر البيئة.

value

string

قيمة متغيّر البيئة

إعداد النظام

تمثيل JSON
{
  "durationSeconds": integer
}
الحقول
durationSeconds
(deprecated)

integer

مدة النظام بالثواني. يجب أن تتراوح المدة بين ثانية واحدة و30 ثانية. 0 توقف تتبع النظام.

إعداد IosTest

وصف لطريقة إعداد جهاز iOS قبل إجراء الاختبار

تمثيل JSON
{
  "networkProfile": string,
  "additionalIpas": [
    {
      object (FileReference)
    }
  ],
  "pushFiles": [
    {
      object (IosDeviceFile)
    }
  ],
  "pullDirectories": [
    {
      object (IosDeviceFile)
    }
  ]
}
الحقول
networkProfile

string

ملف تعريف حركة بيانات الشبكة المستخدَم لإجراء الاختبار. يمكن البحث عن الملفات الشخصية المتاحة للشبكة باستخدام نوع البيئة NETWORK_CONFIGURATION عند استدعاء TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.

additionalIpas[]

object (FileReference)

تطبيقات iOS التي يجب تثبيتها بالإضافة إلى التطبيقات التي يتم اختبارها مباشرةً

pushFiles[]

object (IosDeviceFile)

قائمة بالملفات المطلوب إرسالها إلى الجهاز قبل بدء الاختبار.

pullDirectories[]

object (IosDeviceFile)

قائمة بالأدلة على الجهاز المطلوب تحميلها إلى Cloud Storage في نهاية الاختبار.

يجب أن تكون الأدلة إما في دليل مشترك (مثل /private/var/mobile/Media) أو داخل دليل يمكن الوصول إليه داخل نظام ملفات التطبيق (مثل /Documents) من خلال تحديد معرّف الحزمة.

ملف IosDevice

ملف أو دليل مطلوب تثبيته على الجهاز قبل بدء الاختبار

تمثيل JSON
{
  "content": {
    object (FileReference)
  },
  "bundleId": string,
  "devicePath": string
}
الحقول
content

object (FileReference)

الملف المصدر

bundleId

string

رقم تعريف حزمة التطبيق الذي يتوفّر فيه هذا الملف

تضع تطبيقات iOS وضع الحماية في نظام الملفات الخاص بها، لذلك يجب أن تحدِّد ملفات التطبيقات التطبيق المثبَّت على الجهاز.

devicePath

string

موقع الملف على الجهاز، داخل نظام ملفات التطبيق في وضع الحماية

اختبار Androidمرحبًا

يشير ذلك المصطلح إلى اختبار لتطبيق Android يمكنه التحكّم في أحد مكوّنات Android بشكل مستقل عن مراحل حياته الطبيعية. تُجري اختبارات قياس حالة Android حزمة APK للتطبيق وتختبر حزمة APK داخل العملية نفسها على جهاز Androidافتراضي أو مادي. كما يحددون فئة عدّاء الاختبار، مثل com.google.GoogleTestRunner، والتي يمكن أن تختلف في إطار عمل الأدوات المحدد الذي تم اختياره.

يمكنك الانتقال إلى https://developer.android.com/training/testing/Fundamentals لمعرفة المزيد من المعلومات حول أنواع اختبارات Android.

تمثيل JSON
{
  "testApk": {
    object (FileReference)
  },
  "appPackageId": string,
  "testPackageId": string,
  "testRunnerClass": string,
  "testTargets": [
    string
  ],
  "orchestratorOption": enum (OrchestratorOption),
  "shardingOption": {
    object (ShardingOption)
  },

  // Union field app_under_test can be only one of the following:
  "appApk": {
    object (FileReference)
  },
  "appBundle": {
    object (AppBundle)
  }
  // End of list of possible types for union field app_under_test.
}
الحقول
testApk

object (FileReference)

مطلوب. حزمة APK التي تتضمّن رمز الاختبار المطلوب تنفيذه

appPackageId

string

حزمة جافا للتطبيق قيد الاختبار. ويتم تحديد القيمة التلقائية من خلال فحص بيان التطبيق.

testPackageId

string

حزمة جافا للاختبار المراد تنفيذه. ويتم تحديد القيمة التلقائية من خلال فحص بيان التطبيق.

testRunnerClass

string

فئة instrumentationTestRunner". ويتم تحديد القيمة التلقائية من خلال فحص بيان التطبيق.

testTargets[]

string

يجب أن يكون كل استهداف مؤهَّلاً بالكامل باسم الحزمة أو اسم الفئة بأحد التنسيقات التالية:

  • "package packageName"
  • "class packageName.class_name"
  • "class packageName.class_name#methodName"

وإذا كانت فارغة، سيتم تنفيذ جميع الأهداف في الوحدة.

orchestratorOption

enum (OrchestratorOption)

اختيار ما إذا كان إجراء كل اختبار ضمن استدعاء الأدوات من خلال Android Test Orchestrator أم لا. ** لا يتوافق Orchestrator إلا مع الإصدار 1.1 من AndroidJUnitRunner أو الإصدارات الأحدث. ** يوفر منسّق المقطوعات الموسيقية المزايا التالية:

  • ما مِن حالة مشتركة
  • الأعطال معزولة
  • يتم تحديد نطاق السجلّات لكل اختبار.

يمكنك الانتقال إلى https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator للحصول على مزيد من المعلومات حول برنامج Android Test Orchestrator.

وفي حال ترك هذه السياسة بدون ضبط، سيتم إجراء الاختبار بدون تحديد التنسيق.

shardingOption

object (ShardingOption)

خيار إجراء اختبارات في أجزاء متعددة بالتوازي.

حقل الاتحاد app_under_test. مطلوب. يمكن أن يكون app_under_test واحدًا فقط مما يلي:
appApk

object (FileReference)

يتم اختبار حزمة APK للتطبيق.

appBundle

object (AppBundle)

حزمة تطبيق متعددة APK خاصة بالتطبيق قيد الاختبار.

حزمة AppBundle

تنسيق ملف "مجموعة حزمات تطبيق Android"، يحتوي على ملف BundleConfig.pb أو دليل الوحدة الأساسية أو أدلة لوحدات الميزات الديناميكية أو صفر أو أكثر

يمكنك الانتقال إلى https://developer.android.com/guide/app-bundle/build للحصول على إرشادات حول إنشاء حِزم التطبيقات.

تمثيل JSON
{

  // Union field bundle can be only one of the following:
  "bundleLocation": {
    object (FileReference)
  }
  // End of list of possible types for union field bundle.
}
الحقول
حقل الاتحاد bundle. مطلوب. معلومات الموقع الجغرافي للحِزمة يمكن أن يكون bundle واحدًا فقط مما يلي:
bundleLocation

object (FileReference)

ملف .aab يمثّل حِزمة التطبيق قيد الاختبار.

خيار الأوركسترا

تحدّد هذه السمة طريقة تنفيذ الاختبار.

تعدادات
ORCHESTRATOR_OPTION_UNSPECIFIED القيمة التلقائية: سيختار الخادم الوضع. يشير ذلك حاليًا إلى أنّ الاختبار سيُجري بدون تحديد التنسيق. في المستقبل، سيتم إجراء جميع اختبارات الأدوات مع المسؤول عن التنظيم. يُنصح بشدة باستخدام الأوركسترا نظرًا إلى جميع الفوائد التي يقدمها.
USE_ORCHESTRATOR قم بإجراء الاختبار باستخدام الأوركسترا. ** متوافق فقط مع الإصدار 1.1 من AndroidJUnitRunner أو الإصدارات الأحدث. ** يُنصح به.
DO_NOT_USE_ORCHESTRATOR يمكنك إجراء الاختبار بدون الاستعانة بمنظّم.

خيار التقسيم إلى أجزاء

خيارات تفعيل عملية التقسيم إلى أجزاء

تمثيل JSON
{

  // Union field option can be only one of the following:
  "uniformSharding": {
    object (UniformSharding)
  },
  "manualSharding": {
    object (ManualSharding)
  },
  "smartSharding": {
    object (SmartSharding)
  }
  // End of list of possible types for union field option.
}
الحقول

حقل الاتحاد option.

يمكن أن يكون option واحدًا فقط مما يلي:

uniformSharding

object (UniformSharding)

يُقسم حالات الاختبار بشكل موحّد بناءً على إجمالي عدد الأجزاء.

manualSharding

object (ManualSharding)

تقسّم الأجزاء الحالات إلى مجموعات محددة من الحزم و/أو الفئات و/أو الطرق.

smartSharding

object (SmartSharding)

يتم اختبار الأجزاء استنادًا إلى سجلّات توقيت حالات الاختبار السابقة.

تقسيم موحَّد

يُقسم حالات الاختبار بشكل موحّد بناءً على إجمالي عدد الأجزاء.

بالنسبة إلى اختبارات قياس حالة التطبيق، ستتم ترجمة النص إلى " -e numShard" و"-e shardIndex" وسيطات AndroidJUnitRunner. عند تفعيل عملية التقسيم الموحّدة، يكون تحديد أي من هذه الوسيطات المقسَّمة عبر environmentVariables غير صالح.

واستنادًا إلى آلية التقسيم التي يستخدمها AndroidJUnitRunner، ليس هناك ما يضمن توزيع حالات الاختبار بشكل موحد على جميع الأجزاء.

تمثيل JSON
{
  "numShards": integer
}
الحقول
numShards

integer

مطلوب. إجمالي عدد الأجزاء المراد إنشاؤها. ويجب أن يكون دائمًا عددًا موجبًا لا يزيد عن إجمالي عدد حالات الاختبار. عند اختيار جهاز مادي واحد أو أكثر، يجب أن يكون عدد الأجزاء <= 50. عند اختيار جهاز افتراضي واحد أو أكثر من أجهزة ARM الافتراضية، يجب أن يكون العدد <= 200. عند اختيار أجهزة افتراضية بحجم x86 فقط، يجب أن تكون القيمة أقل من أو يساوي 500.

التقسيم اليدوي

تقسّم الأجزاء الحالات إلى مجموعات محددة من الحزم و/أو الفئات و/أو الطرق.

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

تمثيل JSON
{
  "testTargetsForShard": [
    {
      object (TestTargetsForShard)
    }
  ]
}
الحقول
testTargetsForShard[]

object (TestTargetsForShard)

مطلوب. مجموعة من الحِزم و/أو الفئات و/أو طرق الاختبار التي سيتم تشغيلها لكل جزء يتم إنشاؤه يدويًا يجب تحديد جزء واحد على الأقل في حالة وجود هذا الحقل. عند اختيار جهاز فعلي واحد أو أكثر، يجب أن يكون عدد مرات تكرار testTargetsForShard أقل من أو تساوي 50. عند اختيار جهاز افتراضي واحد أو أكثر من أجهزة ARM الافتراضية، يجب أن يكون العدد <= 200. عند اختيار أجهزة افتراضية بحجم x86 فقط، يجب أن تكون القيمة أقل من أو يساوي 500.

TestTargetsForShard

أهداف اختبارية للجزء

تمثيل JSON
{
  "testTargets": [
    string
  ]
}
الحقول
testTargets[]

string

مجموعة من الحزم و/أو الفئات و/أو طرق الاختبار التي سيتم تشغيلها لكل جزء. يجب تحديد الأهداف بتنسيق الوسيطة AndroidJUnitRunner. على سبيل المثال، "package com.my.packages" "class com.my.package.MyClass".

يجب أن يكون عدد testTargets أكبر من 0.

التقسيم الذكي

يتم اختبار الأجزاء استنادًا إلى سجلّات توقيت حالات الاختبار السابقة.

تمثيل JSON
{
  "targetedShardDuration": string
}
الحقول
targetedShardDuration

string (Duration format)

مقدار الوقت الذي يجب أن تستغرقه الاختبارات ضمن الجزء.

الإعدادات التلقائية: 300 ثانية (5 دقائق). الحدّ الأدنى المسموح به: 120 ثانية (دقيقتان).

يتم تعيين عدد الأجزاء ديناميكيًا استنادًا إلى الوقت، وصولاً إلى الحد الأقصى للأجزاء (الموضح أدناه). لضمان حالة اختبار واحدة على الأقل لكل جزء، لن يتجاوز عدد الأجزاء عدد حالات الاختبار. سيتم تجاوز مدة الأجزاء في الحالات التالية:

  • تم بلوغ الحد الأقصى للأجزاء، ويتبقى وقت اختبار محسوب أكثر لتخصيصه على أجزاء.
  • ويُقدَّر أنّ مدة أي اختبار فردي أطول من مدة الجزء المستهدَفة.

مدة الأجزاء غير مضمونة لأن التقسيم الذكي يستخدم سجلّ حالات الاختبار والمدد التلقائية التي قد لا تكون دقيقة. قواعد العثور على سجلات توقيت حالة الاختبار هي:

  • إذا عالجت الخدمة حالة اختبار خلال آخر 30 يومًا، سيتم استخدام سجلّ آخر حالة اختبار ناجحة.
  • وبالنسبة إلى حالات الاختبار الجديدة، سيتم استخدام متوسط مدة حالات الاختبار المعروفة الأخرى.
  • إذا لم تكن هناك سجلات لتوقيت حالة الاختبار السابقة، تكون المدة التلقائية لحالة الاختبار هي 15 ثانية.

ونظرًا لأن مدة الجزء الفعلية يمكن أن تتجاوز مدة الجزء المستهدف، ننصحك بضبط القيمة المستهدفة على أقل من 5 دقائق على الأقل عن الحد الأقصى المسموح به لمهلة الاختبار (45 دقيقة للأجهزة الفعلية و60 دقيقة للأجهزة الافتراضية)، أو باستخدام القيمة المخصّصة لمهلة الاختبار التي حددتها. تعمل هذه الطريقة على تجنب إلغاء الجزء قبل اكتمال جميع الاختبارات.

تجدر الإشارة إلى أنّ هناك حدًا أقصى لعدد الأجزاء. عند اختيار جهاز مادي واحد أو أكثر، يجب أن يكون عدد الأجزاء <= 50. عند اختيار جهاز افتراضي واحد أو أكثر من أجهزة ARM الافتراضية، يجب أن يكون العدد <= 200. عند اختيار أجهزة افتراضية بحجم x86 فقط، يجب أن تكون القيمة أقل من أو يساوي 500. لضمان حالة اختبار واحدة على الأقل لكل جزء، لن يتجاوز عدد الأجزاء عدد حالات الاختبار. يتم احتساب كل جزء يتم إنشاؤه ضمن حصة الاختبار اليومية.

مدة بالثواني مكونة من تسعة أرقام كسور كحد أقصى وتنتهي بالأرقام "s" مثال: "3.5s"

AndroidRoboTest

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

تمثيل JSON
{
  "appPackageId": string,
  "appInitialActivity": string,
  "maxDepth": integer,
  "maxSteps": integer,
  "roboDirectives": [
    {
      object (RoboDirective)
    }
  ],
  "roboMode": enum (RoboMode),
  "roboScript": {
    object (FileReference)
  },
  "startingIntents": [
    {
      object (RoboStartingIntent)
    }
  ],

  // Union field app_under_test can be only one of the following:
  "appApk": {
    object (FileReference)
  },
  "appBundle": {
    object (AppBundle)
  }
  // End of list of possible types for union field app_under_test.
}
الحقول
appPackageId

string

حزمة جافا للتطبيق قيد الاختبار. ويتم تحديد القيمة التلقائية من خلال فحص بيان التطبيق.

appInitialActivity

string

النشاط الأولي الذي يجب استخدامه لبدء التطبيق.

maxDepth
(deprecated)

integer

يمكنك استكشاف أقصى عمق لحزمة الاجتياز التي يمكن أن يستكشفها Robo. يجب أن يكون عدد الصور 2 على الأقل حتى يستكشف Robo التطبيق بعد النشاط الأول. والعدد التلقائي هو 50.

maxSteps
(deprecated)

integer

الحدّ الأقصى لعدد الخطوات التي يمكن أن ينفذها Robo. الوضع التلقائي ليس هناك حد أقصى.

roboDirectives[]

object (RoboDirective)

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

roboMode

enum (RoboMode)

الوضع الذي يجب أن يعمل به Robo يجب أن يسمح معظم العملاء للخادم بتعبئة هذا الحقل تلقائيًا.

roboScript

object (FileReference)

ملف JSON يضم سلسلة من الإجراءات التي يجب أن ينفذها Robo كمقدمة للزحف.

startingIntents[]

object (RoboStartingIntent)

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

حقل الاتحاد app_under_test. مطلوب. يمكن أن يكون app_under_test واحدًا فقط مما يلي:
appApk

object (FileReference)

يتم اختبار حزمة APK للتطبيق.

appBundle

object (AppBundle)

حزمة تطبيق متعددة APK خاصة بالتطبيق قيد الاختبار.

توجيه RoboDirective

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

تمثيل JSON
{
  "resourceName": string,
  "inputText": string,
  "actionType": enum (RoboActionType)
}
الحقول
resourceName

string

مطلوب. اسم مورد android لعنصر واجهة المستخدم المستهدف. على سبيل المثال، في Java: R.string.foo في xml: @string/foo فقط "foo" مطلوبة. المستند المرجعي: https://developer.android.com/guide/topics/resources/accessing-resources.html

inputText

string

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

actionType

enum (RoboActionType)

مطلوب. نوع الإجراء الذي يجب أن ينفذه Robo على العنصر المحدد.

نوع الإجراء RoboActionType

الإجراءات التي يمكن لنظام Robo تنفيذها على عناصر واجهة المستخدم

تعدادات
ACTION_TYPE_UNSPECIFIED يُرجى عدم استخدامها. لإصدارات Proto فقط.
SINGLE_CLICK يمكنك توجيه Robo للنقر على العنصر المحدّد. لا يعمل إذا كان العنصر المحدد غير قابل للنقر.
ENTER_TEXT يمكنك توجيه Robo لإدخال نص على العنصر المحدّد. لا يمكن الاختيار إذا لم يتم تفعيل العنصر المحدد أو إذا كان لا يسمح بإدخال النص.
IGNORE توجيه Robo إلى تجاهل التفاعلات مع عنصر معيّن.

وضع RoboMode

الوضع الذي يجب أن يعمل به Robo

تعدادات
ROBO_MODE_UNSPECIFIED وهذا يعني أنه على الخادم اختيار الوضع. يُنصح به.
ROBO_VERSION_1 تشغيل Robo في وضع UIAutomator فقط بدون إعادة إيقاف التطبيق
ROBO_VERSION_2 تشغيل Robo في قهوة الإسبريسو العادية باستخدام الإجراء الاحتياطي UIAutomator

نية بدء Robo التحكّم

رسالة لتحديد أنشطة البدء المراد الزحف إليها

تمثيل JSON
{
  "timeout": string,

  // Union field starting_intent can be only one of the following:
  "launcherActivity": {
    object (LauncherActivityIntent)
  },
  "startActivity": {
    object (StartActivityIntent)
  },
  "noActivity": {
    object (NoActivityIntent)
  }
  // End of list of possible types for union field starting_intent.
}
الحقول
timeout

string (Duration format)

مهلة بالثواني لكل هدف.

مدة بالثواني مكونة من تسعة أرقام كسور كحد أقصى وتنتهي بالأرقام "s" مثال: "3.5s"

حقل الاتحاد starting_intent. مطلوب. تفاصيل النية لبدء نشاط يمكن أن يكون starting_intent واحدًا فقط مما يلي:
launcherActivity

object (LauncherActivityIntent)

عبارة عن الغرض من بدء نشاط مشغّل التطبيقات الرئيسي.

startActivity

object (StartActivityIntent)

غرض يبدأ نشاطًا بتفاصيل محدّدة

noActivity

object (NoActivityIntent)

تخطي نشاط البدء

نية مشغّل التطبيقات

لا يحتوي هذا النوع على أي حقول.

يحدِّد هذا الإعداد هدفًا يبدأ نشاط مشغّل التطبيقات الرئيسي.

StartActivityIntent

هدف بداية يحدّده إجراء ومعرّف الموارد المنتظم (URI) والفئات.

تمثيل JSON
{
  "action": string,
  "uri": string,
  "categories": [
    string
  ]
}
الحقول
action

string

اسم الإجراء. مطلوب لـ START_ACTIVITY.

uri

string

معرّف الموارد المنتظم (URI) للإجراء.

categories[]

string

فئات الأهداف المطلوب ضبطها على الغرض

NoActivityIntent

لا يحتوي هذا النوع على أي حقول.

تخطي نشاط البدء

حلقة AndroidTestLoop

يشير ذلك المصطلح إلى اختبار لأحد تطبيقات Android يتضمّن حلقة اختبار. الغرض من <intent-name> ستتم إضافته ضمنيًا، نظرًا لأن تطبيق "ألعاب Google" هو المستخدم الوحيد لواجهة برمجة التطبيقات هذه في الوقت الحالي.

تمثيل JSON
{
  "appPackageId": string,
  "scenarios": [
    integer
  ],
  "scenarioLabels": [
    string
  ],

  // Union field app_under_test can be only one of the following:
  "appApk": {
    object (FileReference)
  },
  "appBundle": {
    object (AppBundle)
  }
  // End of list of possible types for union field app_under_test.
}
الحقول
appPackageId

string

حزمة جافا للتطبيق قيد الاختبار. ويتم تحديد الإعداد التلقائي من خلال فحص بيان التطبيق.

scenarios[]

integer

تمثّل هذه السمة قائمة بالسيناريوهات التي يجب إجراؤها أثناء الاختبار. والإعداد التلقائي هو جميع حلقات الاختبار، والمشتقة من بيان التطبيق.

scenarioLabels[]

string

تمثّل هذه السمة قائمة بتصنيفات السيناريوهات التي يجب تشغيلها أثناء الاختبار. يجب تعيين تصنيفات السيناريوهات إلى التصنيفات المحددة في بيان التطبيق. على سبيل المثال، يضيف Player_experience وcom.google.test.loops.player_experience جميع الحلقات المصنفة في البيان بالاسم com.google.test.loops.player_experience إلى عملية التنفيذ. يمكن أيضًا تحديد السيناريوهات في حقل السيناريوهات.

حقل الاتحاد app_under_test. مطلوب. حزمة Android المطلوب اختبارها يمكن أن يكون app_under_test واحدًا فقط مما يلي:
appApk

object (FileReference)

يتم اختبار حزمة APK للتطبيق.

appBundle

object (AppBundle)

حزمة تطبيق متعددة APK خاصة بالتطبيق قيد الاختبار.

اختبار IosXcTest

يشير ذلك المصطلح إلى اختبار لتطبيق iOS يستخدم إطار العمل XCTest. تدعم Xcode خيار "إنشاء للاختبار"، الذي ينشئ ملف .xctestrun يحتوي على مواصفات الاختبار (الوسيطات وطرق الاختبار وما إلى ذلك). يقبل هذا النوع من الاختبار ملف ZIP يحتوي على ملف xctestrun والمحتوى المقابل لدليل Build/Products الذي يحتوي على جميع البرامج الثنائية اللازمة لإجراء الاختبارات.

تمثيل JSON
{
  "testsZip": {
    object (FileReference)
  },
  "xctestrun": {
    object (FileReference)
  },
  "xcodeVersion": string,
  "appBundleId": string,
  "testSpecialEntitlements": boolean
}
الحقول
testsZip

object (FileReference)

مطلوب. ملف zip. يحتوي على ملف xctestrun ومحتوى دليل DerivedData/Build/Products. يتم تجاهل ملف .xctestrun في ملف zip هذا إذا تم تحديد حقل xctestrun.

xctestrun

object (FileReference)

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

xcodeVersion

string

إصدار Xcode الذي يجب استخدامه للاختبار. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة. يتم ضبط الإعدادات التلقائية على أحدث إصدار من Xcode يتوافق مع Firebase Test Lab.

appBundleId

string

النتائج فقط. معرِّف الحزمة للتطبيق قيد الاختبار.

testSpecialEntitlements

boolean

خيار اختبار أذونات التطبيق الخاصة سيؤدي ضبط ذلك إلى إعادة توقيع التطبيق الذي يمتلك أذونات خاصة مع معرّف تطبيق صريح. يتيح هذا الإذن حاليًا اختبار إذن الوصول إلى واجهة التطبيقات والتوافق مع التطبيقات.

حلقة IosTestLoop

يشير ذلك المصطلح إلى اختبار لتطبيق iOS ينفذ سيناريو واحد أو أكثر من سيناريوهات حلقة الألعاب. يقبل هذا النوع من الاختبار تطبيقًا من الأرشيف (ملف .ipa) وقائمة بسيناريوهات الأعداد الصحيحة التي سيتم تنفيذها في التطبيق بشكل تسلسلي.

تمثيل JSON
{
  "appIpa": {
    object (FileReference)
  },
  "scenarios": [
    integer
  ],
  "appBundleId": string
}
الحقول
appIpa

object (FileReference)

مطلوب. ملف .ipa للتطبيق المطلوب اختباره.

scenarios[]

integer

تمثّل هذه السمة قائمة بالسيناريوهات التي يجب إجراؤها أثناء الاختبار. ويتم ضبط القيمة التلقائية على سيناريو واحد 0 في حال عدم تحديده.

appBundleId

string

النتائج فقط. معرِّف الحزمة للتطبيق قيد الاختبار.

IosRoboTest

يشير ذلك المصطلح إلى اختبار يستكشف تطبيق iOS على جهاز iOS.

تمثيل JSON
{
  "appIpa": {
    object (FileReference)
  },
  "appBundleId": string,
  "roboScript": {
    object (FileReference)
  }
}
الحقول
appIpa

object (FileReference)

مطلوب. يجب استخدام عنوان IP المخزن في هذا الملف لتشغيل الاختبار.

appBundleId

string

رقم تعريف الحِزمة الخاصة بالتطبيق تحت الاختبار. ويتم تحديد ذلك من خلال فحص ملف "Info.plist" للتطبيق. الملف.

roboScript

object (FileReference)

Roboscript اختياري لتخصيص الزحف. يمكنك الاطّلاع على https://firebase.google.com/docs/test-lab/android/robo-scripts-reference للحصول على مزيد من المعلومات حول Roboscripts.

مصفوفة البيئة

مصفوفة البيئات التي سيتم تنفيذ الاختبار فيها.

تمثيل JSON
{

  // Union field environment_matrix can be only one of the following:
  "androidMatrix": {
    object (AndroidMatrix)
  },
  "androidDeviceList": {
    object (AndroidDeviceList)
  },
  "iosDeviceList": {
    object (IosDeviceList)
  }
  // End of list of possible types for union field environment_matrix.
}
الحقول
حقل الاتحاد environment_matrix. مطلوب. مصفوفة البيئة. يمكن أن يكون environment_matrix واحدًا فقط مما يلي:
androidMatrix

object (AndroidMatrix)

مصفوفة من أجهزة Android

androidDeviceList

object (AndroidDeviceList)

قائمة بأجهزة Android سيتم إجراء الاختبار على الأجهزة المحددة فقط.

iosDeviceList

object (IosDeviceList)

قائمة بأجهزة iOS.

مصفوفة Android

يتم تحديد مجموعة من التعديلات على إعدادات أجهزة Android من خلال عرض المنتجات المتقاطعة على المحاور المحددة. وسيتم توسيع نطاق واجهة برمجة التطبيقات AndroidMatrix داخليًا لتشمل مجموعة من أجهزة Android.

سيتم إنشاء مثيل للتباديل المتاحة فقط. يتم تجاهل التعديلات غير الصالحة (مثل النماذج/الإصدارات غير المتوافقة).

تمثيل JSON
{
  "androidModelIds": [
    string
  ],
  "androidVersionIds": [
    string
  ],
  "locales": [
    string
  ],
  "orientations": [
    string
  ]
}
الحقول
androidModelIds[]

string

مطلوب. أرقام تعريف مجموعة أجهزة Android التي سيتم استخدامها. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

androidVersionIds[]

string

مطلوب. أرقام تعريف مجموعة إصدار نظام التشغيل Android المطلوب استخدامها. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

locales[]

string

مطلوب. مجموعة اللغات التي سيتيحها جهاز الاختبار للاختبار. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

orientations[]

string

مطلوب. مجموعة الاتجاهات المراد الاختبار باستخدامها. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

قائمة أجهزة Android

قائمة بإعدادات أجهزة Android التي سيتم تنفيذ الاختبار فيها.

تمثيل JSON
{
  "androidDevices": [
    {
      object (AndroidDevice)
    }
  ]
}
الحقول
androidDevices[]

object (AndroidDevice)

مطلوب. قائمة بأجهزة Android.

قائمة IosDeviceList

قائمة بإعدادات أجهزة iOS التي سيتم تنفيذ الاختبار فيها.

تمثيل JSON
{
  "iosDevices": [
    {
      object (IosDevice)
    }
  ]
}
الحقول
iosDevices[]

object (IosDevice)

مطلوب. قائمة بأجهزة iOS.

جهاز Ios

جهاز iOS واحد

تمثيل JSON
{
  "iosModelId": string,
  "iosVersionId": string,
  "locale": string,
  "orientation": string
}
الحقول
iosModelId

string

مطلوب. رقم تعريف جهاز iOS المطلوب استخدامه. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

iosVersionId

string

مطلوب. معرّف إصدار البرنامج الرئيسي لنظام التشغيل iOS المطلوب استخدامه. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

locale

string

مطلوب. اللغة التي استخدمها جهاز الاختبار لإجراء الاختبار. استخدِم TestEnvironmentDiscoveryService للحصول على الخيارات المتوافقة.

orientation

string

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

تنفيذ الاختبار

يشير ذلك المصطلح إلى اختبار واحد يتم تنفيذه في بيئة واحدة.

تمثيل JSON
{
  "id": string,
  "matrixId": string,
  "projectId": string,
  "testSpecification": {
    object (TestSpecification)
  },
  "shard": {
    object (Shard)
  },
  "environment": {
    object (Environment)
  },
  "state": enum (TestState),
  "toolResultsStep": {
    object (ToolResultsStep)
  },
  "timestamp": string,
  "testDetails": {
    object (TestDetails)
  }
}
الحقول
id

string

النتائج فقط. المعرّف الفريد الذي تحدّده الخدمة

matrixId

string

النتائج فقط. معرِّف TestMatrix الذي يحتوي على.

projectId

string

النتائج فقط. المشروع على السحابة الإلكترونية المسؤول عن تنفيذ الاختبار

testSpecification

object (TestSpecification)

النتائج فقط. كيفية إجراء الاختبار.

shard

object (Shard)

النتائج فقط. تمثّل هذه السمة تفاصيل حول الجزء.

environment

object (Environment)

النتائج فقط. كيفية ضبط الأجهزة المضيفة.

state

enum (TestState)

النتائج فقط. يشير إلى التقدّم الحالي لتنفيذ الاختبار (على سبيل المثال، تم الانتهاء).

toolResultsStep

object (ToolResultsStep)

النتائج فقط. تتم كتابة نتائج عملية التنفيذ هذه.

timestamp

string (Timestamp format)

النتائج فقط. الوقت الذي تم فيه إنشاء عملية تنفيذ الاختبار هذه في البداية

طابع زمني بتنسيق RFC3339 حسب التوقيت العالمي المنسَّق (UTC) "زولو" بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: "2014-10-02T15:01:23Z" و"2014-10-02T15:01:23.045123456Z".

testDetails

object (TestDetails)

النتائج فقط. تفاصيل إضافية حول الاختبار الجاري.

الجزء

النتائج فقط. تمثّل هذه السمة تفاصيل حول الجزء.

تمثيل JSON
{
  "shardIndex": integer,
  "numShards": integer,
  "testTargetsForShard": {
    object (TestTargetsForShard)
  },
  "estimatedShardDuration": string
}
الحقول
shardIndex

integer

النتائج فقط. فهرس الجزء بين جميع الأجزاء.

numShards

integer

النتائج فقط. إجمالي عدد الأجزاء.

testTargetsForShard

object (TestTargetsForShard)

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

estimatedShardDuration

string (Duration format)

النتائج فقط. مدة الجزء المقدّرة استنادًا إلى سجلّات توقيت حالات الاختبار السابقة، إذا توفّرت.

مدة بالثواني مكونة من تسعة أرقام كسور كحد أقصى وتنتهي بالأرقام "s" مثال: "3.5s"

البيئة

البيئة التي يتم فيها إجراء الاختبار.

تمثيل JSON
{

  // Union field environment can be only one of the following:
  "androidDevice": {
    object (AndroidDevice)
  },
  "iosDevice": {
    object (IosDevice)
  }
  // End of list of possible types for union field environment.
}
الحقول
حقل الاتحاد environment. مطلوب. البيئة. يمكن أن يكون environment واحدًا فقط مما يلي:
androidDevice

object (AndroidDevice)

تمثّل هذه السمة جهاز Android يجب استخدامه مع اختبار Android.

iosDevice

object (IosDevice)

تمثّل هذه السمة جهاز iOS يجب استخدامه مع إجراء اختبار iOS.

حالة الاختبار

حالة (أي التقدم) لتنفيذ اختبار أو مصفوفة.

تعدادات
TEST_STATE_UNSPECIFIED يُرجى عدم استخدامها. لإصدارات Proto فقط.
VALIDATING يتم التحقق من صحة التنفيذ أو المصفوفة.
PENDING تنتظر عملية التنفيذ أو المصفوفة حتى تصبح الموارد متاحة.
RUNNING

تجري حاليًا معالجة التنفيذ.

لا يمكن ضبطها إلا عند التنفيذ.

FINISHED

انتهت عملية التنفيذ أو المصفوفة بشكل طبيعي.

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

ERROR توقفت عملية التنفيذ أو المصفوفة بسبب حدوث خلل في البنية الأساسية.
UNSUPPORTED_ENVIRONMENT

لم يتم تنفيذ عملية التنفيذ لأنّها تتوافق مع بيئة غير متوافقة.

لا يمكن ضبطها إلا عند التنفيذ.

INCOMPATIBLE_ENVIRONMENT

لم يتم تنفيذ التنفيذ لأنّ المدخلات المقدَّمة غير متوافقة مع البيئة المطلوبة.

مثال: إصدار AndroidVersion المطلوب أقل من قيمة minSdkVersion في حزمة APK

لا يمكن ضبطها إلا عند التنفيذ.

INCOMPATIBLE_ARCHITECTURE

لم يتم تنفيذ التنفيذ لأنّ المدخلات المقدَّمة غير متوافقة مع البنية المطلوبة.

مثال: الجهاز المطلوب لا يتيح تشغيل الرمز الأصلي في حزمة APK المقدَّمة

لا يمكن ضبطها إلا عند التنفيذ.

CANCELLED

ألغى المستخدم عملية التنفيذ.

لا يمكن ضبطها إلا عند التنفيذ.

INVALID

لم يتم تنفيذ عملية التنفيذ أو المصفوفة لأنّ المدخلات التي تم تقديمها غير صالحة.

أمثلة: ملف الإدخال ليس من النوع المتوقع أو أنه تالف أو تالف أو تم وضع علامة عليه كبرامج ضارة

خطوة نتائج الأدوات

تمثّل هذه السمة مرجعًا لخطوات نتائج الأداة.

هذا له نتائج TestExecution.

تمثيل JSON
{
  "projectId": string,
  "historyId": string,
  "executionId": string,
  "stepId": string
}
الحقول
projectId

string

النتائج فقط. المشروع على السحابة الإلكترونية الذي يملك خطوة نتائج الأداة

historyId

string

النتائج فقط. معرّف سجلّ نتائج الأداة

executionId

string

النتائج فقط. تعرض الأداة معرّف التنفيذ.

stepId

string

النتائج فقط. معرّف الخطوة الذي تنتجه الأداة.

تفاصيل الاختبار

تفاصيل إضافية حول مستوى تقدّم الاختبار قيد التنفيذ.

تمثيل JSON
{
  "progressMessages": [
    string
  ],
  "errorMessage": string
}
الحقول
progressMessages[]

string

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

خلال عملية التنفيذ، قد يتم إلحاق بيانات جديدة بنهاية ProMessages.

errorMessage

string

النتائج فقط. إذا كانت قيمة TestState هي ERROR، فستحتوي هذه السلسلة على تفاصيل يمكن للإنسان قراءتها حول الخطأ.

مساحة تخزين النتائج

المواقع الجغرافية التي يتم فيها تخزين نتائج إجراء الاختبار

تمثيل JSON
{
  "googleCloudStorage": {
    object (GoogleCloudStorage)
  },
  "toolResultsHistory": {
    object (ToolResultsHistory)
  },
  "toolResultsExecution": {
    object (ToolResultsExecution)
  },
  "resultsUrl": string
}
الحقول
googleCloudStorage

object (GoogleCloudStorage)

مطلوب.

toolResultsHistory

object (ToolResultsHistory)

تقوم الأداة بنتائج السجل الذي يحتوي على تنفيذ نتائج الأداة التي تمت كتابة النتائج إليها.

إذا لم يتم توفير هذه المعلومات، ستختار الخدمة قيمة مناسبة.

toolResultsExecution

object (ToolResultsExecution)

النتائج فقط. تؤدي الأداة إلى تنفيذ النتائج التي تتم كتابة النتائج إليها.

resultsUrl

string

النتائج فقط. عنوان URL يؤدي إلى النتائج في "وحدة تحكُّم الويب في Firebase".

التخزين السحابي

موقع تخزين ضمن Google Cloud Storage (GCS)

تمثيل JSON
{
  "gcsPath": string
}
الحقول
gcsPath

string

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

سجلّ نتائج الأدوات

يمثل موردًا لسجل النتائج في الأداة.

تمثيل JSON
{
  "projectId": string,
  "historyId": string
}
الحقول
projectId

string

مطلوب. المشروع على السحابة الإلكترونية الذي يملك سجلّ نتائج الأداة

historyId

string

مطلوب. معرّف سجلّ نتائج الأداة

تنفيذ نتائج الأدوات

تمثل موردًا لتنفيذ النتائج للأداة.

هذا له نتائج TestMatrix.

تمثيل JSON
{
  "projectId": string,
  "historyId": string,
  "executionId": string
}
الحقول
projectId

string

النتائج فقط. المشروع على السحابة الإلكترونية الذي يملك أداة تنفيذ النتائج

historyId

string

النتائج فقط. معرّف سجلّ نتائج الأداة

executionId

string

النتائج فقط. تعرض الأداة معرّف التنفيذ.

تفاصيل غير صالحة للمصفوفة

السبب التفصيلي الذي أدّى إلى اعتبار المصفوفة "غير صالحة".

تعدادات
INVALID_MATRIX_DETAILS_UNSPECIFIED يُرجى عدم استخدامها. لإصدارات Proto فقط.
DETAILS_UNAVAILABLE المصفوفة غير صالحة، ولكن لا تتوفر أي تفاصيل أخرى.
MALFORMED_APK تعذّر تحليل حزمة APK لتطبيق الإدخال.
MALFORMED_TEST_APK تعذّر تحليل ملف APK لاختبار الإدخال.
NO_MANIFEST تعذَّر العثور على ملف AndroidManifest.xml.
NO_PACKAGE_NAME لا يكشف بيان APK عن اسم حزمة.
INVALID_PACKAGE_NAME رقم تعريف تطبيق APK (يُعرف أيضًا باسم الحزمة) غير صالح. يمكنك الاطّلاع أيضًا على الرابط https://developer.android.com/studio/build/application-id.
TEST_SAME_AS_APP حزمة الاختبار وحزمة التطبيق متطابقة.
NO_INSTRUMENTATION لا تعرِّف حزمة APK للاختبار عن أداة.
NO_SIGNATURE لا يحتوي تطبيق الإدخال، apk، على توقيع.
INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE فئة عدّاء الاختبار التي حدّدها المستخدم أو في ملف بيان حزمة APK الخاصة بالاختبار غير متوافقة مع برنامج Android Test Orchestrator. لا يتوافق Orchestrator إلا مع الإصدار 1.1 من AndroidJUnitRunner أو الإصدارات الأحدث. يمكن تعطيل Orchestrator باستخدام DO_NOT_USE_ORCHESTRATOR OrchestratorOption.
NO_TEST_RUNNER_CLASS

لا تحتوي حزمة APK الاختبارية على فئة اختبار تشغيل الاختبار التي حدّدها المستخدم أو في ملف البيان. وقد يرجع ذلك إلى أحد الأسباب التالية:

  • قدم المستخدم اسم فئة عدّاء غير صحيح، أو
  • برنامج تشغيل الاختبار غير مضمّن في حزمة APK الاختبارية (قد يكون في حزمة APK للتطبيق بدلاً من ذلك).
NO_LAUNCHER_ACTIVITY تعذّر العثور على نشاط مشغّل التطبيقات الرئيسي.
FORBIDDEN_PERMISSIONS يفصح التطبيق عن إذن واحد أو أكثر غير مسموح به.
INVALID_ROBO_DIRECTIVES هناك تعارض في الإرشادات المسجَّلة التلقائية.
INVALID_RESOURCE_NAME يوجد اسم مورد واحد غير صالح على الأقل في توجيهات robo المقدمة
INVALID_DIRECTIVE_ACTION تعريف غير صالح للإجراء في توجيهات robo (على سبيل المثال، يتضمن إجراء النقر أو التجاهل حقل إدخال نصي)
TEST_LOOP_INTENT_FILTER_NOT_FOUND ليس هناك فلتر أهداف حلقة الاختبار، أو أن الفلتر الذي تم تقديمه لم يتم تنسيقه بشكلٍ صحيح.
SCENARIO_LABEL_NOT_DECLARED يحتوي الطلب على تصنيف سيناريو لم يتم تعريفه في البيان.
SCENARIO_LABEL_MALFORMED حدث خطأ أثناء تحليل قيمة تصنيف.
SCENARIO_NOT_DECLARED يحتوي الطلب على رقم سيناريو لم يتم تعريفه في البيان.
DEVICE_ADMIN_RECEIVER تطبيقات مشرف الجهاز غير مسموح بها.
MALFORMED_XC_TEST_ZIP تمت صياغة XCTest المضغوط بشكل غير صحيح. لم يكن الملف المضغوط يحتوي على ملف xctestrun واحد وعلى محتوى دليل DerivedData/Build/Products.
BUILT_FOR_IOS_SIMULATOR تم تصميم XCTest المضغوط لمحاكي iOS بدلاً من جهاز فعلي.
NO_TESTS_IN_XC_TEST_ZIP لم يحدِّد ملف xctestrun أي أهداف اختبار.
USE_DESTINATION_ARTIFACTS هدف واحد أو أكثر من أهداف الاختبار المحدّدة في ملف .xctestrun يحدّد خيار "UseDestinationArtifacts"، وهو أمر غير مسموح به.
TEST_NOT_APP_HOSTED يجب أن تتضمّن اختبارات XC التي يتم إجراؤها على الأجهزة الفعلية IsAppHostedTestBundle == "صحيح" في ملف xctestrun.
PLIST_CANNOT_BE_PARSED تعذّر تحليل ملف Info.plist في ملف ZCTest بتنسيق zip.
TEST_ONLY_APK

تم وضع علامة "testOnly" على حزمة APK. متوقّفة نهائيًا وغير مُستخدَمة حاليًا.

MALFORMED_IPA تعذّر تحليل عنوان IPA للإدخال.
MISSING_URL_SCHEME لا يسجّل التطبيق مخطط عناوين URL لحلقة الألعاب.
MALFORMED_APP_BUNDLE تعذَّرت معالجة حزمة تطبيقات iOS (.app).
NO_CODE_APK لا تحتوي حزمة APK على أي رمز. يمكنك الاطّلاع أيضًا على الرابط https://developer.android.com/guide/topics/manifest/application-element.html#code.
INVALID_INPUT_APK إما أن مسار ملف APK الذي تم إدخاله غير صحيح، أو أن ملف APK غير موجود، أو ليس لدى المستخدم إذن بالوصول إلى ملف APK.
INVALID_APK_PREVIEW_SDK تم إنشاء حزمة APK لحزمة تطوير برامج (SDK) للمعاينة غير متوافقة.
MATRIX_TOO_LARGE تم توسيع المصفوفة لتحتوي على عدد كبير جدًا من عمليات التنفيذ.
TEST_QUOTA_EXCEEDED لا تتوفّر حصة اختبارية كافية لتنفيذ عمليات التنفيذ في هذه المصفوفة.
SERVICE_NOT_ACTIVATED واجهة برمجة تطبيقات خدمة السحابة الإلكترونية المطلوبة غير مفعَّلة. يُرجى الانتقال إلى: https://firebase.google.com/docs/test-lab/android/persistent#requirements
UNKNOWN_PERMISSION_ERROR حدثت مشكلة غير معروفة في الإذن أثناء إجراء هذا الاختبار.

MatrixErrorDetail

تصف خطأً أو مشكلة واحدة في مصفوفة.

تمثيل JSON
{
  "reason": string,
  "message": string
}
الحقول
reason

string

النتائج فقط. سبب الخطأ. هذه قيمة ثابتة في OFFER_SNAKE_CASE تحدد سبب الخطأ.

message

string

النتائج فقط. رسالة يمكن لشخص عادي قراءتها حول كيفية حدوث الخطأ في TestMatrix يتم التوسيع إلى الحقل reason مع تفاصيل إضافية وخيارات محتملة لحلّ المشكلة.

ملخّص النتائج

ملخّص نتائج مصفوفة اختبار مكتمل

تعدادات
OUTCOME_SUMMARY_UNSPECIFIED يُرجى عدم استخدامها. لإصدارات Proto فقط.
SUCCESS

تم تشغيل مصفوفة الاختبار بنجاح، على سبيل المثال:

  • تم اجتياز جميع حالات الاختبار.
  • لم يرصد Robo عطلاً في التطبيق قيد الاختبار.
FAILURE

تعذّر إتمام عملية التشغيل، على سبيل المثال:

  • تعذّر اجتياز اختبار واحد أو أكثر.
  • انتهت مهلة الاختبار.
  • تعطّل التطبيق قيد الاختبار.
INCONCLUSIVE حدث خطأ غير متوقع. من المفترض أن يتم اعتبار عملية التشغيل غير ناجحة، ولكن من المحتمل أن تكون هذه مشكلة عابرة، وقد تتم إعادة إجراء الاختبار بنجاح.
SKIPPED

تمّ تخطّي جميع الاختبارات، على سبيل المثال:

  • لم تكن جميع إعدادات الأجهزة متوافقة.

الطُرق

cancel

إلغاء عمليات تنفيذ الاختبار غير المكتملة في مصفوفة اختبار.

create

تنشئ وتدير مصفوفة من الاختبارات وفقًا للمواصفات المحددة.

get

للتحقق من حالة مصفوفة اختبار وعمليات التنفيذ بعد إنشائها.