REST Resource: projects.histories.executions.steps

المصدر: خطوة

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

يمكن أن تتداخل الخطوات (على سبيل المثال، قد يكون لخطوتين نفس وقت البدء إذا تم تنفيذ بعض العمليات بالتوازي).

فيما يلي مثال، لنفترض أن لدينا بناءًا مستمرًا يقوم بتنفيذ مشغل اختبار لكل تكرار. سيبدو سير العمل كما يلي: - يقوم المستخدم بإنشاء تنفيذ بالمعرف 1 - يقوم المستخدم بإنشاء TestExecutionStep بالمعرف 100 للتنفيذ 1 - يقوم المستخدم بتحديث TestExecutionStep بالمعرف 100 لإضافة سجل XML أولي + الخدمة بتوزيع سجلات XML وإرجاع TestExecutionStep مع تحديث (نتائج) الاختبار. - يقوم المستخدم بتحديث حالة TestExecutionStep بالمعرف 100 حتى اكتمال

يمكن تحديث الخطوة حتى يتم ضبط حالتها على "مكتمل" وعند هذه النقطة تصبح غير قابلة للتغيير.

تمثيل جيسون
{
  "stepId": string,
  "creationTime": {
    object (Timestamp)
  },
  "completionTime": {
    object (Timestamp)
  },
  "name": string,
  "description": string,
  "state": enum (State),
  "outcome": {
    object (Outcome)
  },
  "hasImages": boolean,
  "labels": {
    string: string,
    ...
  },
  "dimensionValue": {
    string: string,
    ...
  },
  "runDuration": {
    object (Duration)
  },
  "deviceUsageDuration": {
    object (Duration)
  },
  "multiStep": {
    object (MultiStep)
  },

  // Union field step can be only one of the following:
  "testExecutionStep": {
    object (TestExecutionStep)
  },
  "toolExecutionStep": {
    object (ToolExecutionStep)
  }
  // End of list of possible types for union field step.
}
مجالات
stepId

string

معرف فريد ضمن التنفيذ لهذه الخطوة.

يتم إرجاع INVALID_ARGUMENT إذا تم تعيين هذا الحقل أو الكتابة فوقه بواسطة المتصل.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء/التحديث: لم يتم التعيين مطلقًا
creationTime

object ( Timestamp )

الوقت الذي تم فيه إنشاء الخطوة.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء/التحديث: لم يتم التعيين مطلقًا
completionTime

object ( Timestamp )

الوقت الذي تم فيه تعيين حالة الخطوة على الاكتمال.

سيتم تعيين هذه القيمة تلقائيًا عند انتقال الحالة إلى حالة الاكتمال.

  • ردًا على ذلك: قم بتعيين ما إذا كانت حالة التنفيذ مكتملة.
  • في طلب الإنشاء/التحديث: لم يتم التعيين مطلقًا
name

string

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

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

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء: اضبط دائمًا
  • في طلب التحديث: لم يتم تعيينه مطلقًا
description

string

وصف لهذه الأداة على سبيل المثال: mvn clean package -D SkipTests=true

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء/التحديث
  • في طلب الإنشاء/التحديث: اختياري
state

enum ( State )

الحالة الأولية هي IN_PROGRESS. التحولات القانونية الوحيدة للحالة هي * IN_PROGRESS -> COMPLETE

سيتم إرجاع PRECONDITION_FAILED إذا تم طلب انتقال غير صالح.

إنه صالح لإنشاء خطوة مع تعيين الحالة على "مكتمل". لا يمكن ضبط الحالة على "كاملة" إلا مرة واحدة. سيتم إرجاع PRECONDITION_FAILED إذا تم ضبط الحالة على COMPLETE عدة مرات.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء/التحديث: اختياري
outcome

object ( Outcome )

تصنيف النتيجة، على سبيل المثال، إلى نجاح أو فشل

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء/التحديث
  • في طلب الإنشاء/التحديث: اختياري
hasImages

boolean

ما إذا كان أي من مخرجات هذه الخطوة عبارة عن صور يمكن جلب صورها المصغرة باستخدام Miniatures.list.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء/التحديث: لم يتم التعيين مطلقًا
labels

