Atest הוא כלי שורת פקודה שמאפשר למשתמשים ליצור, להתקין ולהריץ בדיקות Android באופן מקומי. כך אפשר להאיץ מאוד את ההרצות החוזרות של הבדיקות בלי צורך בידע לגבי אפשרויות שורת הפקודה של Trade Federation test harness. בדף הזה מוסבר איך משתמשים ב-Atest כדי להריץ בדיקות ל-Android.
למידע כללי על כתיבת בדיקות ל-Android, תוכלו לעיין במאמר בדיקת פלטפורמת Android.
מידע על המבנה הכללי של Atest זמין במדריך למפתחים של Atest.
מידע על הפעלת בדיקות בקובצי TEST_MAPPING באמצעות Atest זמין במאמר הפעלת בדיקות בקובצי TEST_MAPPING.
כדי להוסיף תכונה ל-Atest, פועלים לפי תהליך העבודה של מפתחים ב-Atest.
הגדרת הסביבה
כדי להגדיר את סביבת Atest, פועלים לפי ההוראות במאמרים הגדרת הסביבה, בחירת יעד ויצירת הקוד.
שימוש בסיסי
הפקודות של atest מופיעות בפורמט הבא:
atest test-to-run [optional-arguments]
ארגומנטים אופציונליים
בטבלה הבאה מפורטים הארגומנטים הנפוצים ביותר. הרשימה המלאה זמינה דרך atest --help
.
אפשרות | אפשרות ארוכה | תיאור |
---|---|---|
-b |
--build |
יצירת יעדי בדיקה. (ברירת מחדל) |
-i |
--install |
התקנת פריטי מידע שנוצרים בתהליך פיתוח (APK) במכשיר. (ברירת מחדל) |
-t |
--test |
הרצת הבדיקות. (ברירת מחדל) |
-s |
--serial |
הרצת הבדיקות במכשיר שצוין. אפשר לבדוק רק מכשיר אחד בכל פעם. |
-d |
--disable-teardown |
משבית את הריסת הבדיקה ואת הניקוי שלה. |
|
--dry-run |
הרצת Atest ללא יצירה, התקנה או הפעלה של בדיקות בפועל. |
-m |
--rebuild-module-info |
מאלץ בנייה מחדש של הקובץ module-info.json . |
-w |
--wait-for-debugger |
ממתינים שהכלי לניפוי באגים יסיים לפני שמפעילים. |
-v |
--verbose |
הצגת רישום ביומן ברמה DEBUG. |
|
--iterations |
הבדיקה תרוץ בלולאה עד שמגיעים לחזרה (iteration) המקסימלית. (10 כברירת מחדל) |
|
--rerun-until-failure [COUNT=10] |
הפעלה מחדש של כל הבדיקות עד שמתרחשת כשל או שמגיעים לחזרה על הבדיקה (iteration) המקסימלית. (10 כברירת מחדל) |
|
--retry-any-failure [COUNT=10] |
הבדיקה מופעל מחדש עד שהיא עוברת או עד שמגיעים לחזרה על הבדיקה (iteration) המקסימלית. (10 כברירת מחדל) |
|
--start-avd |
יוצרת AVD באופן אוטומטי ומריצה בדיקות במכשיר הווירטואלי. |
|
--acloud-create |
יצירת AVD באמצעות הפקודה acloud . |
|
--[CUSTOM_ARGS] |
מציין ארגומנטים מותאמים אישית למפעילי הבדיקות. |
-a |
--all-abi |
הפעלת הבדיקות לכל ארכיטקטורות המכשירים הזמינות. |
|
--host |
הרצת הבדיקה באופן מלא במארח ללא מכשיר. הערה: הפעלת בדיקת מארח שדורשת מכשיר עם --host
תיכשל. |
|
--history |
תוצאות הבדיקה מוצגות בסדר כרונולוגי. |
|
--latest-result |
הדפסת תוצאת הבדיקה האחרונה. |
מידע נוסף על -b
, -i
ו--t
זמין בקטע ציון שלבים: build, install או run.
ציון בדיקות
כדי להריץ בדיקות, מציינים בדיקה אחת או יותר באמצעות אחד מהמזהים הבאים:
- שם המודול
- מודול:Class
- שם הכיתה
- בדיקת שילוב של Tradefed
- נתיב הקובץ
- שם חבילה
מפרידים בין הפניות לכמה בדיקות באמצעות רווחים, כך:
atest test-identifier-1 test-identifier-2
שם המודול
כדי להריץ מודול בדיקה שלם, צריך להשתמש בשם המודול. מזינים את השם כפי שהוא מופיע במשתנים LOCAL_MODULE
או LOCAL_PACKAGE_NAME
בקובץ Android.mk
או Android.bp
של הבדיקה.
לדוגמה:
atest FrameworksServicesTests
atest CtsVideoTestCases
מודול:Class
כדי להפעיל כיתה אחת בתוך מודול, משתמשים ב-Module:Class. מודול זהה לזה שמתואר בקטע שם המודול. Class הוא שם כיתה הבדיקה בקובץ .java
, והוא יכול להיות שם הכיתה המלא או השם הבסיסי.
לדוגמה:
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
שם הכיתה
כדי להריץ מחלקה אחת בלי לציין במפורש את שם המודול, משתמשים בשם המחלקה.
לדוגמה:
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
בדיקת שילוב של Tradefed
כדי להריץ בדיקות שמשולבות ישירות ב-TradeFed (לא מודולים), מזינים את השם כפי שהוא מופיע בפלט של הפקודה tradefed.sh list configs
. לדוגמה:
כדי להריץ את הבדיקה reboot.xml
:
atest example/reboot
כדי להריץ את הבדיקה native-benchmark.xml
:
atest native-benchmark
נתיב הקובץ
אפשר להריץ ב-Atest גם בדיקות מבוססות-מודול וגם בדיקות מבוססות-שילוב, על ידי הזנת הנתיב לקובץ הבדיקה או לספריית הבדיקה הרלוונטית. אפשר גם להריץ כיתה אחת על ידי ציון הנתיב לקובץ Java של הכיתה. יש תמיכה בנתיבים יחסיים וגם בנתיבים מוחלטים.
הרצת מודול
בדוגמאות הבאות מפורטות שתי דרכים להפעלת המודול CtsVideoTestCases
באמצעות נתיב קובץ.
הפעלה מ-Android repo-root
:
atest cts/tests/video
הפעלה מ-Android repo-root/cts/tests/video
:
atest .
הרצת כיתה לבדיקה
בדוגמה הבאה מוסבר איך להריץ כיתה ספציפית בתוך המודול CtsVideoTestCases
באמצעות נתיב קובץ.
ממכשיר Android repo-root
:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
הרצת בדיקת אינטגרציה
בדוגמה הבאה מוסבר איך להריץ בדיקת שילוב באמצעות נתיב קובץ מ-Android repo-root
:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
שם חבילה
ב-Atest יש תמיכה בחיפוש בדיקות לפי שם החבילה.
לדוגמה:
atest com.android.server.wm
atest com.android.uibench.janktests
מציינים את השלבים: פיתוח, התקנה או הפעלה
משתמשים באפשרויות -b
, -i
ו--t
כדי לציין אילו שלבים להריץ. אם לא מציינים אפשרות, כל השלבים יתבצעו.
- יעדי build בלבד:
atest -b test-to-run
- הרצת בדיקות בלבד:
atest -t test-to-run
- התקנת קובץ ה-APK והרצת הבדיקות:
atest -it test-to-run
- פיתוח והרצה, בלי התקנה:
atest -bt test-to-run
אפשר להשתמש ב-Atest כדי לאלץ בדיקה לדלג על שלב הניקוי או הניתוק. בדיקות רבות, כמו CTS, מנקות את המכשיר אחרי הרצת הבדיקה, כך שניסיון להריץ מחדש את הבדיקה עם -t
נכשל ללא הפרמטר --disable-teardown
. כדי לדלג על שלב הניקוי של הבדיקה ולבצע בדיקה רציפה, צריך להשתמש ב--d
לפני -t
.
atest -d test-to-run
atest -t test-to-run
הפעלת שיטות ספציפיות
Atest תומך בהרצה של שיטות ספציפיות בתוך כיתה בדיקה. אמנם צריך ליצור את המודול כולו, אבל כך מקצרים את הזמן הנדרש להרצת הבדיקות. כדי להריץ שיטות ספציפיות, מזהים את הכיתה באחת מהדרכים הנתמכות לזיהוי כיתה (Module:Class, נתיב קובץ וכו') ומצרפים את שם השיטה:
atest reference-to-class#method1
כשמציינים כמה שיטות, מפרידים ביניהן באמצעות פסיקים:
atest reference-to-class#method1,method2,method3
לדוגמה:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
בשתי הדוגמאות הבאות מוצגות הדרכים המועדפות להרצת שיטה אחת, testFlagChange
. מומלץ להשתמש בדוגמאות האלה במקום להשתמש רק בשם הכיתה, כי ציון המודול או המיקום של קובץ ה-Java מאפשר ל-Atest למצוא את הבדיקה מהר יותר.
באמצעות Module:Class:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
ממכשיר Android repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
אפשר להריץ כמה שיטות ממחלקות וממודולים שונים:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
הפעלת מספר כיתות
כדי להריץ כמה כיתות, מפרידים ביניהן באמצעות רווחים, בדיוק כמו כשמריצים כמה בדיקות. Atest יוצר ומריץ כיתות ביעילות, כך שציון קבוצת משנה של כיתות במודול משפרת את הביצועים בהשוואה להרצה של המודול כולו.
כדי להריץ שתי כיתות באותו מודול:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
כדי להריץ שתי כיתות במודולים שונים:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
הרצת קובצי בינאריים של GTest
אפשר להריץ קובצי בינאריים של GTest באמצעות Atest. משתמשים ב--a
כדי להריץ את הבדיקות האלה לכל ארכיטקטורות המכשירים הזמינות. בדוגמה הזו, הן armeabi-v7a
(ARM 32 ביט) ו-arm64-v8a
(ARM 64 ביט).
דוגמה לבדיקת קלט:
atest -a libinput_tests inputflinger_tests
כדי לבחור קובץ בינארי ספציפי של GTest להרצה, משתמשים בנקודתיים (:) כדי לציין את שם הבדיקה, ובתג ה-hashtag (#) כדי לציין שיטה ספציפית.
לדוגמה, בהגדרת הבדיקה הבאה:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
כדי לציין את כל הבדיקה, מריצים את הפקודה הבאה:
atest inputflinger_tests:InputDispatcherTest
לחלופין, אפשר להריץ בדיקה ספציפית באמצעות:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
הרצת בדיקות ב-TEST_MAPPING
אפשר להריץ בדיקות בקבצים מסוג TEST_MAPPING
באמצעות Atest.
הרצת בדיקות לפני שליחת בקשת תיקון באופן משתמע
מריצים בדיקות לפני שליחת קובץ בקבצים מסוג TEST_MAPPING
בספריות הנוכחית וההורה:
atest
מריצים בדיקות לפני שליחת קובצי TEST_MAPPING
בתיקייה /path/to/project ובתיקיות ההורה שלה:
atest --test-mapping /path/to/project
הרצת קבוצת בדיקה ספציפית
קבוצות הבדיקה הזמינות הן: presubmit
(ברירת המחדל), postsubmit
, mainline-presubmit
ו-all
.
מריצים בדיקות לאחר שליחת הקוד בקבצים מסוג TEST_MAPPING בספריות הנוכחית וההורה:
atest :postsubmit
הרצת בדיקות מכל הקבוצות בקובצי TEST_MAPPING:
atest :all
מריצים בדיקות לאחר שליחת הקוד בקובצי TEST_MAPPING בתיקייה /path/to/project ובתיקיות ההורה שלה:
atest --test-mapping /path/to/project:postsubmit
מריצים בדיקות של השורה הראשית בקבצים של TEST_MAPPING בתיקייה /path/to/project ובתיקיות ההורה שלה:
atest --test-mapping /path/to/project:mainline-presubmit
הרצת בדיקות בספריות משנה
כברירת מחדל, Atest מחפש בדיקות רק בקובצי TEST_MAPPING כלפי מעלה (מהתיקייה הנוכחית או מהתיקייה שצוינה ועד לתיקיות ההורה שלה). אם רוצים להריץ בדיקות גם בקובצי TEST_MAPPING בתיקיות המשנה, צריך להשתמש ב---include-subdirs
כדי לאלץ את Atest לכלול גם את הבדיקות האלה:
atest --include-subdirs /path/to/project
הרצת בדיקות במחזור
כדי להריץ בדיקות בחזרה, מעבירים את הארגומנט --iterations
. בין שהבדיקה תעבור ובין שלא, Atest יחזור על הבדיקה עד שיגיע לחזרה המרבית.
לדוגמה:
כברירת מחדל, Atest חוזר על עצמו 10 פעמים. מספר החזרות חייב להיות מספר שלם חיובי.
atest test-to-run --iterations
atest test-to-run --iterations 5
בעזרת הגישות הבאות קל יותר לזהות בדיקות לא יציבות:
גישה 1: מריצים את כל הבדיקות עד שמתרחשת כשל או שמגיעים לחזרה (iteration) המקסימלית.
- הפסקה כשמתרחשת כשל או שהחזרה על התהליך מגיעה לסיבוב ה-10 (ברירת המחדל).
atest test-to-run --rerun-until-failure
- עוצרים כשמתרחשת כשל או שהחזרה על הפעולה מגיעה לסיבוב ה-100.
atest test-to-run --rerun-until-failure 100
גישה 2: מריצים רק בדיקות שנכשלו עד שהן עוברות או עד שמגיעים לחזרה (iteration) המקסימלית.
- נניח של-
test-to-run
יש כמה מקרי בדיקה ואחד מהבדיקות נכשל. מפעילים רק את הבדיקה שנכשלה 10 פעמים (ברירת המחדל) או עד שהבדיקה עוברת.atest test-to-run --retry-any-failure
- מפסיקים להריץ את הבדיקה שנכשלה כשהיא עוברת או מגיעה לסיבוב ה-100.
atest test-to-run --retry-any-failure 100
הפעלת בדיקות במכשירי AVD
אפשר להריץ בדיקות ב-Atest במכונה וירטואלית חדשה שנוצרה. מריצים את acloud create
כדי ליצור מכשיר AVD ולפתח ארטיפקטים, ואז משתמשים בדוגמאות הבאות כדי להריץ את הבדיקות.
מפעילים מכונה וירטואלית ל-Android ומריצים בה בדיקות:
acloud create --local-instance --local-image && atest test-to-run
התחלת AVD כחלק מרצף בדיקות:
atest test-to-run --acloud-create "--local-instance --local-image"
מידע נוסף זמין ב-acloud create --help
.
העברת אפשרויות למודול
אפשר להעביר אפשרויות למודולים לבדיקה באמצעות Atest. כדי להוסיף אפשרויות של שורת הפקודה של TradeFed להרצת הבדיקה, משתמשים במבנה הבא ומוודאים שהארגומנטים המותאמים אישית עומדים בפורמט של אפשרויות שורת הפקודה של Tradefed.
atest test-to-run -- [CUSTOM_ARGS]
מעבירים את האפשרויות של מודול הבדיקה לגורמים שמכינים את הבדיקה או מפעילים את הבדיקה, שמוגדרים בקובץ התצורה של הבדיקה:
atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
העברת אפשרויות לסוג או לכיתה של ריצה:
atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
מידע נוסף על אפשרויות לבדיקה בלבד זמין במאמר העברת אפשרויות למודולים.