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 |
הפקודה מתקינה במכשיר פריטי מידע שנוצרים בתהליך פיתוח (Artifact) של בדיקות (חבילות APK). (ברירת מחדל) |
-t |
--test |
מריץ את הבדיקות. (ברירת מחדל) |
-s |
--serial |
מריצים את הבדיקות במכשיר שצוין. אפשר לבדוק רק מכשיר אחד בכל פעם. |
-d |
--disable-teardown |
משבית את פירוק הבדיקה ואת הניקוי. |
|
--dry-run |
הרצות ניסיון של Atest בלי לבצע build, התקנה או הרצה של בדיקות. |
-m |
--rebuild-module-info |
מאלץ בנייה מחדש של הקובץ module-info.json . |
-w |
--wait-for-debugger |
האפליקציה ממתינה שמנפה הבאגים יסיים את הפעולה לפני ההרצה. |
-v |
--verbose |
הצגת רישום ברמה DEBUG. |
|
--iterations |
הבדיקות ירוצו בלולאה עד שמגיעים למספר המקסימלי של האיטרציות. (10 כברירת מחדל) |
|
--rerun-until-failure [COUNT=10] |
מריץ מחדש את כל הבדיקות עד שמתרחש כשל או עד שמגיעים לאיטרציה המקסימלית. (10 כברירת מחדל) |
|
--retry-any-failure [COUNT=10] |
מריץ מחדש בדיקות שנכשלו עד שהן עוברות או עד שמגיעים למספר המקסימלי של איטרציות. (10 כברירת מחדל) |
|
--start-avd |
יוצר באופן אוטומטי מכשיר וירטואלי של Android (AVD) ומריץ בדיקות במכשיר הווירטואלי. |
|
--acloud-create |
יצירת מכשיר וירטואלי של Android באמצעות הפקודה 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
Atest יכול להריץ קבצים בינאריים של GTest. משתמשים ב--a
כדי להריץ את הבדיקות האלה לכל הארכיטקטורות הזמינות של המכשירים, שבמקרה הזה הן armeabi-v7a
(ARM 32 ביט) ו-arm64-v8a
(ARM 64 ביט).
בדיקת קלט לדוגמה:
atest -a libinput_tests inputflinger_tests
כדי לבחור קובץ בינארי ספציפי של GTest להפעלה, משתמשים בנקודתיים (:) כדי לציין את שם הבדיקה, ובסולמית (#) כדי לציין שיטה ספציפית.
לדוגמה, בהגדרת הבדיקה הבאה:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
מריצים את הפקודה הבאה כדי לציין את הבדיקה כולה:
atest inputflinger_tests:InputDispatcherTest
אפשר גם להריץ בדיקה ספציפית באמצעות הפקודות הבאות:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
הרצת בדיקות ב-TEST_MAPPING
Atest יכול להריץ בדיקות בקבצים מסוג TEST_MAPPING
.
הרצת בדיקות לפני שליחת קוד באופן מרומז
הפעלת בדיקות לפני שליחה ב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: מריצים את כל הבדיקות עד שמתרחשת שגיאה או עד שמגיעים למספר המקסימלי של איטרציות.
- התהליך ייפסק אם תתרחש שגיאה או אם האיטרציה תגיע לסיבוב העשירי (ברירת המחדל).
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 להרצת הבדיקה, משתמשים במבנה הבא ומוודאים שהארגומנטים המותאמים אישית תואמים לפורמט של אפשרויות שורת הפקודה 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
מידע נוסף על אפשרויות של בדיקה בלבד זמין במאמר העברת אפשרויות למודולים.