map (key: string, value: string)

أزواج مفاتيح/قيمة عشوائية مقدمة من المستخدم ومرتبطة بالخطوة.

يتحمل المستخدمون مسؤولية إدارة مساحة الاسم الرئيسية بحيث لا تتصادم المفاتيح عن طريق الخطأ.

سيتم إرجاع INVALID_ARGUMENT إذا تجاوز عدد التصنيفات 100 أو إذا تجاوز طول أي من المفاتيح أو القيم 100 حرف.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: اختياري؛ ستتم إضافة أي زوج مفتاح/قيمة جديد إلى الخريطة، وأي قيمة جديدة لمفتاح موجود ستقوم بتحديث قيمة هذا المفتاح

كائن يحتوي على قائمة "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

dimensionValue

map (key: string, value: string)

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

يجب أن تتطابق المفاتيح تمامًا مع Dimension_definition الخاص بالتنفيذ.

على سبيل المثال، إذا كان التنفيذ يحتوي على dimension_definition = ['attempt', 'device'] فيجب أن تحدد الخطوة قيمًا لهذه الأبعاد، على سبيل المثال. dimensionValue = ['attempt': '1', 'device': 'Nexus 6']

إذا كانت الخطوة لا تشارك في بُعد واحد من المصفوفة، فيجب أن تكون قيمة هذا البعد عبارة عن سلسلة فارغة. على سبيل المثال، إذا تم تنفيذ أحد الاختبارات بواسطة برنامج تشغيل لا يدعم إعادة المحاولة، فمن الممكن أن تحتوي الخطوة على dimensionValue = ['attempt': '', 'device': 'Nexus 6']

إذا كانت الخطوة لا تشارك في أي أبعاد للمصفوفة، فقد تترك DimensionValue بدون تعيين.

سيتم إرجاع PRECONDITION_FAILED في حالة عدم وجود أي من المفاتيح في Dimension_definition الخاص بالتنفيذ.

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

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

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة الإنشاء
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: لم يتم تعيينه مطلقًا

كائن يحتوي على قائمة "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

runDuration

object ( Duration )

كم من الوقت استغرق تنفيذ هذه الخطوة.

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

سيتم إرجاع PRECONDITION_FAILED إذا حاول أحد تعيين runDuration في خطوة تم تعيين هذا الحقل فيها بالفعل.

  • رداً على ذلك: موجود إذا تم تعيينه مسبقاً؛ حاضر دائمًا في الخطوة الكاملة
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: اختياري
deviceUsageDuration

object ( Duration )

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

هذا هو استخدام الجهاز المستخدم لغرض الفوترة، والذي يختلف عن runDuration، على سبيل المثال، لن يتم فرض رسوم على فشل البنية التحتية مقابل استخدام الجهاز.

سيتم إرجاع PRECONDITION_FAILED إذا حاول أحد تعيين استخدام الجهاز في خطوة تم تعيين هذا الحقل فيها بالفعل.

  • ردا على ذلك: موجود إذا تم تعيينه سابقا.
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: اختياري
multiStep

object ( MultiStep )

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

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

step ميدانية للاتحاد .

يمكن أن تكون step واحدة فقط مما يلي:

testExecutionStep

object ( TestExecutionStep )

إعدام عداء الاختبار.

toolExecutionStep

object ( ToolExecutionStep )

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

TestExecutionStep

خطوة تمثل الاختبارات الجارية.

وهو يقبل ملفات xml الخاصة بـ ant-junit والتي سيتم تحليلها إلى نتائج اختبار منظمة بواسطة الخدمة. يتم تحديث مسارات ملفات Xml لإلحاق المزيد من الملفات، ولكن لا يمكن حذفها.

يمكن للمستخدمين أيضًا إضافة نتائج الاختبار يدويًا باستخدام حقل test_result.

تمثيل جيسون
{
  "testSuiteOverviews": [
    {
      object (TestSuiteOverview)
    }
  ],
  "toolExecution": {
    object (ToolExecution)
  },
  "testIssues": [
    {
      object (TestIssue)
    }
  ],
  "testTiming": {
    object (TestTiming)
  }
}
مجالات
testSuiteOverviews[]

