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

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

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

השלבים האלה מניחים שכבר יצרתם Google Cloud פרויקט, השלמתם את שלבי ההגדרה במדריך למתחילים של פלטפורמת המכשירים למפתחים, וביצעתם אימות באמצעות 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 מהרצה של XCTest ב-iOS בשידור חי עם כל הדגלים שהופעלו:

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. לוחצים על Sessions (סשנים).
  8. בשדה Filter, מדביקים את מזהה הסשן מהרצת הבדיקה האחרונה (ראו את פלט הבדיקה).
  9. לוחצים על שם הסשן שמופיע בתוצאות.
  10. בוחרים באפשרות job-* כדי לראות את junit.xml (להרצות של Android instrumentation ו-iOS XCTest), שמכיל פרטים של תוצאות ממוזגות בכל ההרצות ומקרי הבדיקה במשימה.
  11. כדי לראות פירוט של כל הרצה או שבר (shard), פותחים את execution-* (או את execution-*-rerun-* אם הגדרתם ניסיונות חוזרים של בדיקות לא יציבות באמצעות --flaky-test-attempts). בהתאם לסוג הסשן ולדגלים שהוגדרו, התיקייה הזו יכולה להכיל פריטי מידע רבים שנוצרו בתהליך הפיתוח. הסבר על התוצאות
  12. כדי להבין את התוצאות, צריך להיכנס לכתובות ה-URL הציבוריות וכתובות ה-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 ובריצות של XCTest ב-iOS, הקבצים junit.xml שנוצרים בפלט הם קובצי XML רגילים של JUnit. קובץ junit.xml ברמת ההפעלה נכתב לכל ספריית execution-*, וקובץ junit.xml משולב נכתב לכל ספריית job-*. הקבצים האלה מכילים את התוצאות של כל שיטת בדיקה, ומאפשרים לכם לבדוק את הסטטוס הספציפי של ההצלחה או הכשל, את זמן ההפעלה ואת עקבות השגיאות של כל שיטת בדיקה. אפשר לשלב ולנתח את הקבצים האלה בקלות עם רוב המערכות של אינטגרציה רציפה (CI) ופיתוח רציף (continuous delivery) ועם כלי דיווח על בדיקות.

בנוסף לתוצאות בדיקה מובנות, כל ספריית execution-* מכילה יומנים וארטיפקטים ספציפיים לפלטפורמה:

  • הפעלות של כלי מדידה ב-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), שמתעד את ה-syslog הגולמי של מכשיר iOS, וכל דוח קריסה לאבחון של .ips אם תהליך קרס במהלך ביצוע הבדיקה.
  • קבצי המכשיר שנשלפו וצוינו באמצעות --paths-to-pull מאוחסנים בתיקיית המשנה artifacts/ של ספריית ההפעלה.
    • במכשיר Android, הקבצים שנמשכים שומרים על נתיב המכשיר שלהם בתיקייה artifacts/ (לדוגמה, artifacts/sdcard/output.txt או artifacts/data/local/tmp/results.json).
    • בהפעלות של XCTest ב-iOS, קבצים שנמשכים ממכולת נתוני אפליקציה באמצעות --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 (ממשק API לסטרימינג למכשירים) של Developer Device Platform.