Atest הוא כלי שורת פקודה שמאפשר למשתמשים ליצור, להתקין ולהריץ בדיקות של Android באופן מקומי. כך אפשר להאיץ מאוד את ההרצות החוזרות של הבדיקות בלי צורך בידע לגבי אפשרויות שורת הפקודה של Trade Federation test harness. בדף הזה מוסבר איך משתמשים ב-Atest כדי להריץ בדיקות ל-Android.
למידע כללי על כתיבת בדיקות ל-Android, תוכלו לעיין במאמר בדיקת פלטפורמת Android.
מידע על המבנה הכללי של Atest זמין במדריך למפתחים של Atest.
מידע על הפעלת בדיקות בקובצי TEST_MAPPING דרך Atest זמין במאמר הפעלת בדיקות בקובצי TEST_MAPPING.
כדי להוסיף תכונה ל-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] |
מריץ מחדש את כל הבדיקות עד שמתרחש כשל או עד שמגיעים לאיטרציה המקסימלית. (10 כברירת מחדל) |
|
--retry-any-failure [COUNT=10] |
מריץ שוב בדיקות שנכשלו עד שהוא עובר או מגיע איטרציה מקסימלית. (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
כדי להריץ בדיקות שמשולבות ישירות ב-TrendFed (ללא מודולים), צריך להזין את השם כפי שהוא מופיע בפלט של הפקודה 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
ציון השלבים: build, install או run
משתמשים באפשרויות -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
אימות יכול לאלץ בדיקה לדלג על שלב הניקוי או הפריקה. בדיקות רבות, כמו 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: מריצים רק בדיקות שנכשלו עד שמגיעים לאיטרציה המקסימלית או עד שמגיעים לאיטרציה המקסימלית.
- נניח של-
test-to-run
יש כמה מקרי בדיקה ואחד מהבדיקות נכשל. מפעילים רק את הבדיקה שנכשלה 10 פעמים (ברירת המחדל) או עד שהבדיקה עוברת.atest test-to-run --retry-any-failure
- מפסיקים את ההרצה של הבדיקה שנכשלה אחרי שהיא עוברת או מגיעה לסיבוב ה-100.
atest test-to-run --retry-any-failure 100
הרצת בדיקות במכשירי AVD
התכונה Atest יכולה להריץ בדיקות של AVD חדש שנוצר. מריצים את acloud create
כדי ליצור מכשיר AVD ולפתח ארטיפקטים, ואז משתמשים בדוגמאות הבאות כדי להריץ את הבדיקות.
הפעלת AVD והרצת בדיקות שלו:
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 להרצת הבדיקה, צריך להשתמש במבנה הבא ולוודא שהארגומנטים המותאמים אישית תואמים לפורמט האפשרות של שורת הפקודה Tradeified.
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
מידע נוסף על אפשרויות לבדיקה בלבד זמין במאמר העברת אפשרויות למודולים.