object ( TestSuiteOverview )

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

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

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: أبدًا (استخدم الطريقة المخصصة PublishXunitXmlFiles بدلاً من ذلك)
toolExecution

object ( ToolExecution )

يمثل تنفيذ عداء الاختبار.

سيتم استخدام رمز الخروج لهذه الأداة لتحديد ما إذا كان الاختبار قد نجح أم لا.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء/التحديث: اختياري
testIssues[]

object ( TestIssue )

المشكلات التي تمت ملاحظتها أثناء تنفيذ الاختبار.

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

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة الإنشاء أو التحديث
  • في طلب الإنشاء/التحديث: اختياري
testTiming

object ( TestTiming )

توقيت انهيار تنفيذ الاختبار.

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة الإنشاء أو التحديث
  • في طلب الإنشاء/التحديث: اختياري

تنفيذ الأداة

تنفيذ أداة تعسفية. يمكن أن يكون بمثابة أداة اختبار أو أداة لنسخ العناصر أو نشر التعليمات البرمجية.

تمثيل جيسون
{
  "commandLineArguments": [
    string
  ],
  "toolLogs": [
    {
      object (FileReference)
    }
  ],
  "exitCode": {
    object (ToolExitCode)
  },
  "toolOutputs": [
    {
      object (ToolOutputReference)
    }
  ]
}
مجالات
commandLineArguments[]

string

سطر الأوامر المميز الكامل بما في ذلك اسم البرنامج (أي ما يعادل argv في برنامج C).

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: لم يتم تعيينه مطلقًا
toolLogs[]

object ( FileReference )

تؤدي الإشارات إلى أي سجلات نصية عادية إلى إخراج تنفيذ الأداة.

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

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

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء/التحديث
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: اختياري، سيتم إلحاق أي قيمة مقدمة بالقائمة الموجودة
exitCode

object ( ToolExitCode )

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

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء/التحديث
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: اختياري، سيتم إرجاع خطأ FAILED_PRECONDITION إذا تم تعيين رمز الخروج بالفعل.
toolOutputs[]

object ( ToolOutputReference )

إشارات إلى الملفات غير الشفافة لأي تنسيق ناتج عن طريق تنفيذ الأداة.

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

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء/التحديث
  • في طلب الإنشاء: اختياري
  • في طلب التحديث: اختياري، سيتم إلحاق أي قيمة مقدمة بالقائمة الموجودة

ToolExitCode

رمز الخروج من تنفيذ الأداة.

تمثيل جيسون
{
  "number": integer
}
مجالات
number

integer

كود الخروج من تنفيذ الأداة القيمة 0 تعني أن التنفيذ كان ناجحًا.

  • ردا على ذلك: تعيين دائما
  • في طلب الإنشاء/التحديث: اضبط دائمًا

مشكلة الاختبار

تم اكتشاف مشكلة تحدث أثناء تنفيذ الاختبار.

تمثيل جيسون
{
  "errorMessage": string,
  "stackTrace": {
    object (StackTrace)
  },
  "warning": {
    object (Any)
  },
  "severity": enum (Severity),
  "type": enum (Type),
  "category": enum (Category)
}
مجالات
errorMessage

string

رسالة مختصرة يمكن قراءتها من قبل الإنسان تصف المشكلة. مطلوب.

stackTrace
(deprecated)

object ( StackTrace )

تم إهماله لصالح حقول تتبع المكدس داخل تحذيرات محددة.

warning

object ( Any )

رسالة تحذيرية تحتوي على تفاصيل إضافية حول المشكلة. يجب أن تكون دائمًا رسالة من com.google.devtools.toolresults.v1.warnings

severity

enum ( Severity )

خطورة المشكلة. مطلوب.

type

enum ( Type )

نوع المشكلة. مطلوب.

category

enum ( Category )

فئة القضية. مطلوب.

أي

يحتوي Any على رسالة مخزن مؤقت لبروتوكول متسلسلة عشوائيًا بالإضافة إلى عنوان URL الذي يصف نوع الرسالة المتسلسلة.

