איפה אפשר לראות את תוצאות הבדיקה של פלטפורמת המכשיר למפתחים

במדריך הזה מוסבר איך למצוא את התוצאות של בדיקות וקובצי הפעלה שהופעלו לפי המדריך הרצה במכשיר ב-Developer Device Platform.

לפני שמתחילים

השלבים האלה מבוססים על ההנחה שכבר יצרתם פרויקט ב- Google Cloud , השלמתם את שלבי ההגדרה במדריך להתחלה מהירה של Developer Device Platform ואימתתם את gcloud בטרמינל.

בשורת הפקודה

כדי לראות סיכום בסיסי של תוצאות הבדיקה או קובץ ההפעלה, מריצים את הפקודה הזו עם מזהה הסשן:

gcloud beta device-run sessions describe SESSION_ID

התוצאות שיוחזרו יהיו דומות לתוצאות הבאות:

Session SESSION_ID finished with result [FAILED].
Result files are stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/].
JOB NAME  EXECUTION NAME  EXECUTION RESULT
job-000   all             FAILED: 2 test cases failed, 5 passed
job-001   all             PASS

לכל מזהה של סוג מכשיר שציינתם בדגל --device, נוצרת משימה אחת בסשן. אינדקס המשימות יתאים לסדר של מזהי המכשירים. שגיאות בדיקה הן צפויות, וצריך לחקור ולפתור אותן באמצעות שיפורים והרצות חוזרות.

כדי לקבל פרטים נוספים על סשן, מוסיפים את --full לפקודת describe שהרצתם קודם, באופן הבא:

gcloud beta device-run sessions describe SESSION_ID --full

התוצאות שיוחזרו יהיו דומות לתוצאות הבאות:

אינסטרומנטציה של Android

name: projects/PROJECT_ID/locations/global/sessions/session-370961e1
sessionConfig:
  displayName: instrumentation-session
  jobConfigs:

    -   action:
      androidInstrumentationTest:
        testInstallable:
          files:
        -   gcsInputFile:
              path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/app_name_test.apk
    allocationConfig:
      deviceConfigs:
    -   actions:
        -   androidInstallPackages:
            installables:
            -   files:
                -   gcsInputFile:
                  path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/app_name.apk
        -   androidLogcat: {}
        requirement:
          deviceId: pa3q-35
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://BUCKET_NAME/automation/sessions
sessionReport:
  endTime: '2026-07-30T03:30:05.838Z'
  id: 6587313f-fdf7-418a-a9b9-b6fa98dff838
  jobReports:
    -   displayName: job-000
    endTime: '2026-07-30T03:30:04.601Z'
    executionReports:
        -   displayName: all
      endTime: '2026-07-30T03:30:02.151Z'
      id: 29b167dd-dde9-4ea9-b2cd-738049083fc9
      outputFiles:
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-370961e1/job-000/execution-000/logcat.txt
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-370961e1/job-000/execution-000/instrument.log
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-370961e1/job-000/execution-000/junit.xml
      result:
        cause:
          summary:
            message: One or more test assertions or test methods failed. Inspect the
              test runner logs and structured test results for details.
            reason: TEST_CASE_FAILURE
            type: CUSTOMER
        resultType: FAILED
      startTime: '2026-07-30T03:29:32.769Z'
      status:
        progressMessages:
                -   2 test cases failed, 5 passed
        statusType: DONE
    id: 7974e37a-2928-4aaf-abba-3a8b6bae853b
    result:
      cause:
        summary:
          message: Job has one or more failed tests. See execution reports for details.
          reason: JOB_HAS_FAILED_TESTS
      resultType: FAILED
    startTime: '2026-07-30T03:28:53.756Z'
    status:
      statusType: DONE
  result:
    cause:
      summary:
        message: Session has one or more failed jobs. See job reports for details.
        reason: SESSION_HAS_FAILED_JOBS
    resultType: FAILED
  startTime: '2026-07-30T03:28:52.702Z'
  status:
    statusType: DONE

קובץ הפעלה של Android

name: projects/PROJECT_ID/locations/global/sessions/session-8a41c2b0
sessionConfig:
  displayName: android-executable-session
  jobConfigs:

    -   action:
      androidNativeBinary:
        androidNativeBinary:
          gcsInputFile:
            path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/my_executable
        args:
        -   --example_flag=/data/local/tmp/example_value
        -   --threads=4
    allocationConfig:
      deviceConfigs:
    -   actions:
        -   androidLogcat: {}
        -   androidPushFiles:
            fileConfigs:
            -   destinationPath: /data/local/tmp/model.tflite
                sourceFile:
                  gcsInputFile:
                    path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/model.tflite
        requirement:
          deviceId: shiba-34
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://BUCKET_NAME/automation/sessions
sessionReport:
  endTime: '2026-07-30T03:30:05.838Z'
  id: 4b9120ec-fdf7-418a-a9b9-b6fa98dff838
  jobReports:
    -   displayName: job-000
    endTime: '2026-07-30T03:30:04.601Z'
    executionReports:
        -   displayName: execution-000
      endTime: '2026-07-30T03:30:02.151Z'
      id: 19a267dd-dde9-4ea9-b2cd-738049083fc9
      outputFiles:
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-8a41c2b0/job-000/execution-000/logcat.txt
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-8a41c2b0/job-000/execution-000/output.log
      result:
        resultType: PASSED
      startTime: '2026-07-30T03:29:32.769Z'
      status:
        statusType: DONE
    id: 8874e37a-2928-4aaf-abba-3a8b6bae853b
    result:
      resultType: PASSED
    startTime: '2026-07-30T03:28:53.756Z'
    status:
      statusType: DONE
  result:
    resultType: PASSED
  startTime: '2026-07-30T03:28:52.702Z'
  status:
    statusType: DONE

