پیکربندی آزمایش پیچیده

برخی‌از واحدهای آزمایشی ممکن است به مراحل راه‌اندازی و برچیدن سفارشی نیاز داشته باشند که نمی‌توانند در خود مورد آزمایشی انجام شوند. نمونه‌های معمول ممکن است شامل موارد زیر باشد:

  • نصب فایل‌های APK دیگر (علاوه‌بر فایل APK آزمایشی)
  • ارسال چند فایل به دستگاه
  • اجرای فرمان‌ها (برای نمونه adb shell pm …)

در گذشته، تیم‌های مؤلفه معمولاً برای انجام چنین کارهایی به نوشتن آزمایش سمت میزبان متوسل می‌شدند که این کار مستلزم درک مهار Trade Federation است و معمولاً پیچیدگی ماژول آزمایش را افزایش می‌دهد .

با الهام از CTS، مفهوم پیکربندی واحد آزمایش را برای پشتیبانی از چنین وظایفی معرفی کردیم، فهرست وظایف مشترک در بالا را می‌توان تنها با چند خط پیکربندی انجام داد. برای حداکثر انعطاف‌پذیری، حتی می‌توانید آماده‌ساز هدف خودتان را، همان‌طور که توسط ITargetPreparer یا ITargetCleaner تعریف شده است، پیاده‌سازی کنید و آن‌ها را برای استفاده در پیکربندی واحد آزمایش خودتان پیکربندی کنید.

پیکربندی واحد آزمایشی برای واحد آزمایشی یک فایل XML الزامی است که به پوشه منبع واحد سطح بالا اضافه می‌شود و «AndroidTest.xml» نام دارد. این XML از قالب فایل پیکربندی استفاده‌شده توسط مهار خودکارسازی آزمایشی Trade Federation پیروی می‌کند. درحال‌حاضر برچسب‌های اصلی که ازطریق پیکربندی‌های ماژول آزمایشی مدیریت می‌شوند، برچسب‌های «target_preparer» و «test» هستند.

آماده‌کنندگان هدف

برچسب «target_preparer»، همان‌طور که از نامش پیداست، آماده‌کننده هدف را تعریف می‌کند (به ITargetPreparer مراجعه کنید) که روش راه‌اندازی ارائه می‌دهد و قبل‌از اجرای واحد آزمایش برای آزمایش فراخوانی می‌شود؛ و اگر کلاس ارجاع‌شده در برچسب «target_preparer» نیز ITargetCleaner را پیاده‌سازی کند، روش برچیدن آن پس‌از اتمام واحد آزمایش فراخوانی خواهد شد.

برای استفاده از پیکربندی واحد مشترک داخلی، فایل جدیدی به‌نام «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>

گزینه‌ها ابزار آزمون را برای موارد زیر پیکربندی می‌کنند:

  1. قبل‌از فراخوانی واحد آزمایش، فرمان پوسته «settings put secure accessibility_enabled 1» را در دستگاه اجرا کنید
  2. پس‌از اتمام واحد آزمایشی، فرمان پوسته «settings put secure accessibility_enabled 0» را اجرا کنید

در این مثال خاص، دسترس‌پذیری به‌ترتیب قبل/بعداز اجرای واحد آزمایشی فعال/غیرفعال می‌شود. با نشان دادن یک مثال ساده، لازم است جزئیات بیشتری درباره نحوه استفاده از برچسب «گزینه» ارائه شود. همان‌طور که در بالا نشان داده شده است، برچسب می‌تواند دو مشخصه داشته باشد: نام، مقدار. مشخصه نام باید به یکی از گزینه‌های ارائه‌شده توسط آماده‌کننده اشاره کند.

