โมดูลทดสอบบางโมดูลอาจต้องมีขั้นตอนการตั้งค่าและการล้างข้อมูลที่กำหนดเอง ซึ่งไม่สามารถทำได้ภายในกรอบการทดสอบเอง ตัวอย่างทั่วไป ได้แก่
- ติดตั้ง 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 ให้ทำดังนี้
- ก่อนที่จะเรียกใช้โมดูลทดสอบ ให้เรียกใช้คำสั่ง Shell "settings put secure accessibility_enabled 1" ในอุปกรณ์
- หลังจากที่โมดูลทดสอบเสร็จสิ้น ให้เรียกใช้คำสั่ง 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 ซึ่งเป็นวิธีหลักในการดำเนินการทดสอบการวัดคุม