توفر مكتبة Protobuf الدعم لحزم/تفريغ أي قيم في شكل وظائف مساعدة أو طرق إضافية تم إنشاؤها من أي نوع.

مثال 1: حزم وفك ضغط رسالة في C++.

Foo foo = ...;
Any any;
any.PackFrom(foo);
...
if (any.UnpackTo(&foo)) {
  ...
}

مثال 2: حزم وفك ضغط رسالة في Java.

Foo foo = ...;
Any any = Any.pack(foo);
...
if (any.is(Foo.class)) {
  foo = any.unpack(Foo.class);
}

مثال 3: حزم وتفريغ رسالة في بايثون.

foo = Foo(...)
any = Any()
any.Pack(foo)
...
if any.Is(Foo.DESCRIPTOR):
  any.Unpack(foo)
  ...

مثال 4: حزم رسالة وتفريغها في Go

 foo := &pb.Foo{...}
 any, err := ptypes.MarshalAny(foo)
 ...
 foo := &pb.Foo{}
 if err := ptypes.UnmarshalAny(any, foo); err != nil {
   ...
 }

ستستخدم طرق الحزمة التي توفرها مكتبة protobuf بشكل افتراضي "type.googleapis.com/full.type.name" كعنوان URL للنوع، ولا تستخدم طرق فك الحزم سوى اسم النوع المؤهل بالكامل بعد آخر "/" في عنوان URL للنوع، على سبيل المثال، سيؤدي "foo.bar.com/x/yz" إلى اسم النوع "yz".

JSON

يستخدم تمثيل JSON Any قيمة التمثيل العادي للرسالة المضمنة التي تم إلغاء تسلسلها، مع حقل إضافي @type الذي يحتوي على نوع URL. مثال:

package google.profile;
message Person {
  string first_name = 1;
  string last_name = 2;
}

{
  "@type": "type.googleapis.com/google.profile.Person",
  "firstName": <string>,
  "lastName": <string>
}

إذا كان نوع الرسالة المضمنة معروفًا ويحتوي على تمثيل JSON مخصص، فسيتم تضمين هذا التمثيل بإضافة value حقل تحتوي على JSON المخصص بالإضافة إلى حقل @type . مثال (للرسالة google.protobuf.Duration ):

{
  "@type": "type.googleapis.com/google.protobuf.Duration",
  "value": "1.212s"
}
تمثيل جيسون
{
  "typeUrl": string,
  "value": string
}
مجالات
typeUrl

string

اسم URL/المورد الذي يحدد بشكل فريد نوع رسالة المخزن المؤقت للبروتوكول المتسلسل. يجب أن تحتوي هذه السلسلة على حرف "/" واحد على الأقل. يجب أن يمثل الجزء الأخير من مسار عنوان URL الاسم المؤهل بالكامل للنوع (كما في path/google.protobuf.Duration ). يجب أن يكون الاسم بالصيغة الأساسية (على سبيل المثال، البادئة "." غير مقبولة).

من الناحية العملية، عادةً ما تقوم الفرق بترجمة جميع الأنواع التي يتوقعون استخدامها في سياق أي نوع إلى الملف الثنائي. ومع ذلك، بالنسبة لعناوين URL التي تستخدم النظام http أو https أو بدون نظام، يمكن للمرء اختياريًا إعداد خادم نوع يقوم بتعيين عناوين URL من النوع إلى تعريفات الرسائل كما يلي:

  • إذا لم يتم توفير أي مخطط، فسيتم افتراض https .
  • يجب أن ينتج عن HTTP GET على عنوان URL قيمة google.protobuf.Type بتنسيق ثنائي، أو ينتج عنه خطأ.
  • يُسمح للتطبيقات بتخزين نتائج البحث مؤقتًا استنادًا إلى عنوان URL، أو تجميعها مسبقًا في ملف ثنائي لتجنب أي بحث. لذلك، يجب الحفاظ على التوافق الثنائي عند إجراء تغييرات على الأنواع. (استخدم أسماء الأنواع ذات الإصدارات لإدارة التغييرات العاجلة.)

