1. מבוא
העדכון האחרון: 7 באפריל 2022
איך מריצים בדיקות למובייל באמצעות מערכות CI/CD
הפעלת בדיקות באפליקציות לנייד יכולה להיות מסובכת: אפליקציות רבות פועלות בפלטפורמות, במכשירים ובגרסאות API שונות. מפתחי אפליקציות רוצים לבדוק את האפליקציות שלהם בכמה שיותר תצורות כדי לזהות בעיות לפני שהמשתמשים ייתקלו בהן. עם זאת, מגבלות תקציביות ומגבלות משאבים מקטינות את מספר מכשירי הבדיקה ואת כמות התחזוקה הידנית שמפתחים יכולים להשקיע בהם. כשתהליך הפיתוח מתרחב, במיוחד במערכות של אינטגרציה רציפה (CI) ופיתוח רציף (CD), צריך לאוטומט את תהליך הבדיקה ולצמצם את העלות והמאמץ של התחזוקה.
כדי לעזור לכם להבין את הביצועים של האפליקציות במכשירים של המשתמשים, ב-Firebase Test Lab מתארחים מגוון מכשירים ניידים פיזיים ווירטואליים במרכזי הנתונים שלנו. אנחנו מספקים גם את Google Cloud CLI, כלי שורת פקודה שפועל באופן עצמאי בפלטפורמה ומארגן את הרצת הבדיקות במכשירים במרכזי הנתונים שלנו. בעזרת gcloud CLI קל לשלב את פתרון הבדיקה מבוסס-הענן של Test Lab בתהליכי עבודה קיימים של CI/CD.
תמיכה בפלטפורמות שונות
Test Lab מספק פתרונות לבדיקת אפליקציות ל-Android ול-iOS, ותמיכה מיוחדת במשחקים לנייד כמו Unity. אפשרויות הבדיקה כוללות מסגרות בדיקה פופולריות כמו Android Espresso, UI Automator ו-iOS XCTest. בעזרת הסורק האוטומטי שלנו, Robo, אפשר להפעיל בדיקות ב-Test Lab גם בלי קוד בדיקה.
אין דרישות חומרה
Test Lab מארח מכשירים פיזיים במרכזי הנתונים של Google, ומארח מכשירים וירטואליים ב-Google Cloud. כל מה שצריך לעשות הוא לשלוח את הבדיקות אל Test Lab ולהמתין לתוצאות.
מהיר ואמין
הפעלת הרבה מקרי בדיקה בו-זמנית יכולה להימשך זמן רב ולחסום תהליכי CI/CD. בעזרת Test Lab, אפשר לפצל בדיקות ולהריץ אותן במקביל בכמה מכשירים. אפשר גם לזהות תנודות, שהן נקודת כאב נפוצה בבדיקות לנייד.
מה תלמדו
- איך יוצרים ארטיפקטים של בדיקות
- איך מריצים בדיקה של אפליקציה לנייד באמצעות gcloud CLI
- איך מגדירים את Jenkins CI
- איך מריצים בדיקות לנייד באמצעות Jenkins CI
- איך מגדירים בדיקות להרחבה באמצעות מערכות CI
ה-codelab הזה מתמקד בהרצת בדיקות. מושגים וקטעי קוד לא רלוונטיים מוצגים בקצרה, ואתם יכולים פשוט להעתיק ולהדביק אותם.
מה צריך להכין
אם אתם מעדיפים לבנות דברים מאפס, אתם צריכים את Android Studio כדי להריץ בדיקת Android, או את XCode כדי להריץ בדיקת iOS. או פשוט להגיע ואנחנו נספק את הארטיפקטים.
2. הרצת בדיקה באמצעות CLI של gcloud
יצירת APK של אפליקציית Android ו-APK לבדיקה
כדי להריץ בדיקה באמצעות Test Lab, צריך קודם ליצור APK של אפליקציית Android ו-APK של בדיקה, שמכיל בדיקות עם מכשור להרצה במכשירי חומרה או באמולטורים. אם כבר יש לכם בסיס קוד שעובד, אתם יכולים ליצור קובצי APK משלכם או להשתמש ב-BasicSample for Espresso.
כדי ליצור קובצי APK באמצעות פקודות Gradle, צריך להתקין את Android SDK. אם Android Studio לא מותקן במחשב, צריך להתקין את Android Studio ואת Android SDK, ולהגדיר את סביבת ANDROID_HOME
עם ספריית Android SDK. לדוגמה, מוסיפים את השורה הבאה לקובץ ~/.bash_profile
:
export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk # For MacOS
לאחר מכן, מריצים את הפקודות הבאות כדי לשכפל את הקוד וליצור קובצי APK:
git clone https://github.com/android/testing-samples.git cd testing-samples/ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
אחרי שמריצים את הפקודות clone ו-build, אפשר למצוא את קובץ ה-APK של האפליקציה ואת קובץ ה-APK של הבדיקה במיקומים הבאים:
app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
לחלופין, אפשר להשתמש באפשרויות הבאות כדי לקבל את חבילות ה-APK של הבדיקה והאפליקציה:
- כדי ליצור קובצי APK ב-Android Studio, פועלים לפי ההוראות במאמר בדיקה ב-Android Studio.
- מורידים את אפליקציית פנקס הרשימות לדוגמה. משתמשים בקובץ הבינארי
app-debug-unaligned.apk
ובקובץ בדיקות המכשורapp-debug-test-unaligned.apk
, שנמצאים בתיקייהNotePad/app/build/outputs/apk/
.
אם יש לכם קוד מקור תקין לאפליקציית iOS, אתם יכולים לכתוב XCTest וליצור קובץ ZIP מהאפליקציה ומבדיקות.
שימוש ב-CLI של gcloud כדי להריץ בדיקה באמצעות Test Lab
בקטע הזה תיצרו פרויקט Firebase ותגדירו את סביבת Google Cloud SDK המקומית. מידע נוסף זמין במאמר בנושא תחילת בדיקות באמצעות ה-CLI של gcloud .
הגדרת ה-CLI של gcloud
- מורידים את Google Cloud SDK, שכולל את כלי gcloud CLI.
- מוודאים שההתקנה מעודכנת:
gcloud components update
- נכנסים ל-CLI של gcloud באמצעות חשבון Google:
gcloud auth login
- מגדירים את פרויקט Firebase ב-gcloud CLI, כאשר
PROJECT_ID
הוא מזהה פרויקט Firebase. מזהה הפרויקט מופיע בכתובת ה-URL של מסוף Firebase, לפי המוסכמה למתן שמות הבאה:https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID
אם אין לכם פרויקט ב-Firebase, אתם יכולים ליצור פרויקט חדש במסוף Firebase.
הרצת בדיקה באמצעות קובצי ה-APK שנוצרו
בקטע הזה מריצים בדיקת מכשור במכשיר ברירת המחדל של Test Lab, שהוא Pixel 3 עם API ברמה 28. אם רוצים להשתמש במכשיר אחר, אפשר לבדוק את המכשירים הזמינים.
כדי להשתמש באפליקציה ולבדוק קובצי APK שיצרתם במאמר יצירת קובץ APK של אפליקציית Android ובדיקת קובץ APK, מריצים בדיקת מכשור של Android באמצעות הפקודה הבאה:
gcloud firebase test android run \ --type instrumentation \ --app app/build/outputs/apk/debug/app-debug.apk \ --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
ניתוח תוצאות הבדיקה
כדי לנתח את תוצאות הבדיקה, אפשר:
-
gcloud
סיכום – בסיום הבדיקה, ה-CLI של gcloud מדפיס סיכום בסיסי של תוצאות הבדיקה. -
gcloud
קוד יציאה – אחרי שהבדיקה מסתיימת, הפקודה יוצאת עם 0 אם הבדיקה עברה. אם הבדיקה נכשלת, הפקודה יוצאת עם קוד יציאה שאינו אפס. - מסוף Firebase – CLI של gcloud מדפיס קישור למסוף Firebase. הקישור פועל לפי מוסכמת מתן השמות
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
מידע נוסף זמין במאמר בנושא פירוש תוצאות של הרצת בדיקה יחידה. - קובץ JUnit XML – ה-CLI של gcloud מדפיס את הפלט הבא:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]
test-lab-xxxxx/xxxxx
היא הקטגוריה של Cloud Storage שבה מאוחסנים תוצאות ובדיקות. כדי לאתר את קובץ ה-XML של JUnit שמכיל את תוצאות הבדיקה, פותחים את הקישור ועוברים אל blueline-28-en-portrait/test_result_1.xml
.
3. הגדרה באמצעות Jenkins CI
בקטע הזה נשתמש ב-Jenkins CI, מערכת CI פופולרית, כדי להריץ בדיקות באמצעות Test Lab. אם רוצים להשתמש במערכת CI אחרת, אפשר לעיין בשיטות המומלצות המתקדמות להרצת חבילות גדולות של בדיקות ובתיעוד של מערכות CI אחרות כמו Bitrise ו-Circle CI. אפשר להשתמש ב-Flank כחלופה ל-CLI של gcloud.
הפעלת gcloud CLI ל-Jenkins
כדי להשתמש ב-Test Lab עם Jenkins, צריך להפעיל את ממשקי ה-API הנדרשים ולהגדיר חשבון שירות ש-Jenkins יכול להשתמש בו כדי לבצע אימות באמצעות ה-CLI של gcloud.
הוספת חשבון שירות של Google Cloud ל-Jenkins
חשבונות שירות הם חשבונות מוגבלים שמיועדים לשילובים של שירותים. החשבונות האלה מאפשרים שליטה מדויקת בשירותים ספציפיים, והם לא כפופים לבדיקות ספאם או להנחיות של CAPTCHA, שיכולות לחסום את בניית ה-CI.
כדי ליצור חשבון שירות:
- פותחים את הדף Service Accounts במסוף Google Cloud.
- לוחצים על Create service account (יצירת חשבון שירות), מוסיפים שם ותיאור, ואז לוחצים על Create and continue (יצירה והמשך).
- בתפריט הנפתח Select a role (בחירת תפקיד), בוחרים באפשרות Basic (בסיסי) ואז באפשרות Editor (עורך).
- לוחצים על המשך ואז על סיום.
לאחר מכן, יוצרים ומורידים מפתח אימות ש-Jenkins יכול להשתמש בו כדי לבצע אימות כחשבון השירות שיצרתם.
כדי ליצור ולהוריד את המפתח של חשבון השירות:
- בדף Service Accounts במסוף Google Cloud, לוחצים על כתובת האימייל שמשויכת לחשבון שיצרתם.
- בוחרים באפשרות Keys (מפתחות), לוחצים על Add key (הוספת מפתח) ואז על Create new key (יצירת מפתח חדש).
- בוחרים באפשרות JSON ולוחצים על Create.
- כשמופיעה בקשה להוריד את הקובץ, לוחצים על אישור. מורידים את הקובץ למקום בטוח במחשב. תצטרכו את הקובץ הזה מאוחר יותר כדי להגדיר את Jenkins.
מידע נוסף על יצירת חשבונות שירות זמין במאמר יצירת חשבון שירות.
הפעלת ממשקי Google Cloud API הנדרשים
באמצעות Cloud Testing API אפשר להריץ בדיקות בתשתית של Google. הפעלתם את ה-API הזה כשסיימתם את השלב 'הפעלת בדיקה באמצעות gcloud CLI'. Cloud Tool Results API מאפשר לכם לגשת לתוצאות הבדיקה באופן פרוגרמטי.
- פותחים את ספריית ה-API של Google Developers Console.
- בסרגל החיפוש בחלק העליון של מסוף Firebase, מזינים את השם של כל אחד מהממשקי הנדרשים ( Cloud Testing API ו-Cloud Tool Results API). מוצג דף הסקירה הכללית של ה-API המבוקש.
- לוחצים על Enable API בדף הסקירה הכללית של כל API.
התקנה והגדרה של Jenkins
אפשר להתקין ולהגדיר את Jenkins CI ב-Linux, ב-macOS, ב-Windows ובעוד הרבה סביבות אחרות. פרטים מסוימים ב-codelab הזה ספציפיים להתקנה ולהפעלה של Jenkins CI ב-Linux, כולל השימוש בלוכסנים (/) בנתיבי קבצים.
כדי להוריד ולהתקין את Jenkins במחשב עם Linux או Windows, פועלים לפי ההוראות להתקנת Jenkins. אחרי שמתקינים את Jenkins, פועלים לפי הוראות ההתקנה של Jenkins כדי להשלים את ההגדרה ולגשת ללוח הבקרה של Jenkins באמצעות http://localhost:8080.
אימות הפלאגינים שהותקנו
Jenkins תומך במערכות שונות לניהול גרסאות. ב-codelab הזה, משתמשים ב-Git כדי להריץ את הבדיקה הקודמת. כדי לשפר את חוויית השימוש ב-CLI של gcloud, צריך להתקין את הפלאגין GCloud SDK.
- בלוח הבקרה של Jenkins, לוחצים על Manage Jenkins ואז על Manage Plugins.
- מחפשים את הפלאגינים Git ו-GCloud SDK ומתקינים אותם (אם הם עדיין לא מותקנים).
הגדרת המיקום של ערכות ה-SDK של Android ו-Google Cloud
עכשיו צריך להנחות את Jenkins איפה למצוא את Google Cloud SDK ואת Android SDK.
כדי להגדיר את ערכות ה-SDK של Google Cloud ו-Android ל-Jenkins, פועלים לפי השלבים הבאים:
- בלוח הבקרה של Jenkins, לוחצים על Manage Jenkins ואז על Global Tool Configuration.
- בקטע Google Cloud SDK, לוחצים על Add Google Cloud SDK (הוספת Google Cloud SDK).
- בשדה Name (שם), מזינים שם למופע של Google Cloud SDK שקל לזכור, למשל GCloud-SDK.
- מזינים את ספריית הבית של Google Cloud SDK, לדוגמה,
/opt/google-cloud-sdk
. - לוחצים על שמירה.
- כדי להגדיר את הנכסים בכל המערכת עבור ערכות ה-SDK של Android ו-Google Cloud, פותחים את Dashboard > Manage Jenkins > Configure System.
- מסמנים את תיבת הסימון Environment variables (משתני סביבה) ולוחצים על Add (הוספה).
- בשדה שם מזינים ANDROID_HOME. בשדה Value (ערך), מזינים את המיקום של Android SDK, לדוגמה,
/opt/Android/Sdk
. - מסמנים את תיבת הסימון מיקומי כלים ולוחצים על הוספה. בתפריט הנפתח Name (שם), בוחרים את השם של מופע Google Cloud SDK שהוספתם בהגדרת הכלי הגלובלית.
- בשדה Home, מזינים את המיקום של Google Cloud SDK, למשל
/opt/google-cloud-sdk
. - לוחצים על שמירה.
הוספת פרטי הכניסה של חשבון השירות ל-Jenkins
עכשיו מוסיפים את פרטי הכניסה של חשבון השירות ב-CLI של gcloud ל-Jenkins, כדי ש-Jenkins יוכל לבצע אימות ולהריץ בהצלחה פקודות ב-CLI של gcloud.
- בלוח הבקרה של Jenkins, לוחצים על Manage Jenkins ואז על Manage Credentials.
- בקטע Stores scoped to Jenkins (מאגרי נתונים בהיקף של Jenkins), לוחצים על הקישור לדומיין (global) (גלובלי) ואז על Add Credentials (הוספת פרטי כניסה).
- בתפריט הנפתח Kind, בוחרים באפשרות Google Service Account from private key.
- בשדה Project Name (שם הפרויקט), מזינים את שם הפרויקט ב-Firebase.
- בוחרים באפשרות JSON key, לוחצים על Browse ועוברים למיקום שבו שמרתם את מפתח חשבון השירות.
- לוחצים על יצירה.
עכשיו אפשר להגדיר את הגרסה האוטומטית של Jenkins בשביל Test Lab.
4. הרצת בדיקות ב-Test Lab באמצעות Jenkins CI
אחרי שמגדירים את Jenkins, אפשר להריץ את אותה בדיקה באמצעות Jenkins.
אתם יכולים להגדיר את Jenkins כך שיפעיל גרסאות build אוטומטיות ויריץ בדיקות בכל פעם שמתבצעת בדיקה של עדכונים באפליקציה. אפשר גם להגדיר את Jenkins להרצת גרסאות build באופן תקופתי. מידע נוסף על הגדרת build ב-Jenkins זמין במאמר בנושא הגדרת build אוטומטי.
יצירה והגדרה של פרויקט Jenkins
יוצרים פרויקט כדי להריץ בדיקות שילוב רציפות של האפליקציה באמצעות Test Lab.
יצירת פרויקט Jenkins
- פותחים את לוח הבקרה של Jenkins על ידי מעבר אל http://localhost:8080.
- במרכז הבקרה של Jenkins, לוחצים על New Item (פריט חדש).
- מזינים שם לפרויקט בשדה Item name (שם הפריט) ולוחצים על Freestyle project (פרויקט חופשי) כדי ליצור פרויקט שמשתמש בהגדרת בנייה אחת.
- לוחצים על אישור. כדי להשלים את הגדרות הפרויקט, צריך להשלים את הקטעים הנותרים לפי הסדר.
הגדרת ניהול קוד מקור
- בכרטיסייה ניהול קוד מקור, בוחרים באפשרות Git.
- בשדה Repository URL (כתובת ה-URL של המאגר), מזינים https://github.com/android/testing-samples.git.
הגדרת סביבת ה-build
בקטע Build Environment (סביבת build) אפשר להגדיר מאפייני build. כדי להפעיל אימות ב-Google Cloud:
- בכרטיסייה Build Environment (סביבת בנייה), מסמנים את תיבת הסימון GCloud SDK authentication (אימות GCloud SDK) ובוחרים את שם ההתקנה שבחרתם כשנוספו פרטי ההתקנה של Google Cloud.
- בתפריט הנפתח Google Credentials, בוחרים את פרטי הכניסה של חשבון השירות שהגדרתם.
הוספת שלבי build של Gradle כדי לבנות מחדש חבילות APK
- גוללים למטה לקטע Build, לוחצים על Add build step ואז בוחרים באפשרות Execute shell.
- מוסיפים שלב בנייה כדי להריץ את הפקודות הבאות בספרייה הראשית של האפליקציה:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
הוספת שלב בנייה של gcloud CLI ל-Jenkins
עכשיו אפשר להוסיף שלב בנייה ל-Jenkins כדי להריץ את Test Lab באמצעות שורת הפקודה של gcloud CLI.
כדי להוסיף את שלב הבנייה של gcloud CLI, מוסיפים שלב בנייה חדש מסוג Execute shell ומזינים את הפקודה הבאה:
gcloud config set project PROJECT_ID gcloud firebase test android run \ --app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk --test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
אחרי שמסיימים להגדיר את הפרויקט, גוללים לחלק התחתון של הדף ושומרים את ההגדרה. תועברו לדף הבית של הפרויקט החדש.
הרצת בדיקות באמצעות Jenkins
עכשיו אתם מוכנים לבנות את פרויקט Jenkins ולהריץ בדיקה כמו הבדיקה הידנית שהרצתם באמצעות gcloud CLI.
כדי להריץ בדיקה באמצעות Jenkins, מבצעים את השלבים הבאים:
- כדי להפעיל את ה-Build באופן ידני, לוחצים על Build Now (יצירת Build עכשיו).
- כדי לבדוק את ההתקדמות והתוצאות, לוחצים על הגרסה החדשה > Console Output.
אם לא מוצגות שגיאות, מצוין! הרגע הגדרתם פרויקט והפעלתם בדיקה במכשיר Pixel 2 בלחיצה אחת. אם נתקלתם בשגיאות, כדאי לעיין במאמר בנושא פתרון בעיות.
5. שיטות מומלצות מתקדמות להרצת חבילות גדולות של בדיקות
כדי להריץ הרבה בדיקות בו-זמנית במהירות ובאופן מהימן, מומלץ לפעול לפי השיטות המומלצות הבאות.
שיפור הכיסוי במספר תצורות של מכשירים
אפשר להוסיף בקלות כמה מכשירים לשלב הבנייה של ה-CLI של gcloud. אפשר גם לבדוק ולבחור מכשירים, גרסאות, אזורים וכיוונים שזמינים. לדוגמה, הפקודה הבאה מריצה בדיקות בשני מכשירים:
- Google Pixel 2 וירטואלי עם רמת API 30 במצב דיוקן והלוקאל באנגלית
- מכשיר Samsung Galaxy S20 פיזי עם רמת API 29 במצב אופקי והלוקאל הצרפתי
gcloud firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --device model=Pixel2,version=30,locale=en,orientation=portrait \ --device model=x1q,version=29,locale=fr,orientation=landscape
שימוש בקובץ הגדרות YAML של gcloud CLI
אם אתם מעדיפים לנהל את הארגומנטים במקום אחד או באמצעות מערכת בקרת המקורות, אתם יכולים לציין את הארגומנטים האלה בקובץ ארגומנטים בפורמט YAML. כדי ללמוד איך להשתמש בתכונה הזו, מריצים את הפקודה gcloud topic arg-files
.
בדיקות שצריך להריץ במקביל
חלוקת בדיקות (Test sharding) מחלקת קבוצה של בדיקות לקבוצות משנה (shards) שפועלות בנפרד ובבידוד. Test Lab מפעיל כל שבר במקביל באמצעות כמה מכשירים, וכך מאפשר להשלים את כל הבדיקות מהר יותר. מידע נוסף זמין במאמר בנושא הפעלת חלוקה למקטעים.
כדי להפעיל חלוקה למקטעים, משתמשים בערוץ gcloud beta
ומוסיפים את הדגל –num-uniform-shards או –test-targets-for-shard לשלב הבנייה של gcloud CLI. לדוגמה, כדי לפצל את הבדיקות לחמש הרצות ולהריץ אותן במקביל, מריצים את הפקודות הבאות:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-uniform-shards 5
הפעלת זיהוי של תנודות
בדיקות לנייד יכולות להיות לא יציבות. לפעמים הבדיקות עוברות, ולפעמים הן נכשלות, גם אם ההגדרה זהה. כדי לזהות אם בדיקה שנכשלה הייתה לא יציבה, אפשר להשתמש בדגל –num-flaky-test-attempts של gcloud CLI. הדגל הזה מציין את מספר הפעמים שצריך לנסות לבצע שוב בדיקה אם לפחות אחד ממקרי הבדיקה נכשל מסיבה כלשהי.
לדוגמה, כדי להפעיל מחדש שלוש פעמים נוספות תרחישי בדיקה שנכשלו אחרי ההפעלה הראשונית שנכשלה, מציינים את הפקודה הבאה:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-flaky-test-attempts 3
6. מזל טוב
כל הכבוד, הפעלת בהצלחה את הבדיקה הראשונה שלך ב-Test Lab באמצעות מערכת CI.
יצרתם קובצי APK של האפליקציה ושל הבדיקות, והפעלתם בדיקת מכשור באמצעות Test Lab באמצעות gcloud CLI. בנוסף, הגדרתם פרויקט Jenkins כדי להפוך את אותה בדיקה לאוטומטית.
עכשיו אתם יודעים מהם השלבים העיקריים לשילוב Test Lab במערכת CI/CD.
מה השלב הבא?
איך מגדירים CI באמצעות Firebase Emulator Suite
קריאה נוספת
- תחילת בדיקות עם מערכות CI | מאמרי עזרה של Firebase
- תחילת הבדיקה באמצעות ה-CLI של gcloud | מסמכי Firebase