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 |
יוצר יעדי בדיקה של גרסאות build. (ברירת מחדל) |
-i |
--install |
התקנת פריטי מידע שנוצרים בתהליך פיתוח (Artifact) של בדיקות (חבילות APK) במכשיר. (ברירת מחדל) |
-t |
--test |
מריץ את הבדיקות. (ברירת מחדל) |
-s |
--serial |
מריצים את הבדיקות במכשיר שצוין. אפשר לבדוק רק מכשיר אחד בכל פעם. |
-d |
--disable-teardown |
משבית את הניקוי וההסרה של הבדיקה. |
|
--dry-run |
הרצות בדיקה של Atest בלי לבצע בנייה, התקנה או הרצה של בדיקות. |
-m |
--rebuild-module-info |
מאלץ בנייה מחדש של הקובץ module-info.json. |
-w |
--wait-for-debugger |
ממתין שמנפה הבאגים יסיים לפני ההרצה. |
-v |
--verbose |
הצגת רישום ביומן ברמת ניפוי הבאגים. |
|
--iterations |
הבדיקות של Loop רצות עד שמגיעים למספר המקסימלי של האיטרציות. (10 כברירת מחדל) |
|
--rerun-until-failure [COUNT=10] |
מריץ מחדש את כל הבדיקות עד שמתרחשת שגיאה או עד שמגיעים למספר האיטרציות המקסימלי. (10 כברירת מחדל) |
|
--retry-any-failure [COUNT=10] |
מריץ מחדש בדיקות שנכשלו עד שהן עוברות או עד שמגיעים למספר המקסימלי של איטרציות. (10 כברירת מחדל) |
|
--start-avd |
יוצר באופן אוטומטי מכשיר וירטואלי של Android (AVD) ומריץ בדיקות במכשיר הווירטואלי. |
|
--acloud-create |
יוצרים מכשיר וירטואלי באמצעות הפקודה 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 FrameworksServicesTestsatest CtsVideoTestCases
מודול:Class
כדי להריץ כיתה אחת בתוך מודול, משתמשים ב-Module:Class. מודול זהה לתיאור שמופיע בשם המודול. Class הוא השם של מחלקת הבדיקה בקובץ .java, ויכול להיות השם המלא של המחלקה או השם הבסיסי.
דוגמאות:
atest CtsVideoTestCases:VideoEncoderDecoderTestatest FrameworksServicesTests:ScreenDecorWindowTestsatest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
שם הכיתה
כדי להריץ מחלקה אחת בלי לציין במפורש שם של מודול, משתמשים בשם המחלקה.
דוגמאות:
atest ScreenDecorWindowTestsatest 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
מציינים את השלבים: 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
הפונקציה Atest יכולה לגרום לבדיקה לדלג על שלב הניקוי או הפירוק. בבדיקות רבות, כמו CTS, המכשיר מנוקה אחרי הרצת הבדיקה, ולכן ניסיון להריץ מחדש את הבדיקה עם -t ייכשל בלי הפרמטר --disable-teardown. אפשר להשתמש ב--d לפני -t כדי לדלג על שלב ניקוי הבדיקה ולבצע בדיקה איטרטיבית.
atest -d test-to-runatest -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#testMultipleDecorsatest 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 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 --iterationsatest 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-valueatest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
העברת אפשרויות לסוג או לכיתה של רץ:
atest test-to-run -- --test-arg test-class:option-name:option-valueatest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
מידע נוסף על אפשרויות בדיקה בלבד זמין במאמר העברת אפשרויות למודולים.