בחלק מהמודולים לבדיקה, ייתכן שיהיה צורך בהגדרה מותאמת אישית ובשלבים שלא יכולים לבצע בתוך מקרה הבדיקה עצמו. דוגמאות אופייניות:
- התקנה של חבילות APK אחרות (בנוסף לחבילת ה-APK לבדיקה)
- לדחוף קבצים מסוימים למכשיר
- להריץ פקודות (למשל adb shell pm ...)
בעבר, צוותי הרכיבים נאלצו בדרך כלל לכתוב בדיקה בצד המארח כדי לבצע משימות כאלה. לשם כך, הם נדרשו להבין את רתמת Trade Federation, והבדיקה הזו בדרך כלל הגדילה את המורכבות של מודול הבדיקה.
בהשראת CTS, הוספנו את המושג 'הגדרת מודול בדיקה' כדי לתמוך במשימות כאלה. אפשר לבצע את רשימת המשימות הנפוצות שלמעלה באמצעות כמה שורות הגדרה בלבד. כדי ליהנות מגמישות מקסימלית, אפשר אפילו להטמיע כלי משלכם להכנת יעד, כפי שמוגדר על ידי ITargetPreparer או ITargetCleaner, ולהגדיר אותו לשימוש בהגדרות של מודול הבדיקה שלכם.
קובץ תצורה של מודול בדיקה הוא קובץ XML נדרש שמתווסף לתיקיית המקור של המודול ברמה העליונה, בשם AndroidTest.xml. קובץ ה-XML עומד בפורמט של קובץ תצורה שמשמש את ערכת האוטומציה של בדיקות Trade Federation. נכון לעכשיו, התגים הראשיים שמטופלים דרך הגדרות מודול הבדיקה הם התגים target_preparer ו-test.
מתכוננים ליעד
תג target_preparer, כפי ששמו מרמז, מגדיר כלי להכנת יעד (target preparer, ראו ITargetPreparer) שמציע שיטת הגדרה (setup method) שנקראת לפני שמריצים את מודול הבדיקה לצורך בדיקה. אם המחלקה שמצוינת בתג target_preparer מטמיעה גם את ITargetCleaner, שיטת ה-teardown שלה תופעל אחרי שמודול הבדיקה יסתיים.
כדי להשתמש בתצורה המשותפת המובנית של המודול, מוסיפים קובץ חדש בשם AndroidTest.xml בתיקייה ברמה העליונה של מודול הבדיקה, וממלאים אותו בתוכן הבא:
<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>
לדוגמה, אפשר להוסיף את תגי האפשרויות הבאים (בתגובה 'הוספה' שלמעלה):
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="settings put secure accessibility_enabled 1" />
<option name="teardown-command" value="settings put secure accessibility_enabled 0" />
</target_preparer>
האפשרויות יגדירו את מסגרת הבדיקה כך:
- לפני שמודול הבדיקה מופעל, מריצים את פקודת המעטפת "הגדרות מאובטחות Accessibility_enabled 1 אינץ' במכשיר
- לאחר שמודול הבדיקה מסתיים, הפעילו את פקודת המעטפת "הגדרות מאובטחות Accessibility_enabled 0"
בדוגמה הספציפית הזו, הנגישות מופעלת/מושבתת לפני/אחרי לביצוע מודול הבדיקה, בהתאמה. בעזרת הדגמה פשוטה, שנדרש כדי לכלול פרטים נוספים על אופן השימוש בתג option. כפי שמוצג למעלה, לתג יכולים להיות שני מאפיינים: name ו-value. מאפיין השם חייב להפנות לאחת מהאפשרויות שהמתכנן מציע.
המטרה המדויקת של שדה הערך תלויה באופן שבו הגורם שהוכן את ה-template הגדיר את האפשרות: הוא יכול להיות מחרוזת, מספר, ערך בוליאני או אפילו נתיב של קובץ. לפניכם סיכום של שלושת הגורמים הנפוצים למכינים את היעדים:
שם הכיתה: PushFilePreparer
- short name: Push-file
- function: דחיפה של קבצים שרירותיים מתיקיית מקרה הבדיקה ליעד במכשיר
- notes (הערות):
- הכלי הזה יכול לדחוף מתיקייה לתיקייה או מקובץ לקובץ. כלומר, אי אפשר לדחוף קובץ מתיקייה במכשיר: צריך לציין גם את שם הקובץ של היעד בתיקייה הזו.
- options:
- push-file: מפרט push שמציין את הקובץ המקומי לנתיב שבו צריך לדחוף אותו במכשיר. אפשר לחזור על הפעולה. אם מספר הקבצים מוגדרים לדחיפה לאותו נתיב מרוחק, ההודעה האחרונה תידחה.
- push: (לא מומלץ) מפרט push בפורמט
/path/to/srcfile.txt->/path/to/destfile.txt
או/path/to/srcfile.txt->/path/to/destdir/
. אפשר לחזור עליו. הנתיב הזה יכול להיות יחסי לספריית מודול הבדיקה או לספריית out עצמה. - post-push: פקודה להרצה במכשיר (עם
adb shell <your command>
) אחרי שכל הניסיונות להעברה (push) בוצעו. תרחיש לדוגמה: שימוש ב-chmod להרשאות
שם מחלקה: InstallApkSetup
- short name:install-APK
- function: דחיפה של קובצי APK שרירותיים ליעד במכשיר
- options:
- test-file-name: השם של קובץ ה-APK שרוצים להתקין במכשיר.
- install-arg: ארגומנטים נוספים שיועברו להתקנה של pm כולל מקף בהתחלה, למשל ' -d'. יכול להיות שחוזר על עצמו
שם המחלקה: RunCommandTargetPreparer
- short name: run-command
- function: הפעלת פקודות מעטפת שרירותיות לפני או אחרי ביצוע מודול הבדיקה
- אפשרויות:
- run-command:פקודת shell של adb להרצה. יכול להיות שיתבצעו חזרות
- teardown-command: פקודה של מעטפת adb שצריך להריץ במהלך שלב הפירוק. יכול להיות שחוזר על עצמו
שיעור בדיקה
כיתה לבדיקה היא הכיתה של Trade Federation שבה משתמשים כדי להריץ את הבדיקה.
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
<option name="package" value="android.test.example.helloworld"/>
<option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>
הנה שלושה סוגים נפוצים של בדיקות:
שם מחלקה: GTest
- short name: gtest
- function: בדיקה שמריצה חבילת בדיקה מקורית במכשיר נתון.
- options:
- native-test-device-path: הנתיב במכשיר שבו ממוקמות הבדיקות המקוריות.
שם הכיתה: InstrumentationTest
- שם מקוצר: instrumentation
- function: בדיקה שמריצה חבילה לבדיקת אינסטרומנטציה במכשיר נתון
- options:
- package: שם חבילת המניפסט של אפליקציית הבדיקה של Android להרצה.
- class: שם כיתת הבדיקה שצריך להריץ.
- method: שם שיטת הבדיקה שרוצים להריץ.
שם הכיתה: AndroidJUnitTest
- function: בדיקה שמריצה חבילה של בדיקת אינסטרומנטציה על במכשיר באמצעות android.support.test.runner.AndroidJUnitRunner זו הדרך העיקרית לבצע בדיקת אינסטרומנטציה.