ابتدا بخش «برنامه خود را در developer.android.com آزمایش کنید» را بخوانید. توجه داشته باشید که تفاوتهایی در نحوه استفاده از تستهای ابزار دقیق در تست پلتفرم وجود دارد.
به طور خلاصه، یک تست Instrumentation یک محیط اجرای تست ویژه را فراهم میکند که از طریق دستور am instrument راهاندازی میشود، که در آن فرآیند برنامه مورد نظر مجدداً راهاندازی و با زمینه برنامه اولیه مقداردهی اولیه میشود و یک thread instrumentation در داخل ماشین مجازی فرآیند برنامه آغاز میشود. کد تست شما اجرا را روی این thread instrumentation آغاز میکند و یک نمونه Instrumentation در اختیار شما قرار میگیرد که دسترسی به زمینه برنامه و APIها را برای دستکاری فرآیند برنامه تحت آزمایش فراهم میکند.
مفاهیم کلیدی
- یک ابزار دقیق باید در یک بسته برنامه، با یک برچسب
<instrumentation>که زیر برچسب<manifest>مانیفست بسته برنامه قرار دارد، اعلان شود. - یک مانیفست بسته برنامه از نظر فنی ممکن است شامل چندین تگ
<instrumentation>باشد، اگرچه معمولاً به این شکل استفاده نمیشود. - هر
<instrumentation>باید شامل موارد زیر باشد:- یک ویژگی
android:name: باید نام یک زیرکلاس ازInstrumentationباشد که در برنامه آزمایشی گنجانده شده است، که معمولاً اجراکننده آزمایشی است که استفاده میشود، مثلاً:android.support.test.runner.AndroidJUnitRunner - یک ویژگی
android:targetPackageباید تعریف شود. مقدار آن باید برابر با بسته برنامه تحت آزمایش باشد.
- یک ویژگی
خلاصه مراحل
در زیر مقاصد رایج برای آزمایشهای هرمتیک در برابر سرویسهای چارچوب آمده است:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsاگر در حال اضافه کردن یک ماژول ابزار دقیق کاملاً جدید برای قطعه خود هستید، به [مطالب] مراجعه کنید.
اگر میخواهید تستها را در یکی از مکانهای بالا اضافه کنید، از قرارداد موجود پیروی کنید. اگر میخواهید یک ماژول تست جدید راهاندازی کنید، لطفاً تنظیمات
AndroidManifest.xmlوAndroid.mkرا در یکی از مکانهای بالا دنبال کنید.برای مثال به frameworks/base/core/tests/coretests/ مراجعه کنید. به این خطوط که برنامههای اضافی را نصب میکنند توجه کنید:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />فراموش نکنید که تست خود را به صورت
@SmallTest،@MediumTestیا@LargeTestعلامتگذاری کنید.ماژول تست را با m بسازید، مثلاً:
m FrameworksCoreTestsتستها را اجرا کنید:
سادهترین راه حل استفاده از Atest به صورت زیر است:
atest FrameworksCoreTestsیا برای آزمایشهای پیچیدهتر، از مهار تست فدراسیون تجارت استفاده کنید:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsاگر از Tradefed استفاده نمیکنید، تستها را به صورت دستی نصب و اجرا کنید:
- apk تولید شده را نصب کنید:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apkتستها را با گزینههای مختلف اجرا کنید:
تمام تستهای موجود در apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerهمه تستها تحت یک بسته جاوای خاص
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerتمام تستهای مربوط به یک کلاس خاص
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerیک روش آزمایش خاص
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
تست شما میتواند با استفاده از JUnit APIs، در صورت قبول یا رد شدن، به طور صریح اعلام کند؛ علاوه بر این، هرگونه استثنای ثبت نشده نیز باعث خرابی عملکردی خواهد شد.
برای انتشار معیارهای عملکرد، کد آزمایشی شما میتواند Instrumentation#sendStatus فراخوانی کند تا لیستی از جفتهای کلید-مقدار را ارسال کند. توجه به این نکته مهم است که:
- معیارها میتوانند عدد صحیح یا ممیز شناور باشند
- هر مقدار غیر عددی حذف خواهد شد
- تست apk شما میتواند یا تستهای عملکردی یا تستهای معیار باشد، با این حال، ترکیب هر دو در حال حاضر پشتیبانی نمیشود