- منبع: گام
- TestExecutionStep
- اجرای ابزار
- ToolExitCode
- موضوع تست
- هر
- شدت
- تایپ کنید
- دسته بندی
- زمان تست
- ToolExecutionStep
- چند مرحله ای
- مرحله اولیه
- نتیجه فردی
- مواد و روش ها
منبع: گام
یک Step یک عملیات واحد را نشان می دهد که به عنوان بخشی از Execution انجام می شود. می توان از یک مرحله برای نمایش اجرای یک ابزار استفاده کرد (به عنوان مثال اجرای اجرای آزمایشی یا اجرای یک کامپایلر).
مراحل ممکن است همپوشانی داشته باشند (مثلاً اگر برخی از عملیات ها به صورت موازی انجام شوند، ممکن است دو مرحله زمان شروع یکسانی داشته باشند).
در اینجا یک مثال است، بیایید در نظر بگیریم که ما یک ساخت پیوسته داریم که در حال اجرای یک تست اجرا برای هر تکرار است. گردش کار به این صورت است: - کاربر یک Execution با شناسه 1 ایجاد می کند - کاربر یک TestExecutionStep با شناسه 100 برای Execution 1 ایجاد می کند - کاربر TestExecutionStep را با شناسه 100 به روز می کند تا یک گزارش xml خام اضافه کند + سرویس گزارش های xml را تجزیه می کند و یک TestExecutionSte برمی گرداند. Test Result(های) به روز شد. - کاربر وضعیت TestExecutionStep را با شناسه 100 به COMPLETE به روز می کند
یک Step را می توان تا زمانی که حالت آن روی COMPLETE تنظیم شود، به روز کرد که در آن نقاط تغییر ناپذیر می شود.
نمایندگی JSON |
---|
{ "stepId": string, "creationTime": { object ( |
زمینه های | |
---|---|
stepId | یک شناسه منحصر به فرد در یک Execution برای این مرحله. اگر این فیلد توسط تماسگیرنده تنظیم یا بازنویسی شود، INVALID_ARGUMENT را برمیگرداند.
|
creationTime | زمانی که مرحله ایجاد شد.
|
completionTime | زمانی که وضعیت مرحله برای تکمیل تنظیم شد. هنگامی که حالت به COMPLETE تغییر می کند، این مقدار به طور خودکار تنظیم می شود.
|
name | یک نام کوتاه قابل خواندن برای انسان برای نمایش در UI. حداکثر 100 کاراکتر به عنوان مثال: ساخت تمیز یک PRECONDITION_FAILED پس از ایجاد یک مرحله جدید، اگر نام و dimensionValue خود را با یک مرحله موجود به اشتراک بگذارد، برگردانده میشود. اگر دو مرحله نشان دهنده یک عمل مشابه هستند، اما مقادیر ابعاد متفاوتی دارند، باید نام یکسانی داشته باشند. به عنوان مثال، اگر مجموعه آزمایش های یکسانی روی دو پلتفرم مختلف اجرا شود، دو مرحله باید یک نام داشته باشند.
|
description | توضیحاتی در مورد این ابزار برای مثال: mvn clean package -D skipTests=true
|
state | حالت اولیه IN_PROGRESS است. تنها انتقال حالت قانونی * IN_PROGRESS -> COMPLETE است در صورت درخواست انتقال نامعتبر، یک PRECONDITION_FAILED برگردانده خواهد شد. ایجاد مرحله با حالت تنظیم شده روی COMPLETE معتبر است. حالت را فقط یک بار می توان روی COMPLETE تنظیم کرد. اگر حالت چند بار روی COMPLETE تنظیم شود، یک PRECONDITION_FAILED برگردانده میشود.
|
outcome | طبقه بندی نتیجه، به عنوان مثال به SUCCESS یا FAILURE
|
hasImages | آیا هر یک از خروجی های این مرحله تصاویری هستند که می توان تصاویر کوچک آنها را با thumbnails.list واکشی کرد.
|
labels | جفت های کلید/مقدار دلخواه ارائه شده توسط کاربر که با مرحله مرتبط هستند. کاربران مسئول مدیریت فضای نام کلید هستند تا کلیدها تصادفاً با هم برخورد نکنند. اگر تعداد برچسبها از 100 بیشتر باشد یا طول هر یک از کلیدها یا مقادیر از 100 کاراکتر بیشتر شود، یک INVALID_ARGUMENT برگردانده میشود.
یک شی حاوی لیستی از |
dimensionValue | اگر اجرای حاوی این مرحله دارای مجموعه dimension_definition باشد، این فیلد به فرزند اجازه می دهد تا مقادیر ابعاد را مشخص کند. کلیدها باید دقیقاً با dimension_definition اجرا مطابقت داشته باشند. به عنوان مثال، اگر اجرا دارای اگر مرحله ای در یک بعد ماتریس شرکت نمی کند، مقدار آن بعد باید رشته خالی باشد. برای مثال، اگر یکی از آزمایشها توسط اجراکنندهای اجرا شود که از تلاشهای مجدد پشتیبانی نمیکند، این مرحله میتواند دارای اگر مرحله در هیچ یک از ابعاد ماتریس شرکت نکند، ممکن است dimensionValue را تنظیم نشده باقی بگذارد. اگر هر یک از کلیدها در dimension_definition اجرا وجود نداشته باشد، یک PRECONDITION_FAILED برگردانده خواهد شد. یک PRECONDITION_FAILED برگردانده میشود اگر مرحله دیگری در این اجرا قبلاً همان نام و dimensionValue را داشته باشد، اما در سایر فیلدهای داده متفاوت باشد، برای مثال، فیلد مرحله متفاوت است. اگر dimensionValue تنظیم شده باشد، یک PRECONDITION_FAILED برگردانده می شود، و یک dimension_definition در اجرا وجود دارد که به عنوان یکی از کلیدها مشخص نشده است.
یک شی حاوی لیستی از |
runDuration | چقدر طول کشید تا این مرحله اجرا شود. اگر تنظیم نشده باشد، زمانی که مرحله روی حالت COMPLETE تنظیم شده باشد، این مقدار روی تفاوت بین createTime و completionTime تنظیم می شود. در برخی موارد، مناسب است که این مقدار را جداگانه تنظیم کنید: به عنوان مثال، اگر یک مرحله ایجاد شود، اما عملیاتی که نشان می دهد برای چند دقیقه قبل از اجرای آن در صف قرار می گیرد، مناسب است که زمان صرف شده در صف را در آن لحاظ نکنید. مدت زمان اجرا اگر فردی بخواهد یک runDuration را در مرحله ای که قبلاً دارای این فیلد تنظیم شده است تنظیم کند PRECONDITION_FAILED برگردانده می شود.
|
deviceUsageDuration | چه مقدار از منبع دستگاه برای انجام آزمایش استفاده می شود. این میزان استفاده دستگاهی است که برای صورتحساب استفاده میشود، که با مدت زمان اجرا متفاوت است، برای مثال، خرابی زیرساخت برای استفاده از دستگاه هزینهای دریافت نمیکند. اگر فردی سعی کند یک device_usage را در مرحله ای که قبلاً این فیلد را تنظیم کرده است تنظیم کند PRECONDITION_FAILED برگردانده می شود.
|
multiStep | جزئیات زمانی که چندین مرحله با همان پیکربندی به عنوان یک گروه اجرا می شود. از این جزئیات می توان برای شناسایی گروهی که این مرحله بخشی است استفاده کرد. همچنین گروه های "گام اولیه" را که تمام اعضای گروه را نمایه می کند، شناسایی می کند.
|
| |
testExecutionStep | اجرای یک دونده آزمایشی. |
toolExecutionStep | اجرای یک ابزار (برای مراحلی که به صراحت از آن پشتیبانی نمی کنیم استفاده می شود). |
TestExecutionStep
مرحله ای که نشان دهنده تست های در حال اجرا است.
این فایلهای xml ant-junit را میپذیرد که توسط سرویس در نتایج تست ساختاریافته تجزیه میشوند. مسیرهای فایل Xml برای اضافه کردن فایلهای بیشتر بهروزرسانی میشوند، اما نمیتوان آنها را حذف کرد.
کاربران همچنین می توانند با استفاده از فیلد test_result نتایج آزمایش را به صورت دستی اضافه کنند.
نمایندگی JSON |
---|
{ "testSuiteOverviews": [ { object ( |
زمینه های | |
---|---|
testSuiteOverviews[] | فهرست محتویات مرور کلی مجموعه آزمایشی. این را می توان از گزارش xUnit XML توسط سرور تجزیه کرد یا مستقیماً توسط کاربر آپلود کرد. این مراجع فقط باید زمانی فراخوانی شوند که مجموعه های آزمایشی به طور کامل تجزیه یا آپلود شوند. حداکثر تعداد مجاز بازبینی مجموعه آزمایشی در هر مرحله 1000 است.
|
toolExecution | اجرای دونده آزمایشی را نشان می دهد. کد خروج از این ابزار برای تشخیص موفقیت آمیز بودن آزمون استفاده خواهد شد.
|
testIssues[] | موارد مشاهده شده در حین اجرای آزمون به عنوان مثال، اگر برنامه تلفن همراه تحت آزمایش در حین آزمایش از کار بیفتد، پیام خطا و محتوای ردیابی پشته را می توان در اینجا برای کمک به اشکال زدایی ضبط کرد.
|
testTiming | شکست زمان اجرای آزمون.
|
اجرای ابزار
اجرای یک ابزار دلخواه این می تواند یک اجرای آزمایشی یا ابزاری باشد که مصنوعات را کپی می کند یا کد را به کار می گیرد.
نمایندگی JSON |
---|
{ "commandLineArguments": [ string ], "toolLogs": [ { object ( |
زمینه های | |
---|---|
commandLineArguments[] | خط فرمان کامل توکن شده شامل نام برنامه (معادل argv در برنامه C).
|
toolLogs[] | ارجاع به هر سیاهههای مربوط به متن ساده، خروجی اجرای ابزار است. این فیلد را می توان قبل از خروج ابزار تنظیم کرد تا بتوان در حین اجرای ابزار به نمای زنده از گزارش ها دسترسی داشت. حداکثر تعداد مجاز لاگ ابزار در هر مرحله 1000 است.
|
exitCode | کد خروجی اجرای ابزار. این فیلد پس از خروج ابزار تنظیم می شود.
|
toolOutputs[] | ارجاع به فایل های مات با هر فرمتی که توسط اجرای ابزار تولید می شود. حداکثر تعداد مجاز خروجی ابزار در هر مرحله 1000 است.
|
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: بسته بندی و باز کردن یک پیام در جاوا.
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
از نمایش منظم پیام جاسازیشده و deserialized با یک فیلد اضافی @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 باید نشان دهنده نام کاملاً واجد شرایط نوع باشد (مانند در عمل، تیم ها معمولاً همه انواعی را که انتظار دارند در زمینه Any از آن استفاده کند، در باینری از پیش کامپایل می کنند. با این حال، برای نشانیهای اینترنتی که از طرح
توجه: این قابلیت در حال حاضر در نسخه رسمی پروتوباف موجود نیست و برای نوع URL هایی که با type.googleapis.com شروع می شوند استفاده نمی شود. طرحهایی غیر از |
value | باید یک بافر پروتکل سریالی معتبر از نوع مشخص شده بالا باشد. رشته ای با کد base64. |
شدت
شدت مسائل
Enums | |
---|---|
unspecifiedSeverity | شدت نامشخص پیش فرض استفاده نکن. فقط برای نسخه سازی |
info | مشکل غیر مهم، ارائه اطلاعاتی در مورد اجرای آزمایشی به کاربران. |
suggestion | مشکل غیر مهم، ارائه برخی نکات به کاربران در مورد بهبود تجربه آزمایشی آنها، به عنوان مثال، پیشنهاد استفاده از Game Loops. |
warning | موضوع بالقوه بحرانی |
severe | مسئله حیاتی. |
تایپ کنید
انواع مسائل.
Enums | |
---|---|
unspecifiedType | نوع پیش فرض نامشخص استفاده نکن. فقط برای نسخه سازی |
fatalException | موضوع یک استثناء مهلک است. |
nativeCrash | مشکل یک تصادف بومی است. |
anr | مشکل خرابی ANR است. |
unusedRoboDirective | مشکل یک دستورالعمل Robo استفاده نشده است. |
compatibleWithOrchestrator | Issue پیشنهادی برای استفاده از ارکستراتور است. |
launcherActivityNotFound | مشکل پیدا کردن یک فعالیت پرتاب کننده |
startActivityNotFound | مشکل در حل یک قصد ارائه شده توسط کاربر برای شروع یک فعالیت |
incompleteRoboScriptExecution | یک اسکریپت Robo به طور کامل اجرا نشد. |
completeRoboScriptExecution | یک اسکریپت Robo به طور کامل و با موفقیت اجرا شد. |
failedToInstall | APK نصب نشد. |
availableDeepLinks | برنامه تحت آزمایش دارای پیوندهای عمیق است، اما هیچ کدام به Robo ارائه نشده است. |
nonSdkApiUsageViolation | برنامه به Api غیر SDK دسترسی پیدا کرد. |
nonSdkApiUsageReport | برنامه به Api غیر sdk دسترسی پیدا کرد (گزارش دقیق جدید) |
encounteredNonAndroidUiWidgetScreen | Robo crawl حداقل با یک صفحه با عناصری مواجه شد که ویجتهای رابط کاربری Android نیستند. |
encounteredLoginScreen | Robo crawl حداقل با یک صفحه ورود احتمالی مواجه شد. |
performedGoogleLogin | Robo با Google وارد شد. |
iosException | برنامه iOS با یک استثنا از کار افتاد. |
iosCrash | برنامه iOS بدون استثنا از کار افتاد (مثلاً کشته شد). |
performedMonkeyActions | خزیدن Robo شامل انجام برخی اقدامات میمونی بود. |
usedRoboDirective | Robo crawl از دستورالعمل Robo استفاده می کند. |
usedRoboIgnoreDirective | Robo crawl از دستور Robo برای نادیده گرفتن عنصر UI استفاده کرد. |
insufficientCoverage | Robo برخی از بخشهای بالقوه مهم برنامه را نمیخزد. |
inAppPurchases | خزیدن Robo شامل برخی از خریدهای درون برنامه ای بود. |
crashDialogError | گفتگوی خرابی در طول اجرای آزمایش شناسایی شد |
uiElementsTooDeep | عمق عنصر UI بیشتر از آستانه است |
blankScreen | صفحه خالی در خزیدن Robo یافت می شود |
overlappingUiElements | عناصر UI همپوشانی در خزیدن Robo یافت می شوند |
unityException | یک استثنای Unity کشف نشده است (این برنامهها خراب نمیشوند). |
deviceOutOfMemory | دستگاه در حال اتمام حافظه شناسایی شد |
logcatCollectionError | مشکلات شناسایی شده در هنگام جمع آوری logcat |
detectedAppSplashScreen | Robo یک صفحه نمایش اسپلش ارائه شده توسط برنامه (در مقابل صفحه نمایش اسپلش سیستم عامل Android) را شناسایی کرد. |
دسته بندی
دسته بندی مسائل.
Enums | |
---|---|
unspecifiedCategory | دسته بندی نامشخص پیش فرض استفاده نکن. فقط برای نسخه سازی |
common | مشکل مربوط به یک نوع آزمایش خاص (مثلاً یک تصادف بومی) نیست. |
robo | مشکل مخصوص Robo run است. |
زمان تست
زمان بندی تست برای شناخت مراحل تجزیه می شود.
نمایندگی JSON |
---|
{
"testProcessDuration": {
object ( |
زمینه های | |
---|---|
testProcessDuration | چقدر طول کشید تا فرآیند تست اجرا شود.
|
ToolExecutionStep
مرحله ابزار عمومی برای استفاده برای باینریها که به صراحت از آن پشتیبانی نمیکنیم. به عنوان مثال: اجرای 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 را در مرحله موجود منتشر کنید. |