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

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

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

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

เราได้นำแนวคิดการกำหนดค่าโมดูลทดสอบมาใช้เพื่อรองรับงานดังกล่าว โดยรายการงานทั่วไปข้างต้นสามารถทำได้โดยใช้การกำหนดค่าเพียงไม่กี่บรรทัด คุณยังสามารถใช้ TargetPreparer ของคุณเองได้เพื่อความยืดหยุ่นสูงสุดตามที่กำหนดโดย 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>

ตัวเลือกจะกำหนดค่าชุดทดสอบให้ทำสิ่งต่อไปนี้

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

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

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

  • ชื่อคลาส: PushFilePreparer

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

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

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