iOS XCTest

הנה הפלט המנוקה בפועל של gcloud beta device-run sessions describe SESSION_ID --full מהרצה של iOS XCTest בזמן אמת, כשכל הדגלים מופעלים:

name: projects/PROJECT_ID/locations/global/sessions/session-4b941167-5629-4abb-a8a1-a9814bf16847
sessionConfig:
  displayName: xctest-session
  jobConfigs:

    -   action:
      iosXcTest:
        testsZip:
          gcsInputFile:
            path: gs://BUCKET_NAME/automation/inputs/2026-10-09_11:33.01234567_ABCD/MyTests.zip
    allocationConfig:
      deviceConfigs:
        -   actions:
            -   iosInstallPackages:
            ipas:
                -   gcsInputFile:
                path: gs://BUCKET_NAME/automation/inputs/2026-10-09_11:33.01234567_ABCD/AdditionalApp.ipa
        requirement:
          deviceId: iphonese3-18-4
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://BUCKET_NAME/automation/sessions

בפלט הזה, מחפשים את הקבצים שנשלפו מהאפליקציה שנבדקת בנתיב .../artifacts/output.txt (בלי com.example.app/Documents/).

בדפדפן אינטרנט

כדי לראות את הפרטים המלאים, טוענים את כתובת ה-URL של הקטגוריה שמכילה את תוצאות הבדיקה מהפלט של הבדיקה. הוא אמור להיראות כך: https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

הסשנים מופיעים בפורמט הנתיב הבא באחסון: gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

כדי לחפש את היומנים בממשק האינטרנט של מסוף Google Cloud :

  1. בדפדפן, מוסיפים את שם הפרויקט שבו השתמשתם בפקודה gcloud config set project לכתובת ה-URL‏ https://console.cloud.google.com/?project= וטוענים את הדף.
  2. מרחיבים את התפריט שבפינה הימנית העליונה.
  3. מוצאים את Cloud Storage.
  4. בתפריט האחסון, בוחרים באפשרות Buckets.
  5. בעמודה הראשונה, לוחצים על שם הפרויקט.
  6. לוחצים על אוטומציה.
  7. לוחצים על סשנים.
  8. בשדה Filter, מדביקים את מזהה הסשן מהרצת הבדיקה האחרונה (ראו את פלט הבדיקה).
  9. לוחצים על שם הסשן שמופיע בתוצאות.
  10. בוחרים באפשרות job-* כדי להציג את junit.xml (להרצות של Android instrumentation ו-iOS XCTest), שמכיל פרטים של תוצאות ממוזגות בכל ההרצות ומקרי הבדיקה במשימה.
  11. פותחים את execution-* (או את execution-*-rerun-* אם מוגדרים ניסיונות חוזרים של בדיקות לא יציבות באמצעות --flaky-test-attempts) כדי לראות פירוט של כל הרצה או פיצול בנפרד. בהתאם לסוג הסשן ולדגלים שהוגדרו, התיקייה הזו יכולה להכיל פריטי מידע רבים שנוצרו בתהליך הפיתוח. הסבר על התוצאות
  12. כדי להבין את התוצאות, נכנסים לכתובות ה-URL הציבוריות והמאומתות.

מבנה הקובץ

כדי להבין טוב יותר את ביצוע הסשן, אפשר לעיין בקובצי היומן בקטגוריה של Cloud Storage. מבנה הקובץ נראה כך:

אינסטרומנטציה של Android


-   gs://BUCKET_NAME/automation
    -   inputs/
        -   2026-05-29_10:13.026220_JZTM
            -   app.apk
            -   test.apk
    -   sessions/
        -   SESSION_ID
            -   job-000/
                -   junit.xml
                -   execution-000/
                    -   artifacts/
                        -   sdcard/
                            -   output.txt
                    -   bugreport.zip
                    -   dumpsys.txt
                    -   instrument.log
                    -   junit.xml
                    -   logcat.txt
                    -   video.mp4
                -   execution-001/
                    -   instrument.log
                    -   junit.xml
                    -   logcat.txt
                    -   video.mp4
            -   job-001/
        -   SESSION_ID

קובץ הפעלה של Android


