- المورد: الخطوة
- TestExecutionStep
- تنفيذ الأدوات
- ToolExitCode
- اختبار المشكلة
- أيّ
- درجة الخطورة
- النوع
- Category (الفئة)
- وقت الاختبار
- ToolExecutionStep
- متعدد الخطوات
- الخطوة الأساسية
- Individualمخرجات النتائج
- الطُرق
المرجع: الخطوة
تمثّل "الخطوة" عملية واحدة يتم تنفيذها كجزء من عملية التنفيذ. يمكن استخدام الخطوة لتمثيل تنفيذ أداة ( على سبيل المثال، تنفيذ عداء اختبار أو تنفيذ برنامج تحويل الأموال).
يمكن أن تتداخل الخطوات (على سبيل المثال، قد يكون لخطوتَين وقت البدء نفسه إذا تم تنفيذ بعض العمليات بالتوازي).
فيما يلي مثال، ولنفترض أن لدينا إصدارًا مستمرًا يقوم بتنفيذ اختبار تشغيل لكل تكرار. ستظهر سير العمل بالشكل التالي: - يُنشئ المستخدم عملية تنفيذ برقم التعريف 1 - ينشئ المستخدم TestExecutionStep بالمعرّف 100 للتنفيذ 1 - ويحدث المستخدم TestExecutionStep مع المعرّف 100 لإضافة سجل XML أولي بينما تحلّل الخدمة سجلات ملف XML وتعرض خطوة TestExecutionStep مع نتائج اختبار محدثة. - يقوم المستخدم بتحديث حالة TestExecutionStep بالمعرف 100 إلى "COMPLETE"
يمكن تحديث خطوة إلى أن يتم ضبط حالتها على "مكتمل" وفي تلك المرحلة تصبح غير قابلة للتغيير.
تمثيل JSON |
---|
{ "stepId": string, "creationTime": { object ( |
الحقول | |
---|---|
stepId |
معرّف فريد ضمن عملية تنفيذ هذه الخطوة. يتم عرض ضياء/مضاعَفة إذا تم ضبط هذا الحقل أو استبداله من قِبَل المتصل.
|
creationTime |
الوقت الذي تم فيه إنشاء الخطوة.
|
completionTime |
الوقت الذي تم فيه ضبط حالة الخطوة على الاكتمال. سيتم ضبط هذه القيمة تلقائيًا عند انتقال الحالة إلى COMPLETE.
|
name |
اسم قصير يمكن لشخص عادي قراءته في واجهة المستخدم 100 حرف كحدّ أقصى على سبيل المثال: إصدار نظيف سيتم عرض حالة PRE الميزة_تعذّر عند إنشاء خطوة جديدة إذا كانت قد شاركت اسمها وسمة مكوّنها مع خطوة حالية. إذا كانت هناك خطوتان تمثلان إجراءً مشابهًا، ولكن لهما قيم سمات مختلفة، يجب أن يتشاركا الاسم نفسه. على سبيل المثال، إذا تم إجراء نفس مجموعة الاختبارات على نظامين أساسيين مختلفين، يجب أن تحمل الخطوتين نفس الاسم.
|
description |
وصف لهذه الأداة على سبيل المثال: mvn clean package -D dropTests=true
|
state |
الحالة الأولية هي IN_PROGRESS. عمليات النقل الوحيدة للدولة هي * IN_PROGRESS -> إكمال سيتم عرض خطأ PRE الميزة_تعذّر في حال طلب عملية نقل غير صالحة. من الممكن إنشاء خطوة مع ضبط حالة على "مكتمل". يمكن ضبط الحالة على COMPLETE مرة واحدة فقط. سيتم إرجاع حالة PRE جمهور_تعذّر إذا تم ضبط الحالة على "COMPLETE" عدة مرات.
|
outcome |
تصنيف النتيجة، على سبيل المثال إلى Success أو Success
|
hasImages |
ما إذا كان أي من نتائج هذه الخطوة عبارة عن صور يمكن جلب صورها المصغّرة باستخدام mini.list.
|
labels |
أزواج عشوائية من المفاتيح/القيمة يوفّرها المستخدم والمرتبطة بالخطوة المستخدمون مسؤولون عن إدارة مساحة الاسم الرئيسية بحيث لا تتعارض المفاتيح عن طريق الخطأ. سيتم عرض بهدف غیر حزم 7
عنصر يحتوي على قائمة بأزواج |
dimensionValue |
إذا كان التنفيذ الذي يحتوي على هذه الخطوة يحتوي على أي مجموعة أبعاد تريدها، يسمح هذا الحقل للعنصر الفرعي بتحديد قيم السمات. يجب أن تتطابق المفاتيح بشكل تام معdimension_definition عند التنفيذ. على سبيل المثال، إذا كانت عملية التنفيذ تتضمّن وإذا لم تشارك الخطوة في بُعد واحد من المصفوفة، يجب أن تكون قيمة هذا البُعد سلسلة فارغة. على سبيل المثال، إذا تم تنفيذ أحد الاختبارات بواسطة عدّاء لا يتيح إعادة المحاولة، قد تتضمّن الخطوة إذا لم تشارك الخطوة في أيٍ من أبعاد المصفوفة، قد يتم تركها بدون ضبط وفقًا لبُعد قيمة السمة. سيتم عرض حالة PRE جمهور_تعذّر في حال عدم توفّر أي من المفاتيح في سمة البُعد_التعريفي للتنفيذ. سيتم عرض PREcondition_تعذّر إذا كان هناك خطوة أخرى في هذا التنفيذ تحمل الاسم وسمة ValueTrackValue نفسهما، ولكنها تختلف في حقول البيانات الأخرى، على سبيل المثال، حقل الخطوة مختلف. سيتم عرض خطأ PREcondition_FAILED إذا تم ضبط السمةdimensionValue، وكان هناك تعريف البُعد في التنفيذ الذي لم يتم تحديده كأحد المفاتيح.
عنصر يحتوي على قائمة بأزواج |
runDuration |
المدة التي استغرقها تنفيذ هذه الخطوة. في حال ترك هذه السياسة بدون ضبط، يتم ضبط هذه السياسة على الفرق بين وقت الإنشاء ووقت الإكمال عند ضبط الخطوة على حالة "الإكمال". في بعض الحالات، يكون من المناسب ضبط هذه القيمة بشكل منفصل: على سبيل المثال، إذا تم إنشاء خطوة، ولكن تم وضع العملية التي تمثلها في قائمة الانتظار لبضع دقائق قبل تنفيذها، فسيكون من المناسب عدم تضمين الوقت المستغرق في قائمة الانتظار في runDuration. سيتم عرض PREPRE_تعذّر في حال محاولة ضبط قيمة runDuration على خطوة تم ضبط هذا الحقل لها من قبل.
|
deviceUsageDuration |
يشير ذلك إلى مقدار مورد الجهاز الذي يتم استخدامه لإجراء الاختبار. يشير هذا المقياس إلى استخدام الجهاز المستخدَم لغرض الفوترة، وهو يختلف عن قيمة runDuration. على سبيل المثال، لن يتم تحصيل رسوم استخدام الجهاز بسبب تعذُّر البنية الأساسية. سيتم عرض PRE الميزة_تعذّر في حال محاولة ضبط قيمة device_usage على خطوة سبق أن تم ضبط هذا الحقل عليها.
|
multiStep |
تفاصيل عند تنفيذ خطوات متعددة بالإعداد نفسه كمجموعة. يمكن استخدام هذه التفاصيل لتحديد المجموعة التي تنتمي إليها هذه الخطوة. كما أنها تحدد "الخطوة الأساسية" للمجموعات الذي يفهرس جميع أعضاء المجموعة.
|
حقل الاتحاد يمكن أن يكون |
|
testExecutionStep |
يشير ذلك المصطلح إلى عملية تنفيذ عدّاء اختبار. |
toolExecutionStep |
يشير هذا المصطلح إلى عملية تنفيذ أداة (تُستخدم للخطوات التي لا ندعمها بشكل صريح). |
خطوة التنفيذ
يشير ذلك المصطلح إلى خطوة تمثّل إجراء الاختبارات.
وتقبل ملفات ant-junit xml التي سيتم تحليلها إلى نتائج اختبار منظَّمة بواسطة الخدمة. يتم تعديل مسارات ملفات XML لإلحاق المزيد من الملفات، ولكن لا يمكن حذفها.
ويمكن للمستخدمين أيضًا إضافة نتائج الاختبار يدويًا باستخدام حقل test_result.
تمثيل JSON |
---|
{ "testSuiteOverviews": [ { object ( |
الحقول | |
---|---|
testSuiteOverviews[] |
قائمة بمحتوى النظرة العامة على مجموعة الاختبار يمكن تحليل ذلك من سجلّ xUnit XML من خلال الخادم، أو تحميله مباشرةً من قِبل المستخدم. يجب عدم طلب هذه المراجع إلا بعد تحليل مجموعات الاختبار أو تحميلها بالكامل. الحد الأقصى المسموح به لعدد الملخّصات على مجموعة الاختبار لكل خطوة هو 1,000.
|
toolExecution |
يمثل هذا القسم تنفيذ عدّاء الاختبار. وسيتم استخدام رمز الخروج من هذه الأداة لتحديد ما إذا تم اجتياز الاختبار.
|
testIssues[] |
المشاكل التي تم رصدها أثناء تنفيذ الاختبار على سبيل المثال، إذا تعطّل التطبيق المتوافق مع الأجهزة الجوّالة الذي يخضع للاختبار أثناء الاختبار، يمكن تسجيل رسالة الخطأ ومحتوى تتبُّع تسلسل استدعاء الدوال البرمجية هنا للمساعدة في تصحيح الأخطاء.
|
testTiming |
تفاصيل وقت تنفيذ الاختبار.
|
تنفيذ الأدوات
يشير هذا المصطلح إلى عملية تنفيذ أداة عشوائية. يمكن أن يكون برنامج تشغيل اختبار أو أداة تنسخ العناصر أو تنشر تعليمات برمجية.
تمثيل JSON |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
الحقول | |
---|---|
commandLineArguments[] |
سطر الأوامر الكامل الذي يشتمل على رمز مميّز، بما في ذلك اسم البرنامج (يعادل argv في برنامج C).
|
toolLogs[] |
تؤدي الإشارات إلى أي سجلات نصية عادي إلى إخراج عملية تنفيذ الأداة. يمكن ضبط هذا الحقل قبل الخروج من الأداة للتمكّن من الوصول إلى عرض مباشر للسجلات أثناء تشغيل الأداة. إنّ الحدّ الأقصى المسموح به لعدد سجلّات الأداة لكل خطوة هو 1,000 سجلّ.
|
exitCode |
رمز الخروج من عملية تنفيذ الأداة وسيتم ضبط هذا الحقل بعد الخروج من الأداة.
|
toolOutputs[] |
يشير إلى ملفات غير واضحة لأي ناتج تنسيق من خلال تنفيذ الأداة. إنّ الحدّ الأقصى المسموح به لعدد مخرجات الأدوات لكل خطوة هو 1,000.
|
رمز ToolExitCode
قم بالخروج من عملية تنفيذ الأداة.
تمثيل JSON |
---|
{ "number": integer } |
الحقول | |
---|---|
number |
رمز الخروج من عملية تنفيذ الأداة تعني القيمة 0 أنّ عملية التنفيذ تمّت بنجاح.
|
مشكلة في الاختبار
تم رصد مشكلة تحدث أثناء تنفيذ اختبار.
تمثيل JSON |
---|
{ "errorMessage": string, "stackTrace": { object ( |
الحقول | |
---|---|
errorMessage |
رسالة موجزة يمكن لشخص عادي قراءتها لوصف المشكلة مطلوب. |
stackTrace |
تم إيقافها لصالح حقول تتبُّع تسلسل استدعاء الدوال البرمجية داخل تحذيرات محدّدة. |
warning |
رسالة تحذير تحتوي على تفاصيل إضافية عن المشكلة يجب أن تكون الرسالة دائمًا رسالة من com.google.devtools.toolresults.v1.warnings |
severity |
مدى خطورة المشكلة مطلوب. |
type |
نوع المشكلة مطلوب. |
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/y.z" ينتج عنها اسم النوع "y.z".
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"
}
تمثيل JSON |
---|
{ "typeUrl": string, "value": string } |
الحقول | |
---|---|
typeUrl |
اسم عنوان URL/مورد يعرّف بشكل فريد نوع رسالة المخزن المؤقت للبروتوكول المتسلسلة. يجب أن تحتوي هذه السلسلة على علامة "/" واحدة على الأقل الحرف. يجب أن تمثل المقطع الأخير من مسار عنوان URL الاسم المؤهّل بالكامل من النوع (كما في من الناحية العملية، تعمل الفِرق عادةً على تجميع كل الأنواع التي تتوقع أن تستخدمها في سياق أي نوع في النظام الثنائي. ومع ذلك، بالنسبة إلى عناوين URL التي تستخدم المخطط
ملاحظة: هذه الوظيفة غير متاحة حاليًا في إصدار Protobuf الرسمي، ولا يتم استخدامها لأنواع عناوين URL التي تبدأ بـ type.googleapis.com. قد يتم استخدام المخططات بخلاف |
value |
يجب أن يكون مخزنًا مؤقتًا بروتوكولًا متسلسلاً صالحًا من النوع المحدد أعلاه. سلسلة بترميز base64. |
درجة الخطورة
حدة المشاكل.
تعدادات | |
---|---|
unspecifiedSeverity |
درجة الخطورة التلقائية غير المحدّدة. يُرجى عدم استخدامها. لتحديد الإصدارات فقط. |
info |
مشكلة غير ملحّة، وتزوّد المستخدمين ببعض المعلومات حول إجراء الاختبار. |
suggestion |
مشكلة غير ملحّة، وتقدِّم للمستخدمين بعض التلميحات حول تحسين تجربة الاختبار، مثل اقتراح استخدام Game Loops. |
warning |
مشكلة ملحّة محتملة |
severe |
مشكلة خطيرة. |
النوع
أنواع المشاكل.
تعدادات | |
---|---|
unspecifiedType |
النوع التلقائي غير المحدّد. يُرجى عدم استخدامها. لتحديد الإصدارات فقط. |
fatalException |
تمثّل المشكلة استثناءً فادحًا. |
nativeCrash |
المشكلة هي عطل في نظام التشغيل الأصلي. |
anr |
المشكلة هي عطل ANR. |
unusedRoboDirective |
تتعلّق المشكلة بتوجيه robo غير مستخدَم. |
compatibleWithOrchestrator |
المشكلة هي اقتراح استخدام أداة الأوركسترا. |
launcherActivityNotFound |
مشكلة في العثور على نشاط مشغّل التطبيقات |
startActivityNotFound |
مشكلة متعلّقة بحلَّ نية مقدَّمة من المستخدِم لبدء نشاط |
incompleteRoboScriptExecution |
لم يتم تنفيذ نص Robo البرمجي بالكامل. |
completeRoboScriptExecution |
تم تنفيذ نص Robo البرمجي بالكامل وتمّ تنفيذه بنجاح. |
failedToInstall |
تعذّر تثبيت حزمة APK. |
availableDeepLinks |
يتضمّن التطبيق تحت الاختبار روابط لصفحات في التطبيق، ولكن لم يتم تقديم أي منها إلى Robo. |
nonSdkApiUsageViolation |
وصل التطبيق إلى واجهة برمجة تطبيقات غير SDK. |
nonSdkApiUsageReport |
وصل التطبيق إلى واجهة برمجة تطبيقات بخلاف SDK (SDK) (تقرير مفصل جديد) |
encounteredNonAndroidUiWidgetScreen |
واجه الزحف إلى Robo شاشة واحدة على الأقل تحتوي على عناصر ليست تطبيقات مصغّرة لواجهة مستخدم Android. |
encounteredLoginScreen |
واجه زحف Robo شاشة محتملة واحدة على الأقل لتسجيل الدخول. |
performedGoogleLogin |
سجّل روبو الدخول باستخدام حساب Google. |
iosException |
تعطَّل تطبيق iOS مع استثناء. |
iosCrash |
تعطَّل تطبيق iOS بدون استثناء (على سبيل المثال، تم إنهاؤه). |
performedMonkeyActions |
تضمنت عملية زحف Robo تنفيذ بعض الإجراءات المتعلقة بالقردة. |
usedRoboDirective |
يستخدم زحف Robo توجيه Robo. |
usedRoboIgnoreDirective |
استخدم زحف Robo توجيه Robo لتجاهل عنصر في واجهة المستخدم. |
insufficientCoverage |
لم يزحف Robo إلى بعض الأجزاء التي يُحتمل أن تكون مهمة في التطبيق. |
inAppPurchases |
تضمّنت عملية زحف Robo بعض عمليات الشراء داخل التطبيق. |
crashDialogError |
تم رصد مربّع حوار التعطّل أثناء تنفيذ الاختبار |
uiElementsTooDeep |
عمق عنصر واجهة المستخدم أكبر من الحد |
blankScreen |
تم العثور على شاشة فارغة في زحف Robo. |
overlappingUiElements |
تم العثور على عناصر متداخلة في واجهة المستخدم في زحف Robo. |
unityException |
تم رصد استثناء غير معروف من Unity (لا تؤدي هذه التطبيقات إلى تعطُّل التطبيقات). |
deviceOutOfMemory |
تم رصد نفاد ذاكرة الجهاز |
logcatCollectionError |
تم رصد مشاكل أثناء جمع سجلّ Logcat |
detectedAppSplashScreen |
رصد Robo شاشة بداية يوفّرها التطبيق (مقارنةً بشاشة البداية في نظام التشغيل Android). |
assetIssue |
حدثت مشكلة في مواد العرض في هذا الاختبار. |
الفئة
فئات المشاكل
تعدادات | |
---|---|
unspecifiedCategory |
الفئة التلقائية غير المحدّدة. يُرجى عدم استخدامها. لتحديد الإصدارات فقط. |
common |
المشكلة لا تقتصر على نوع اختبار معيّن (على سبيل المثال، عطل في نظام التشغيل الأصلي). |
robo |
المشكلة متعلّقة بتشغيل Robo. |
وقت الاختبار
يتم تقسيم توقيت الاختبار لمعرفة المراحل.
تمثيل JSON |
---|
{
"testProcessDuration": {
object ( |
الحقول | |
---|---|
testProcessDuration |
المدة التي يستغرقها إجراء عملية الاختبار
|
خطوة تنفيذ الأدوات
خطوة أداة عامة يمكن استخدامها مع البرامج الثنائية التي لا ندعمها بشكل صريح. على سبيل المثال: تشغيل cp لنسخ العناصر من موقع إلى آخر.
تمثيل JSON |
---|
{
"toolExecution": {
object ( |
الحقول | |
---|---|
toolExecution |
عملية تنفيذ الأداة:
|
متعددة الخطوات
تفاصيل عند تنفيذ خطوات متعددة بالإعداد نفسه كمجموعة.
تمثيل JSON |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
الحقول | |
---|---|
primaryStepId |
رقم تعريف الخطوة الأساسية (الأصلية)، والتي قد تكون هذه الخطوة |
multistepNumber |
عدد صحيح فريد لكل خطوة. يتراوح من 0(شامل) إلى إجمالي عدد الخطوات(باستثناء). الخطوة الأساسية هي 0. |
primaryStep |
يجب عرضها إذا كانت هذه الخطوة أساسية (أصلية). |
الخطوة الأساسية
يحفظ هذا الإعداد حالة اختبار دمج القنوات لخطوات متعددة تم تنفيذها كمجموعة ونتائج كل خطوة فردية.
تمثيل JSON |
---|
{ "rollUp": enum ( |
الحقول | |
---|---|
rollUp |
حالة اختبار البيانات المجمّعة لخطوات متعددة تم تنفيذها باستخدام الإعدادات نفسها التي تم إجراؤها في مجموعة |
individualOutcome[] |
رقم تعريف الخطوة ونتيجة كل خطوة على حدة |
النتائج الفردية
رقم تعريف الخطوة ونتيجة كل خطوة تم تنفيذها كمجموعة مع خطوات أخرى تم فيها ضبط الإعدادات نفسها
تمثيل JSON |
---|
{ "stepId": string, "outcomeSummary": enum ( |
الحقول | |
---|---|
stepId |
|
outcomeSummary |
|
multistepNumber |
عدد صحيح فريد لكل خطوة. يتراوح من 0(شامل) إلى إجمالي عدد الخطوات(باستثناء). الخطوة الأساسية هي 0. |
runDuration |
المدة التي استغرقها تنفيذ هذه الخطوة. |
الطُرق |
|
---|---|
|
يسرد مجموعات تسهيل الاستخدام لخطوة معيّنة قد يعرض أيًا من رموز الخطأ الأساسية التالية:
|
|
تنشئ خطوة. |
|
خطوة بخطوة. |
|
استرداد PerfMetricsSummary. |
|
يسرد خطوات تنفيذ معين. |
|
يعدِّل خطوة حالية بالكيان الجزئي الذي تم توفيره. |
|
نشر ملفات XML إلى خطوة حالية |