ملاحظة: هذه الوظيفة غير متوفرة حاليًا في إصدار protobuf الرسمي، ولا يتم استخدامها لعناوين URL من النوع الذي يبدأ بـ type.googleapis.com.

يمكن استخدام أنظمة أخرى غير http أو https (أو المخطط الفارغ) مع دلالات خاصة بالتنفيذ.

value

string ( bytes format)

يجب أن يكون مخزنًا مؤقتًا صالحًا للبروتوكول المتسلسل من النوع المحدد أعلاه.

سلسلة مشفرة بـ base64.

خطورة

خطورة القضايا.

التعدادات
unspecifiedSeverity الخطورة الافتراضية غير المحددة. لا تستخدم. للإصدار فقط.
info مشكلة غير حرجة، توفر للمستخدمين بعض المعلومات حول التشغيل التجريبي.
suggestion مشكلة غير حرجة، توفر للمستخدمين بعض التلميحات حول تحسين تجربة الاختبار الخاصة بهم، على سبيل المثال، اقتراح استخدام Game Loops.
warning قضية حرجة محتملة.
severe قضية حرجة.

يكتب

أنواع القضايا.

التعدادات
unspecifiedType النوع الافتراضي غير المحدد. لا تستخدم. للإصدار فقط.
fatalException المشكلة هي استثناء قاتل.
nativeCrash المشكلة هي تعطل أصلي.
anr المشكلة هي تعطل ANR.
unusedRoboDirective المشكلة هي توجيه robo غير مستخدم.
compatibleWithOrchestrator المشكلة هي اقتراح لاستخدام الأوركسترا.
launcherActivityNotFound مشكلة في العثور على نشاط المشغل
startActivityNotFound مشكلة تتعلق بحل النية المقدمة من المستخدم لبدء نشاط ما
incompleteRoboScriptExecution لم يتم تنفيذ نص Robo بالكامل.
completeRoboScriptExecution تم تنفيذ نص Robo بشكل كامل وبنجاح.
failedToInstall فشل تثبيت APK.
nonSdkApiUsageViolation وصل التطبيق إلى واجهة برمجة التطبيقات غير sdk.
nonSdkApiUsageReport وصل التطبيق إلى واجهة برمجة التطبيقات غير sdk (تقرير تفصيلي جديد)
encounteredNonAndroidUiWidgetScreen واجه Robo Crawl شاشة واحدة على الأقل تحتوي على عناصر ليست من عناصر واجهة مستخدم Android.
encounteredLoginScreen واجه Robo Crawl شاشة تسجيل دخول محتملة واحدة على الأقل.
performedGoogleLogin قام Robo بتسجيل الدخول باستخدام Google.
iosException تعطل تطبيق iOS مع استثناء.
iosCrash تعطل تطبيق iOS بدون استثناء (على سبيل المثال، قُتل).
performedMonkeyActions يتضمن الزحف الآلي القيام ببعض حركات القرود.
usedRoboDirective يستخدم Robo Crawl توجيه Robo.
usedRoboIgnoreDirective استخدم Robo Crawl توجيه Robo لتجاهل عنصر واجهة المستخدم.
insufficientCoverage لم يقم Robo بالزحف إلى بعض الأجزاء التي يحتمل أن تكون مهمة في التطبيق.
inAppPurchases يتضمن الزحف الآلي بعض عمليات الشراء داخل التطبيق.
crashDialogError تم اكتشاف مربع حوار الأعطال أثناء تنفيذ الاختبار
uiElementsTooDeep عمق عنصر واجهة المستخدم أكبر من العتبة
blankScreen تم العثور على شاشة فارغة في زحف Robo
overlappingUiElements تم العثور على عناصر واجهة المستخدم المتداخلة في زحف Robo
unityException تم اكتشاف استثناء Unity لم يتم اكتشافه (لا يؤدي ذلك إلى تعطل التطبيقات).
deviceOutOfMemory تم اكتشاف نفاد ذاكرة الجهاز
logcatCollectionError تم اكتشاف مشاكل أثناء جمع logcat
detectedAppSplashScreen اكتشف Robo شاشة البداية التي يوفرها التطبيق (مقابل شاشة البداية لنظام التشغيل Android).

