- المصدر: خطوة
- TestExecutionStep
- تنفيذ الأداة
- ToolExitCode
- مشكلة الاختبار
- أي
- خطورة
- يكتب
- فئة
- توقيت الاختبار
- ToolExecutionStep
- متعدد الخطوات
- PrimaryStep
- النتيجة الفردية
- طُرق
المصدر: خطوة
تمثل الخطوة عملية واحدة يتم تنفيذها كجزء من التنفيذ. يمكن استخدام الخطوة لتمثيل تنفيذ الأداة (على سبيل المثال تنفيذ عداء الاختبار أو تنفيذ المترجم).
يمكن أن تتداخل الخطوات (على سبيل المثال، قد يكون لخطوتين نفس وقت البدء إذا تم تنفيذ بعض العمليات بالتوازي).
فيما يلي مثال، لنفترض أن لدينا بناءًا مستمرًا يقوم بتنفيذ مشغل اختبار لكل تكرار. سيبدو سير العمل كما يلي: - يقوم المستخدم بإنشاء تنفيذ بالمعرف 1 - يقوم المستخدم بإنشاء TestExecutionStep بالمعرف 100 للتنفيذ 1 - يقوم المستخدم بتحديث TestExecutionStep بالمعرف 100 لإضافة سجل XML أولي + الخدمة بتوزيع سجلات XML وإرجاع TestExecutionStep مع تحديث (نتائج) الاختبار. - يقوم المستخدم بتحديث حالة TestExecutionStep بالمعرف 100 حتى اكتمال
يمكن تحديث الخطوة حتى يتم ضبط حالتها على "مكتمل" وعند هذه النقطة تصبح غير قابلة للتغيير.
تمثيل جيسون |
---|
{ "stepId": string, "creationTime": { object ( |
مجالات | |
---|---|
stepId | معرف فريد ضمن التنفيذ لهذه الخطوة. يتم إرجاع INVALID_ARGUMENT إذا تم تعيين هذا الحقل أو الكتابة فوقه بواسطة المتصل.
|
creationTime | الوقت الذي تم فيه إنشاء الخطوة.
|
completionTime | الوقت الذي تم فيه تعيين حالة الخطوة على الاكتمال. سيتم تعيين هذه القيمة تلقائيًا عند انتقال الحالة إلى حالة الاكتمال.
|
name | اسم قصير يمكن قراءته بواسطة الإنسان لعرضه في واجهة المستخدم. الحد الأقصى 100 حرف. على سبيل المثال: البناء النظيف سيتم إرجاع PRECONDITION_FAILED عند إنشاء خطوة جديدة إذا كانت تشترك في اسمها وقيمة أبعادها مع خطوة موجودة. إذا كانت الخطوتان تمثلان إجراءً مشابهًا، لكن لهما قيم أبعاد مختلفة، فيجب أن تشتركا في نفس الاسم. على سبيل المثال، إذا تم تشغيل نفس مجموعة الاختبارات على نظامين أساسيين مختلفين، فيجب أن يكون للخطوتين نفس الاسم.
|
description | وصف لهذه الأداة على سبيل المثال: mvn clean package -D SkipTests=true
|
state | الحالة الأولية هي IN_PROGRESS. التحولات القانونية الوحيدة للحالة هي * IN_PROGRESS -> COMPLETE سيتم إرجاع PRECONDITION_FAILED إذا تم طلب انتقال غير صالح. إنه صالح لإنشاء خطوة مع تعيين الحالة على "مكتمل". لا يمكن ضبط الحالة على "كاملة" إلا مرة واحدة. سيتم إرجاع PRECONDITION_FAILED إذا تم ضبط الحالة على COMPLETE عدة مرات.
|
outcome | تصنيف النتيجة، على سبيل المثال، إلى نجاح أو فشل
|
hasImages | ما إذا كان أي من مخرجات هذه الخطوة عبارة عن صور يمكن جلب صورها المصغرة باستخدام Miniatures.list.
|
labels | أزواج مفاتيح/قيمة عشوائية مقدمة من المستخدم ومرتبطة بالخطوة. يتحمل المستخدمون مسؤولية إدارة مساحة الاسم الرئيسية بحيث لا تتصادم المفاتيح عن طريق الخطأ. سيتم إرجاع INVALID_ARGUMENT إذا تجاوز عدد التصنيفات 100 أو إذا تجاوز طول أي من المفاتيح أو القيم 100 حرف.
كائن يحتوي على قائمة |
dimensionValue | إذا كان التنفيذ الذي يحتوي على هذه الخطوة يحتوي على أي مجموعة Dimension_definition، فإن هذا الحقل يسمح للطفل بتحديد قيم الأبعاد. يجب أن تتطابق المفاتيح تمامًا مع Dimension_definition الخاص بالتنفيذ. على سبيل المثال، إذا كان التنفيذ يحتوي على إذا كانت الخطوة لا تشارك في بُعد واحد من المصفوفة، فيجب أن تكون قيمة هذا البعد عبارة عن سلسلة فارغة. على سبيل المثال، إذا تم تنفيذ أحد الاختبارات بواسطة برنامج تشغيل لا يدعم إعادة المحاولة، فمن الممكن أن تحتوي الخطوة على إذا كانت الخطوة لا تشارك في أي أبعاد للمصفوفة، فقد تترك DimensionValue بدون تعيين. سيتم إرجاع PRECONDITION_FAILED في حالة عدم وجود أي من المفاتيح في Dimension_definition الخاص بالتنفيذ. سيتم إرجاع PRECONDITION_FAILED إذا كانت خطوة أخرى في هذا التنفيذ لها نفس الاسم وقيمة البعد، ولكنها تختلف في حقول البيانات الأخرى، على سبيل المثال، حقل الخطوة مختلف. سيتم إرجاع PRECONDITION_FAILED إذا تم تعيين DimensionValue، وكان هناك Dimension_definition في التنفيذ لم يتم تحديده كأحد المفاتيح.
كائن يحتوي على قائمة |
runDuration | كم من الوقت استغرق تنفيذ هذه الخطوة. إذا لم يتم تعيينه، فسيتم تعيينه على الفرق بين وقت الإنشاء ووقت الإكمال عندما يتم ضبط الخطوة على الحالة الكاملة. في بعض الحالات، يكون من المناسب تعيين هذه القيمة بشكل منفصل: على سبيل المثال، إذا تم إنشاء خطوة، ولكن العملية التي تمثلها تم وضعها في قائمة الانتظار لبضع دقائق قبل تنفيذها، فسيكون من المناسب عدم تضمين الوقت المستغرق في قائمة الانتظار في قائمة الانتظار الخاصة بها runDuration. سيتم إرجاع PRECONDITION_FAILED إذا حاول أحد تعيين runDuration في خطوة تم تعيين هذا الحقل فيها بالفعل.
|
deviceUsageDuration | مقدار موارد الجهاز المستخدمة لإجراء الاختبار. هذا هو استخدام الجهاز المستخدم لغرض الفوترة، والذي يختلف عن runDuration، على سبيل المثال، لن يتم فرض رسوم على فشل البنية التحتية مقابل استخدام الجهاز. سيتم إرجاع PRECONDITION_FAILED إذا حاول أحد تعيين استخدام الجهاز في خطوة تم تعيين هذا الحقل فيها بالفعل.
|
multiStep | التفاصيل عند تشغيل خطوات متعددة بنفس التكوين كمجموعة. يمكن استخدام هذه التفاصيل لتحديد المجموعة التي تعد هذه الخطوة جزءًا منها. كما أنه يحدد "الخطوة الأساسية" للمجموعات والتي تقوم بفهرسة جميع أعضاء المجموعة.
|
يمكن أن تكون | |
testExecutionStep | إعدام عداء الاختبار. |
toolExecutionStep | تنفيذ أداة (تُستخدم للخطوات التي لا ندعمها بشكل صريح). |
TestExecutionStep
خطوة تمثل الاختبارات الجارية.
وهو يقبل ملفات xml الخاصة بـ ant-junit والتي سيتم تحليلها إلى نتائج اختبار منظمة بواسطة الخدمة. يتم تحديث مسارات ملفات Xml لإلحاق المزيد من الملفات، ولكن لا يمكن حذفها.
يمكن للمستخدمين أيضًا إضافة نتائج الاختبار يدويًا باستخدام حقل test_result.
تمثيل جيسون |
---|
{ "testSuiteOverviews": [ { object ( |
مجالات | |
---|---|
testSuiteOverviews[] | قائمة محتويات نظرة عامة على مجموعة الاختبار. يمكن تحليل ذلك من سجل xUnit XML بواسطة الخادم، أو تحميله مباشرة بواسطة المستخدم. يجب استدعاء هذه المراجع فقط عندما يتم تحليل مجموعات الاختبار أو تحميلها بالكامل. الحد الأقصى المسموح به لعدد النظرات العامة لمجموعة الاختبار في كل خطوة هو 1000.
|
toolExecution | يمثل تنفيذ عداء الاختبار. سيتم استخدام رمز الخروج لهذه الأداة لتحديد ما إذا كان الاختبار قد نجح أم لا.
|
testIssues[] | المشكلات التي تمت ملاحظتها أثناء تنفيذ الاختبار. على سبيل المثال، إذا تعطل تطبيق الهاتف المحمول قيد الاختبار أثناء الاختبار، فيمكن تسجيل رسالة الخطأ ومحتوى تتبع المكدس هنا للمساعدة في تصحيح الأخطاء.
|
testTiming | توقيت انهيار تنفيذ الاختبار.
|
تنفيذ الأداة
تنفيذ أداة تعسفية. يمكن أن يكون بمثابة أداة اختبار أو أداة لنسخ العناصر أو نشر التعليمات البرمجية.
تمثيل جيسون |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
مجالات | |
---|---|
commandLineArguments[] | سطر الأوامر المميز الكامل بما في ذلك اسم البرنامج (أي ما يعادل argv في برنامج C).
|
toolLogs[] | تؤدي الإشارات إلى أي سجلات نصية عادية إلى إخراج تنفيذ الأداة. يمكن تعيين هذا الحقل قبل خروج الأداة لتتمكن من الوصول إلى العرض المباشر للسجلات أثناء تشغيل الأداة. الحد الأقصى المسموح به لعدد سجلات الأداة في كل خطوة هو 1000.
|
exitCode | كود الخروج من تنفيذ الأداة سيتم تعيين هذا الحقل بمجرد خروج الأداة.
|
toolOutputs[] | إشارات إلى الملفات غير الشفافة لأي تنسيق ناتج عن طريق تنفيذ الأداة. الحد الأقصى المسموح به لعدد مخرجات الأداة في كل خطوة هو 1000.
|
ToolExitCode
رمز الخروج من تنفيذ الأداة.
تمثيل جيسون |
---|
{ "number": integer } |
مجالات | |
---|---|
number | كود الخروج من تنفيذ الأداة القيمة 0 تعني أن التنفيذ كان ناجحًا.
|
مشكلة الاختبار
تم اكتشاف مشكلة تحدث أثناء تنفيذ الاختبار.
تمثيل جيسون |
---|
{ "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/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 | اسم 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 (تقرير تفصيلي جديد) |
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 ( |
مجالات | |
---|---|
testProcessDuration | كم من الوقت استغرق تنفيذ عملية الاختبار.
|
ToolExecutionStep
خطوة الأداة العامة التي سيتم استخدامها للثنائيات التي لا ندعمها بشكل صريح. على سبيل المثال: تشغيل cp لنسخ القطع الأثرية من موقع إلى آخر.
تمثيل جيسون |
---|
{
"toolExecution": {
object ( |
مجالات | |
---|---|
toolExecution | تنفيذ أداة.
|
متعدد الخطوات
التفاصيل عند تشغيل خطوات متعددة بنفس التكوين كمجموعة.
تمثيل جيسون |
---|
{
"primaryStepId": string,
"multistepNumber": integer,
"primaryStep": {
object ( |
مجالات | |
---|---|
primaryStepId | معرف الخطوة للخطوة الأساسية (الأصلية)، والتي قد تكون هذه الخطوة. |
multistepNumber | فريدة من نوعها نظرا لكل خطوة. يتراوح من 0 (شاملاً) إلى إجمالي عدد الخطوات (حصرياً). الخطوة الأساسية هي 0. |
primaryStep | حاضر إذا كانت خطوة أساسية (أصلية). |
PrimaryStep
يخزن حالة الاختبار التراكمي للخطوات المتعددة التي تم تشغيلها كمجموعة ونتيجة كل خطوة على حدة.
تمثيل جيسون |
---|
{ "rollUp": enum ( |
مجالات | |
---|---|
rollUp | حالة الاختبار التراكمي للخطوات المتعددة التي تم تشغيلها بنفس التكوين كمجموعة. |
individualOutcome[] | معرف الخطوة ونتائج كل خطوة على حدة. |
النتيجة الفردية
معرف الخطوة ونتيجة كل خطوة فردية تم تشغيلها كمجموعة مع خطوات أخرى بنفس التكوين.
تمثيل جيسون |
---|
{ "stepId": string, "outcomeSummary": enum ( |
مجالات | |
---|---|
stepId | |
outcomeSummary | |
multistepNumber | فريدة من نوعها نظرا لكل خطوة. يتراوح من 0 (شاملاً) إلى إجمالي عدد الخطوات (حصرياً). الخطوة الأساسية هي 0. |
runDuration | كم من الوقت استغرق تنفيذ هذه الخطوة. |
طُرق | |
---|---|
| يسرد مجموعات إمكانية الوصول لخطوة معينة قد يُرجع أيًا من رموز الخطأ الأساسية التالية:
|
| يخلق خطوة. |
| يحصل على خطوة. |
| استرداد ملخص PerfMetrics. |
| يسرد خطوات تنفيذ معين. |
| يقوم بتحديث خطوة موجودة بالكيان الجزئي المقدم. |
| نشر ملفات xml إلى خطوة موجودة. |