เอกสารนี้อธิบายวิธีเรียกใช้การทดสอบจากบรรทัดคำสั่งโดยตรง เอกสารนี้ถือว่าคุณทราบวิธีสร้างแอป Android และเขียนการทดสอบสำหรับแอปแล้ว หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างการทดสอบสำหรับแอป โปรดดูทดสอบแอปใน Android
เมื่อสร้างแอปโดยใช้ระบบบิลด์ Gradle ปลั๊กอิน Android Gradle จะช่วยให้คุณเรียกใช้การทดสอบจากโปรเจ็กต์ Gradle โดยใช้บรรทัดคำสั่งได้ หากต้องการควบคุมอย่างละเอียดมากขึ้น คุณสามารถเลือกที่จะเรียกใช้การทดสอบผ่านเชลล์ Android Debug Bridge (adb) ซึ่งอาจเป็นประโยชน์เมื่อทำการทดสอบในสภาพแวดล้อมการรวมอย่างต่อเนื่อง
ดูวิธีเรียกใช้การทดสอบที่มีการตรวจสอบอัตโนมัติจากบรรทัดคำสั่งโดยใช้อุปกรณ์เสมือนที่ Gradle จัดการให้คุณได้ที่ขยายขนาดการทดสอบด้วยอุปกรณ์ที่มีการจัดการจาก Gradle
เรียกใช้การทดสอบด้วย Gradle
ปลั๊กอิน Android Gradle ช่วยให้คุณเรียกใช้การทดสอบจากโปรเจ็กต์ Gradle ได้โดยใช้ บรรทัดคำสั่ง
ตารางด้านล่างสรุปวิธีเรียกใช้การทดสอบด้วย Gradle
ตารางที่ 1 วิธีต่างๆ ในการเรียกใช้การทดสอบด้วย Gradle
| ประเภทการทดสอบหน่วย | คำสั่งที่จะเรียกใช้ | ตำแหน่งผลการทดสอบ |
|---|---|---|
| การทดสอบ 1 หน่วยในเครื่อง |
เรียกใช้งาน test ดังนี้
|
ไฟล์ผลการทดสอบ HTML:path_to_your_project/module_name/build/reports/tests/
ไดเรกทอรี
ไฟล์ผลการทดสอบ XML: |
| การทดสอบ 1 หน่วยแบบมีเครื่องควบคุม |
เรียกใช้งาน connectedAndroidTest ดังนี้
|
ไฟล์ผลการทดสอบ HTML:path_to_your_project/module_name/build/reports/androidTests/connected/
ไดเรกทอรี
ไฟล์ผลการทดสอบ XML: |
Gradle รองรับตัวย่อชื่อทาสก์
ตัวอย่างเช่น คุณสามารถเริ่มงาน connectedAndroidTest ได้โดย
ป้อนคำสั่งต่อไปนี้
./gradlew cATนอกจากนี้ คุณยังเลือกที่จะเรียกใช้ Gradle Task check และ connectedCheck ได้ด้วย งานเหล่านี้จะเรียกใช้การทดสอบในเครื่องหรือการทดสอบที่วัดประสิทธิภาพตามลำดับ แต่
รวมถึงการตรวจสอบอื่นๆ ที่เพิ่มโดยปลั๊กอิน Gradle อื่นๆ
เรียกใช้การทดสอบในโมดูล
งาน test และ connectedAndroidTest จะเรียกใช้การทดสอบในแต่ละโมดูลในโปรเจ็กต์
คุณสามารถเรียกใช้การทดสอบในโมดูลที่เฉพาะเจาะจงได้โดย
นำหน้างาน test หรือ connectedAndroidTest ด้วยชื่อโมดูลและ
เครื่องหมายโคลอน (:) เช่น คำสั่งต่อไปนี้จะเรียกใช้การทดสอบที่มีการตรวจสอบสำหรับโมดูล mylibrary เท่านั้น
./gradlew mylibrary:connectedAndroidTestเรียกใช้การทดสอบในตัวแปรบิลด์
งาน test และ connectedAndroidTest จะเรียกใช้การทดสอบในตัวแปรบิลด์แต่ละรายการในโปรเจ็กต์ คุณกำหนดเป้าหมาย
ตัวแปรบิลด์ที่เฉพาะเจาะจงได้โดยใช้ไวยากรณ์ต่อไปนี้
- สำหรับการทดสอบ 1 หน่วยในเครื่อง
./gradlew testVariantNameUnitTest - สำหรับการทดสอบแบบมีเครื่องควบคุม
./gradlew connectedVariantNameAndroidTest
เรียกใช้เมธอดหรือคลาสการทดสอบที่เฉพาะเจาะจง
เมื่อเรียกใช้ Unit Test ในเครื่อง Gradle จะช่วยให้คุณกำหนดเป้าหมายการทดสอบที่เฉพาะเจาะจงได้โดยใช้แฟล็ก --tests เช่น คำสั่งต่อไปนี้จะเรียกใช้เฉพาะการทดสอบ sampleTestMethod
สำหรับตัวแปรบิลด์ที่ระบุ ดูข้อมูลเพิ่มเติมเกี่ยวกับ
การใช้แฟล็ก --tests ได้ในเอกสารประกอบของ Gradle เกี่ยวกับ
การกรองการทดสอบ
./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'
เรียกใช้การทดสอบด้วย adb
เมื่อเรียกใช้การทดสอบจากบรรทัดคำสั่งด้วย Android Debug Bridge (adb) คุณจะมีตัวเลือกเพิ่มเติมในการ เลือกการทดสอบที่จะเรียกใช้มากกว่าวิธีอื่นๆ คุณสามารถเลือกวิธีการทดสอบแต่ละรายการ กรองการทดสอบตามคำอธิบายประกอบที่กำหนดเอง หรือระบุตัวเลือกการทดสอบได้ เนื่องจากการทดสอบรันได้รับการควบคุมจากบรรทัดคำสั่งทั้งหมด คุณจึงปรับแต่งการทดสอบด้วยสคริปต์เชลล์ได้หลายวิธี
หากต้องการเรียกใช้การทดสอบจากบรรทัดคำสั่ง ให้เรียกใช้ adb shell เพื่อเริ่มเชลล์บรรทัดคำสั่ง ในอุปกรณ์หรือโปรแกรมจำลอง ภายในเชลล์นั้น คุณสามารถโต้ตอบกับ
Activity Manager
ได้โดยใช้คำสั่ง am และใช้คำสั่งย่อย instrument เพื่อเรียกใช้การทดสอบ
คุณสามารถเริ่มเชลล์ adb, เรียกใช้ am instrument และระบุแฟล็กบรรทัดคำสั่งทั้งหมดในบรรทัดอินพุตเดียวได้ เชลล์จะเปิดขึ้นในอุปกรณ์หรือ
โปรแกรมจำลอง เรียกใช้การทดสอบ สร้างเอาต์พุต แล้วกลับไปที่บรรทัดคำสั่ง
ในคอมพิวเตอร์
วิธีทำการทดสอบด้วย am instrument
- สร้างหรือสร้างแอปพลิเคชันหลักและแพ็กเกจทดสอบอีกครั้ง
- ติดตั้งแพ็กเกจทดสอบและไฟล์แพ็กเกจ Android ของแอปพลิเคชันหลัก (ไฟล์ APK) ในอุปกรณ์ Android หรือโปรแกรมจำลองปัจจุบัน
ป้อนข้อมูลต่อไปนี้ในบรรทัดคำสั่ง
adb shell am instrument -w <test_package_name>/<runner_class>โดย
<test_package_name>คือชื่อแพ็กเกจ Android ของแอปพลิเคชันทดสอบ และ<runner_class>คือชื่อของคลาส Android Test Runner ที่คุณใช้ ชื่อแพ็กเกจ Android คือค่าของแอตทริบิวต์แพ็กเกจขององค์ประกอบ Manifest ในไฟล์ Manifest ของแพ็กเกจทดสอบ (AndroidManifest.xml)โดยปกติแล้ว คลาสโปรแกรมเรียกใช้การทดสอบ Android จะเป็น
AndroidJUnitRunneradb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
ผลการทดสอบจะปรากฏใน STDOUT
am instrument flags
หากต้องการดูรายการ Flag ทั้งหมดที่จะใช้กับคำสั่ง am instrument ให้
เรียกใช้ adb shell am help แฟล็กสำคัญบางรายการมีคำอธิบายในตารางต่อไปนี้
ตารางที่ 2 am instrumentที่สำคัญ
| ตั้งค่าสถานะ | ค่านิยม | คำอธิบาย |
|---|---|---|
-w
|
(ไม่มี) |
บังคับให้ am instrument รอจนกว่าการวัดคุม
จะสิ้นสุดก่อนที่จะสิ้นสุดเอง ซึ่งจะทำให้
เชลล์เปิดอยู่จนกว่าการทดสอบจะเสร็จสิ้น คุณต้องใช้ Flag นี้เพื่อ
ดูผลการทดสอบ
|
-r
|
(ไม่มี) |
แสดงผลลัพธ์ในรูปแบบดิบ ใช้แฟล็กนี้เมื่อต้องการ
รวบรวมการวัดประสิทธิภาพเพื่อไม่ให้มีการจัดรูปแบบเป็น
ผลการทดสอบ แฟล็กนี้ออกแบบมาเพื่อใช้กับแฟล็ก
-e perf true (ระบุไว้ในส่วน
ตัวเลือกเครื่องมือ AM)
|
-e
|
<test_options>
|
ระบุตัวเลือกการทดสอบเป็นคู่คีย์-ค่า เครื่องมือ
am instrument จะส่งข้อมูลเหล่านี้ไปยังคลาสการวัดคุมที่ระบุโดยใช้เมธอด
onCreate()
ของคลาส คุณระบุ -e <test_options> ได้หลายครั้ง คีย์และค่าจะอธิบายไว้ในส่วนตัวเลือกเครื่องดนตรี คุณใช้คู่คีย์-ค่าเหล่านี้ได้กับ
AndroidJUnitRunner
หรือ InstrumentationTestRunner
และคลาสย่อยของคลาสนี้เท่านั้น การใช้รหัสเหล่านี้กับชั้นเรียนอื่นๆ จะไม่มีผล
|
--no-hidden-api-checks
|
(ไม่มี) | ปิดใช้ข้อจำกัดในการใช้ API ที่ซ่อนอยู่ ดูข้อมูลเพิ่มเติมเกี่ยวกับ API ที่ซ่อนอยู่และวิธีที่ API นี้อาจส่งผลต่อแอปของคุณได้ที่ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK |
ตัวเลือกเครื่องมือ
am instrument เครื่องมือจะส่งตัวเลือกการทดสอบไปยัง
AndroidJUnitRunner หรือ InstrumentationTestRunner
ในรูปแบบคู่คีย์-ค่า โดยใช้แฟล็ก -e ที่มีไวยากรณ์ดังนี้
-e <key> <value>
คีย์บางรายการยอมรับค่าได้หลายค่า คุณระบุค่าหลายค่าในรายการที่คั่นด้วยคอมมา เช่น การเรียกใช้
AndroidJUnitRunner นี้จะระบุค่าหลายค่าสำหรับคีย์ package
adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunnerตารางต่อไปนี้แสดงคู่คีย์-ค่าที่คุณใช้กับโปรแกรมเรียกใช้การทดสอบได้
ตารางที่ 3 -e ติดตั้งคู่คีย์-ค่าเพื่อใช้กับ โปรแกรมเรียกใช้การทดสอบ
| คีย์ | ค่านิยม | คำอธิบาย |
|---|---|---|
package
|
<Java_package_name>
|
ชื่อแพ็กเกจ Java ที่สมบูรณ์ในตัวเองสำหรับแพ็กเกจใดแพ็กเกจหนึ่งในแอปพลิเคชันทดสอบ ระบบจะเรียกใช้คลาสกรณีทดสอบที่ใช้ชื่อแพ็กเกจนี้ โปรดทราบว่านี่ไม่ใช่ชื่อแพ็กเกจ Android แพ็กเกจทดสอบมีชื่อแพ็กเกจ Android เดียว แต่มีแพ็กเกจ Java หลายแพ็กเกจอยู่ภายใน |
class |
<class_name> |
ชื่อคลาส Java ที่สมบูรณ์ในตัวเองสำหรับคลาสกรณีทดสอบ คลาสใดคลาสหนึ่ง ระบบจะเรียกใช้เฉพาะคลาสของกรอบการทดสอบนี้ |
<class_name>#method name |
ชื่อคลาสของกรณีทดสอบที่สมบูรณ์ในตัวเองและเมธอดอย่างใดอย่างหนึ่งของคลาส ระบบจะเรียกใช้เฉพาะ เมธอดนี้ โปรดสังเกตเครื่องหมายแฮช (#) ระหว่างชื่อคลาส กับชื่อเมธอด | |
func |
true |
เรียกใช้คลาสการทดสอบทั้งหมดที่ขยาย
InstrumentationTestCase
|
unit |
true |
เรียกใช้คลาสการทดสอบทั้งหมดที่ไม่ได้ขยาย
InstrumentationTestCase หรือ
PerformanceTestCase
|
size |
[small | medium | large]
|
เรียกใช้เมธอดการทดสอบที่อธิบายประกอบด้วยขนาด คำอธิบายประกอบคือ
@SmallTest, @MediumTest และ
@LargeTest
|
perf |
true |
เรียกใช้คลาสการทดสอบทั้งหมดที่ใช้
PerformanceTestCase
เมื่อใช้ตัวเลือกนี้ ให้ระบุแฟล็ก -r สำหรับ
am instrument เพื่อให้เอาต์พุตอยู่ในรูปแบบดิบ
และไม่จัดรูปแบบใหม่เป็นผลการทดสอบ
|
debug |
true |
เรียกใช้การทดสอบในโหมดแก้ไขข้อบกพร่อง |
log |
true |
โหลดและบันทึกการทดสอบที่ระบุทั้งหมด แต่ไม่เรียกใช้ ข้อมูลการทดสอบ
จะปรากฏใน STDOUT ใช้เพื่อยืนยัน
ชุดค่าผสมของตัวกรองอื่นๆ และข้อกำหนดการทดสอบ
|
emma |
true |
เรียกใช้การวิเคราะห์ความครอบคลุมของโค้ด EMMA และเขียนเอาต์พุตไปยัง
/data/<app_package>/coverage.ec ในอุปกรณ์ หากต้องการ
ลบล้างตำแหน่งไฟล์ ให้ใช้คีย์ coverageFile
ที่อธิบายไว้ในรายการต่อไปนี้
หมายเหตุ: ตัวเลือกนี้ต้องใช้บิลด์ของแอปพลิเคชันทดสอบที่ใช้ EMMA
ซึ่งคุณสร้างได้ด้วยเป้าหมาย |
coverageFile |
<filename> |
ลบล้างตำแหน่งเริ่มต้นของไฟล์ความครอบคลุมของ EMMA ใน
อุปกรณ์ ระบุค่านี้เป็นเส้นทางและชื่อไฟล์ในรูปแบบ UNIX
ชื่อไฟล์เริ่มต้นอธิบายไว้ในรายการสำหรับคีย์
emma
|
เมื่อใช้-e โปรดคำนึงถึงสิ่งต่อไปนี้
am instrumentเรียกใช้onCreate(Bundle)ด้วยBundleที่มีคู่คีย์-ค่า- คีย์
packageจะมีความสำคัญเหนือกว่าคีย์classหากคุณระบุแพ็กเกจและระบุคลาสภายในแพ็กเกจนั้นแยกกัน Android จะเรียกใช้การทดสอบทั้งหมดในแพ็กเกจและไม่สนใจคีย์คลาส - คีย์
funcและคีย์unitจะเป็นข้อมูลแยกกัน
ตัวอย่างการใช้
ส่วนต่อไปนี้เป็นตัวอย่างการใช้ am instrument เพื่อเรียกใช้การทดสอบ
โดยมีโครงสร้างดังนี้
- แพ็กเกจทดสอบมีชื่อแพ็กเกจ Android
com.android.demo.app.tests - คลาสการทดสอบที่มีเครื่องมือควบคุม 2 คลาส
TestClass1ซึ่งมีวิธีการทดสอบtestMethod1TestClass2ซึ่งมีวิธีการทดสอบtestMethod2และtestMethod3
- โปรแกรมเรียกใช้การทดสอบคือ
AndroidJUnitRunner
เรียกใช้แพ็กเกจการทดสอบทั้งหมด
หากต้องการเรียกใช้คลาสการทดสอบทั้งหมดในแพ็กเกจการทดสอบ ให้ป้อนคำสั่งต่อไปนี้
adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerเรียกใช้การทดสอบทั้งหมดในคลาสกรณีทดสอบ
หากต้องการเรียกใช้การทดสอบทั้งหมดในชั้นเรียน TestClass1 ให้ป้อนข้อมูลต่อไปนี้
adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerเลือกชุดย่อยของการทดสอบ
หากต้องการเรียกใช้การทดสอบทั้งหมดในคลาส TestClass1 และเมธอด testMethod3 ใน TestClass2 ให้ป้อนคำสั่งต่อไปนี้
adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerดู Use Case เพิ่มเติมได้ใน
AndroidJUnitRunner
เอกสารอ้างอิง API
ดูรายงานการทดสอบแบบรวม
ปลั๊กอิน Android Gradle มีงานรายงานการทดสอบแบบรวม ซึ่งจะสร้างแดชบอร์ด HTML ที่ผสานผลลัพธ์จากการทดสอบหน่วยและการทดสอบแบบมีเครื่องมือ
สิ่งที่ต้องมีก่อน
- ปลั๊กอิน Android Gradle 9.2.0-alpha07 ขึ้นไป
หากต้องการสร้างรายงานการทดสอบแบบรวม ให้เรียกใช้หนึ่งในงานต่อไปนี้
| ขอบเขตของรายงาน | คำสั่ง | คำอธิบาย | รายงานตำแหน่ง |
|---|---|---|---|
| โมดูลปัจจุบัน | ./gradlew :module_name:createTestReport |
สร้างรายงานการทดสอบแบบรวมสำหรับโมดูลปัจจุบัน โดยผสานผลการทดสอบ Unit Test และการทดสอบที่มีการวัดประสิทธิภาพ | path_to_your_project/module_name/build/reports/tests/test-report/ |
| โมดูลปัจจุบันและการอ้างอิง | ./gradlew :module_name:createAggregatedTestReport |
สร้างรายงานการทดสอบแบบรวมสำหรับโมดูลแอปปัจจุบันและทรัพยากร Dependency ของไลบรารี | path_to_your_project/module_name/build/reports/tests/aggregated-test-report/ |