فئة

فئات القضايا.

التعدادات
unspecifiedCategory الفئة الافتراضية غير المحددة. لا تستخدم. للإصدار فقط.
common المشكلة ليست خاصة بنوع اختبار معين (على سبيل المثال، تعطل أصلي).
robo المشكلة خاصة بتشغيل Robo.

توقيت الاختبار

توقيت الاختبار ينقسم لمعرفة المراحل.

تمثيل جيسون
{
  "testProcessDuration": {
    object (Duration)
  }
}
مجالات
testProcessDuration

object ( Duration )

كم من الوقت استغرق تنفيذ عملية الاختبار.

  • ردا على ذلك: موجود إذا تم تعيينه سابقا.
  • في طلب الإنشاء/التحديث: اختياري

ToolExecutionStep

خطوة الأداة العامة التي سيتم استخدامها للثنائيات التي لا ندعمها بشكل صريح. على سبيل المثال: تشغيل cp لنسخ القطع الأثرية من موقع إلى آخر.

تمثيل جيسون
{
  "toolExecution": {
    object (ToolExecution)
  }
}
مجالات
toolExecution

object ( ToolExecution )

تنفيذ أداة.

  • ردًا على ذلك: موجود إذا تم تعيينه بواسطة طلب الإنشاء/التحديث
  • في طلب الإنشاء/التحديث: اختياري

متعدد الخطوات

التفاصيل عند تشغيل خطوات متعددة بنفس التكوين كمجموعة.

تمثيل جيسون
{
  "primaryStepId": string,
  "multistepNumber": integer,
  "primaryStep": {
    object (PrimaryStep)
  }
}
مجالات
primaryStepId

string

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

multistepNumber

integer

فريدة من نوعها نظرا لكل خطوة. يتراوح من 0 (شاملاً) إلى إجمالي عدد الخطوات (حصرياً). الخطوة الأساسية هي 0.

primaryStep

object ( PrimaryStep )

حاضر إذا كانت خطوة أساسية (أصلية).

PrimaryStep

يخزن حالة الاختبار التراكمي للخطوات المتعددة التي تم تشغيلها كمجموعة ونتيجة كل خطوة على حدة.

تمثيل جيسون
{
  "rollUp": enum (OutcomeSummary),
  "individualOutcome": [
    {
      object (IndividualOutcome)
    }
  ]
}
مجالات
rollUp

enum ( OutcomeSummary )

حالة الاختبار التراكمي للخطوات المتعددة التي تم تشغيلها بنفس التكوين كمجموعة.

individualOutcome[]

object ( IndividualOutcome )

معرف الخطوة ونتائج كل خطوة على حدة.

النتيجة الفردية

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

تمثيل جيسون
{
  "stepId": string,
  "outcomeSummary": enum (OutcomeSummary),
  "multistepNumber": integer,
  "runDuration": {
    object (Duration)
  }
}
مجالات
stepId

string

outcomeSummary

enum ( OutcomeSummary )

multistepNumber

integer

فريدة من نوعها نظرا لكل خطوة. يتراوح من 0 (شاملاً) إلى إجمالي عدد الخطوات (حصرياً). الخطوة الأساسية هي 0.

runDuration

object ( Duration )

كم من الوقت استغرق تنفيذ هذه الخطوة.

طُرق

accessibilityClusters

يسرد مجموعات إمكانية الوصول لخطوة معينة

قد يُرجع أيًا من رموز الخطأ الأساسية التالية:

  • PERMISSION_DENIED - إذا كان المستخدم غير مصرح له بقراءة المشروع
  • INVALID_ARGUMENT - إذا كان الطلب غير صحيح
  • FAILED_PRECONDITION - إذا كانت الوسيطة في الطلب غير صالحة؛ على سبيل المثال

create

يخلق خطوة.

get

يحصل على خطوة.

getPerfMetricsSummary

استرداد ملخص PerfMetrics.

list

يسرد خطوات تنفيذ معين.

patch

يقوم بتحديث خطوة موجودة بالكيان الجزئي المقدم.

publishXunitXmlFiles

نشر ملفات xml إلى خطوة موجودة.