هدف دقیق فیلد مقدار به نحوه تعریف گزینه توسط آماده‌کننده بستگی دارد: می‌تواند یک رشته، یک عدد، یک مقدار بولی، یا حتی یک مسیر فایل باشد. در اینجا خلاصه‌ای از سه آماده‌کننده هدف رایج آورده شده است:

  • نام کلاس: PushFilePreparer

    • نام کوتاه: push-file
    • عملکرد: فایل‌های دلخواه را در پوشه مورد آزمون به مقصد در دستگاه انتقال می‌دهد
    • نکته‌ها:
      • این آماده‌کننده می‌تواند از پوشه‌ای به پوشه دیگر یا از فایلی به فایل دیگر انتقال دهد؛ یعنی نمی‌توانید فایلی را در پوشه‌ای در دستگاه انتقال دهید: باید نام فایل مقصد را نیز در آن پوشه مشخص کنید
    • گزینه‌ها:
      • push-file: مشخصه فشاری که فایل محلی را به مسیر موردنظر برای فشار دادن در دستگاه مشخص می‌کند. ممکن است تکرار شود. اگر چندین فایل پیکربندی شده باشند که به مسیر راه‌دور یکسانی ارسال شوند، جدیدترین فایل ارسال خواهد شد.
      • push: (منسوخ‌شده) مشخصات push، قالب‌بندی‌شده به‌صورت «/path/to/srcfile.txt->/path/to/destfile.txt» یا «/path/to/srcfile.txt->/path/to/destdir/». ممکن است تکرار شود. این مسیر ممکن است مربوط به دایرکتوری ماژول آزمایش یا خود دایرکتوری خروجی باشد.
      • post-push: فرمانی برای اجرا در دستگاه (با `adb shell <your command>`) پس‌از تلاش برای همه ارسال‌ها. مورد استفاده معمول استفاده از chmod برای اجازه‌ها است
  • نام کلاس: InstallApkSetup

    • نام کوتاه:install-apk
    • عملکرد: فایل‌های apk دلخواه را به مقصد در دستگاه انتقال می‌دهد
    • گزینه‌ها:
      • test-file-name: نام apk که باید روی دستگاه نصب شود.
      • install-arg: آرگومان‌های اضافی که باید به pm install منتقل شوند فرمان، ازجمله خط تیره ابتدایی، مثلاً «-d». ممکن است تکرار شود
  • نام کلاس: RunCommandTargetPreparer

    • نام کوتاه: run-command
    • عملکرد: دستورات پوسته اختیاری را قبل یا بعداز اجرای واحد آزمایشی اجرا می‌کند
    • گزینه‌ها:
      • run-command:فرمان پوسته adb برای اجرا. ممکن است تکرار شود
      • teardown-command:فرمان پوسته adb برای اجرا درطول مرحله جداسازی. ممکن است تکرار شود

کلاس آزمایشی

کلاس آزمایشی کلاس «فدراسیون تجارت» است که برای اجرای آزمون استفاده می‌شود.

<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

    • نام کوتاه: gtest
    • عملکرد: «آزمایشی» که بسته آزمایشی بومی را در دستگاه داده‌شده اجرا می‌کند.
    • گزینه‌ها:
      • native-test-device-path:مسیر دستگاهی که در آن آزمایش‌های بومی قرار دارند.
  • نام کلاس: InstrumentationTest

    • نام کوتاه: سازبندی
    • عملکرد: «آزمایشی» که بسته آزمایشی ابزار دقیق را در دستگاه داده‌شده اجرا می‌کند
    • گزینه‌ها:
      • package:نام بسته مانیفست برنامه آزمایشی Android برای اجرا.
      • class:نام کلاس آزمایشی برای اجرا.
      • روش:نام روش آزمایشی برای اجرا.
  • نام کلاس: AndroidJUnitTest

    • عملکرد: «آزمایشی» که بسته آزمایش ابزار دقیق را در دستگاه داده‌شده بااستفاده از android.support.test.runner.AndroidJUnitRunner اجرا می‌کند این روش اصلی اجرای آزمایش ابزار دقیق است.