การกำหนดค่าการทดสอบที่ซับซ้อน

โมดูลทดสอบบางโมดูลอาจต้องมีขั้นตอนการตั้งค่าและการล้างข้อมูลที่กำหนดเอง ซึ่งไม่สามารถทำได้ภายในกรอบการทดสอบเอง ตัวอย่างทั่วไป ได้แก่

  • ติดตั้ง APK อื่นๆ (นอกเหนือจาก APK สำหรับการทดสอบ)
  • พุชไฟล์บางไฟล์ไปยังอุปกรณ์
  • เรียกใช้คำสั่ง (เช่น adb shell pm ...)

ในอดีต ทีมคอมโพเนนต์มักจะเขียนการทดสอบฝั่งโฮสต์เพื่อทำงานดังกล่าว ซึ่งต้องมีความเข้าใจเกี่ยวกับ Trade Federation Harness และโดยปกติแล้วจะเพิ่มความซับซ้อนของโมดูลทดสอบ

เราได้นำแนวคิดเรื่องการกำหนดค่าโมดูลทดสอบมาใช้เพื่อรองรับงานดังกล่าว โดยอิงตาม CTS ซึ่งคุณสามารถทำงานทั่วไปที่ระบุไว้ข้างต้นได้ด้วยการกำหนดค่าเพียงไม่กี่บรรทัด นอกจากนี้ คุณยังสามารถใช้เครื่องมือเตรียมเป้าหมายของคุณเองตามที่กำหนดโดย ITargetPreparer หรือ ITargetCleaner และกำหนดค่าให้ใช้ในการกำหนดค่าโมดูลทดสอบของคุณเองได้ด้วย

การกำหนดค่าโมดูลทดสอบสำหรับโมดูลทดสอบคือไฟล์ XML ที่จำเป็นซึ่งเพิ่มลงในโฟลเดอร์แหล่งที่มาของโมดูลระดับบนสุด โดยมีชื่อว่า "AndroidTest.xml" XML จะเป็นไปตามรูปแบบของไฟล์การกำหนดค่าที่ใช้โดย Trade Federation Test Automation Harness ปัจจุบัน แท็กหลักที่จัดการผ่านการกำหนดค่าโมดูลทดสอบคือแท็ก "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>

ตัวอย่างเช่น เราสามารถเพิ่มแท็กตัวเลือกต่อไปนี้ (ที่ความคิดเห็น "insert" ด้านบน)

    <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>

ตัวเลือกจะกำหนดค่า Test Harness ให้ทำดังนี้

  1. ก่อนที่จะเรียกใช้โมดูลทดสอบ ให้เรียกใช้คำสั่ง Shell "settings put secure accessibility_enabled 1" ในอุปกรณ์
  2. หลังจากที่โมดูลทดสอบเสร็จสิ้น ให้เรียกใช้คำสั่ง Shell "settings put secure accessibility_enabled 0"

ในตัวอย่างนี้ ระบบจะเปิด/ปิดใช้การช่วยเหลือพิเศษก่อน/หลังการดำเนินการโมดูลทดสอบตามลำดับ เมื่อแสดงตัวอย่างง่ายๆ แล้ว เราจึงต้องอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้แท็ก "option" ดังที่แสดงไว้ข้างต้น แท็กจะมีแอตทริบิวต์ 2 รายการ ได้แก่ name และ value แอตทริบิวต์ name ต้องอ้างอิงตัวเลือกใดตัวเลือกหนึ่งที่เครื่องมือเตรียมเสนอ

วัตถุประสงค์ที่แท้จริงของช่อง value จะขึ้นอยู่กับวิธีที่เครื่องมือเตรียมกำหนดตัวเลือก ซึ่งอาจเป็นสตริง ตัวเลข บูลีน หรือแม้แต่เส้นทางไฟล์ ต่อไปนี้เป็นข้อมูลสรุปของเครื่องมือเตรียมเป้าหมาย 3 รายการที่ใช้กันโดยทั่วไป

  • ชื่อคลาส: PushFilePreparer

    • ชื่อย่อ: push-file
    • ฟังก์ชัน: พุชไฟล์ที่กำหนดเองภายใต้โฟลเดอร์กรอบการทดสอบไปยัง ปลายทางในอุปกรณ์
    • หมายเหตุ:
      • เครื่องมือเตรียมนี้สามารถพุชจากโฟลเดอร์ไปยังโฟลเดอร์ หรือจากไฟล์ไปยังไฟล์ได้ นั่นคือ คุณไม่สามารถพุชไฟล์ภายใต้โฟลเดอร์ในอุปกรณ์ได้ คุณต้องระบุชื่อไฟล์ปลายทางภายใต้โฟลเดอร์นั้นด้วย
    • ตัวเลือก:
      • push-file: ข้อมูลจำเพาะการพุชที่ระบุไฟล์ในเครื่องไปยังเส้นทางที่จะพุชในอุปกรณ์ สามารถทำซ้ำได้ หากกำหนดค่าให้พุชไฟล์หลายไฟล์ไปยังเส้นทางระยะไกลเดียวกัน ระบบจะพุชไฟล์ล่าสุด
      • 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
    • ฟังก์ชัน: เรียกใช้คำสั่ง Shell ที่กำหนดเองก่อนหรือหลังการดำเนินการโมดูลทดสอบ
    • ตัวเลือก:
      • run-command: คำสั่ง adb shell ที่จะเรียกใช้ สามารถทำซ้ำได้
      • teardown-command: คำสั่ง adb shell ที่จะเรียกใช้ในระยะการล้างข้อมูล สามารถทำซ้ำได้

คลาสทดสอบ

คลาสทดสอบคือคลาส 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>

คลาสทดสอบ 3 รายการที่ใช้กันโดยทั่วไปมีดังนี้

  • ชื่อคลาส: GTest

    • ชื่อย่อ: gtest
    • ฟังก์ชัน: การทดสอบที่เรียกใช้แพ็กเกจการทดสอบดั้งเดิมในอุปกรณ์ที่กำหนด
    • ตัวเลือก:
      • native-test-device-path:เส้นทางในอุปกรณ์ที่การทดสอบดั้งเดิมอยู่
  • ชื่อคลาส: InstrumentationTest

    • ชื่อย่อ: instrumentation
    • ฟังก์ชัน: การทดสอบที่เรียกใช้แพ็กเกจการทดสอบการวัดคุมในอุปกรณ์ที่กำหนด
    • ตัวเลือก:
      • package: ชื่อแพ็กเกจ Manifest ของแอปพลิเคชันทดสอบ Android ที่จะเรียกใช้
      • class:ชื่อคลาสทดสอบที่จะเรียกใช้
      • method: ชื่อเมธอดทดสอบที่จะเรียกใช้
  • ชื่อคลาส: AndroidJUnitTest

    • ฟังก์ชัน: การทดสอบที่เรียกใช้แพ็กเกจการทดสอบการวัดคุมในอุปกรณ์ที่กำหนดโดยใช้ android.support.test.runner.AndroidJUnitRunner ซึ่งเป็นวิธีหลักในการดำเนินการทดสอบการวัดคุม