-   gs://BUCKET_NAME/automation
    -   inputs/
        -   2026-05-29_10:13.026220_JZTM
            -   my_executable
            -   model.tflite
    -   sessions/
        -   SESSION_ID
            -   job-000/
                -   execution-000/
                    -   artifacts/
                        -   data/
                            -   local/
                                -   tmp/
                                    -   results.json
                    -   bugreport.zip
                    -   dumpsys.txt
                    -   logcat.txt
                    -   output.log
                    -   video.mp4
            -   job-001/
        -   SESSION_ID

iOS XCTest


-   gs://BUCKET_NAME/
    -   automation/
        -   inputs/
            -   2026-10-09_11:33.01234567_ABCD/
                -   AdditionalApp.ipa
                -   MyTests.zip
                -   data.txt
        -   sessions/
            -   SESSION_ID/
                -   job-000/
                    -   execution-000/
                        -   artifacts/
                            -   output.txt
                        -   junit.xml
                        -   system.log

בפלט הזה, צריך להבין את הנתיב שנשלף בקטע artifacts/. ב---paths-to-pull=com.example.app:/Documents/output.txt, כששולפים מהאפליקציה שנבדקת (AUT), השירות מסיר את /Documents וממקם את הקובץ ישירות ב-artifacts/output.txt (ולא ב-artifacts/com.example.app/Documents/output.txt). אם הקובץ נשלף מאפליקציה נוספת (--additional-apps), הוא ממוקם ב-artifacts/<bundle_id>-genfiles/output.txt.

הסבר על התוצאות

בהרצות של Android Instrumentation ו-iOS XCTest, קובצי ה-junit.xml שנוצרים בפלט הם קובצי JUnit XML רגילים. קובץ junit.xml ברמת ההפעלה נכתב בכל ספריית execution-*, וקובץ junit.xml ממוזג נכתב בכל ספריית job-*. הקבצים האלה מכילים את התוצאות של כל שיטת בדיקה, ומאפשרים לכם לבדוק את הסטטוס הספציפי של הצלחה או כישלון, את זמן הביצוע ואת עקבות השגיאות של כל שיטת בדיקה בנפרד. אתם יכולים לשלב ולנתח את הקבצים האלה בקלות באמצעות רוב המערכות של אינטגרציה רציפה (CI) ופיתוח רציף (continuous delivery), וגם באמצעות כלי דיווח לבדיקות.

בנוסף לתוצאות הבדיקה המובנות, כל ספריית execution-* מכילה יומנים ופריטי מידע שנוצרו בתהליך הפיתוח (artifacts) שספציפיים לפלטפורמה:

  • הרצות של כלי למדידת ביצועים ב-Android כוללות את instrument.log לפלט גולמי של כלי למדידת ביצועים ואת logcat.txt ליומן המערכת של Android ברמת המכשיר. כשהמדיניות מופעלת עם --bugreport,‏ --dumpsys או --video, ספריית ההפעלה כוללת גם את bugreport.zip,‏ dumpsys.txt והקלטות וידאו של המסך.
  • הרצות של קובצי הפעלה ב-Android כוללות את output.log, שמתעד את הפלט הסטנדרטי (stdout) ואת השגיאה הסטנדרטית (stderr) שנכתבו על ידי קובץ ההפעלה, ואת logcat.txt (נאסף כברירת מחדל לכל משימה ב-Android), שמתעד את יומן המערכת של Android ברמת המכשיר, יחד עם פריטי מידע אופציונליים מסוג --bugreport,‏ --dumpsys או --video.
  • הרצות של iOS XCTest כוללות את system.log (נאסף כברירת מחדל לכל משימת iOS XCTest), שמתעד את יומן המערכת הגולמי של מכשיר iOS, וכל דוח קריסה לאבחון של .ips אם תהליך קרס במהלך ביצוע הבדיקה. כשהאפשרות מופעלת עם --video, כל סרטון של מקרה בדיקה של ממשק המשתמש שמוקלט נשמר ב-testcases/TEST_CLASS/TEST_METHOD/video.mp4.
  • קבצי המכשיר שנשלפו שצוינו באמצעות --paths-to-pull מאוחסנים בתיקיית המשנה artifacts/ של ספריית ההפעלה.
    • בהפעלות של Android, הקבצים שנשלפו שומרים על נתיב המכשיר שלהם ב-artifacts/ (לדוגמה, artifacts/sdcard/output.txt או artifacts/data/local/tmp/results.json).
    • בהרצות של iOS XCTest, קבצים שנשלפים ממכל נתוני האפליקציה באמצעות --paths-to-pull=BUNDLE_ID:DEVICE_PATH מאורגנים לפי מזהה החבילה בקטע artifacts/:
      • אם com.example.app היא האפליקציה שנבדקת, היא נשמרת ישירות ב-artifacts/output.txt.
      • אם com.example.app היא אפליקציה נוספת (--additional-apps), היא נשמרת ב-artifacts/com.example.app-genfiles/output.txt.

מסמכים תומכים

המאמרים הבאים

בשלב הבא, נסו את Device Streaming API ב-Developer Device Platform.