เอกสารนี้อธิบายวิธีเรียกใช้การทดสอบจากบรรทัดคำสั่งโดยตรง เอกสารนี้ถือว่าคุณทราบวิธีสร้างแอป Android และเขียนการทดสอบสำหรับแอปแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างการทดสอบสำหรับแอปได้ที่ ทดสอบแอปใน Android
เมื่อสร้างแอปโดยใช้ระบบบิลด์ Gradle ปลั๊กอิน Android Gradle จะช่วยให้คุณเรียกใช้การทดสอบจากโปรเจ็กต์ Gradle ได้โดยใช้บรรทัดคำสั่ง หากต้องการควบคุมอย่างละเอียดมากขึ้น คุณสามารถเลือกเรียกใช้การทดสอบผ่านเชลล์ Android Debug Bridge (adb) ซึ่งจะเป็นประโยชน์เมื่อเรียกใช้การทดสอบในสภาพแวดล้อมการ ผสานรวมอย่างต่อเนื่อง
ดูวิธีเรียกใช้การทดสอบการวัดคุมอัตโนมัติจากบรรทัดคำสั่งโดยใช้ อุปกรณ์เสมือนที่ Gradle จัดการให้คุณได้ที่ ปรับขนาดการทดสอบด้วยอุปกรณ์ที่มีการจัดการจาก Gradle
เรียกใช้การทดสอบด้วย Gradle
ปลั๊กอิน Android Gradle จะช่วยให้คุณเรียกใช้การทดสอบจากโปรเจ็กต์ Gradle ได้โดยใช้บรรทัดคำสั่ง
ตารางด้านล่างสรุปวิธีเรียกใช้การทดสอบด้วย Gradle
ตารางที่ 1 วิธีต่างๆ ในการเรียกใช้การทดสอบด้วย Gradle
| ประเภท Unit Test | คำสั่งที่เรียกใช้ | ตำแหน่งผลการทดสอบ |
|---|---|---|
| Local Unit Test |
เรียกใช้งาน 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 check และ connectedCheck ได้ด้วย งานเหล่านี้จะเรียกใช้การทดสอบในเครื่องหรือการทดสอบการวัดคุมตามลำดับ แต่รวมถึงการตรวจสอบอื่นๆ ที่เพิ่มโดยปลั๊กอิน Gradle อื่นๆ
เรียกใช้การทดสอบในโมดูล
งาน test และ connectedAndroidTest จะเรียกใช้การทดสอบในแต่ละโมดูลในโปรเจ็กต์ คุณสามารถเรียกใช้การทดสอบในโมดูลที่เฉพาะเจาะจงได้โดยใส่คำนำหน้า test หรือ connectedAndroidTest ด้วยชื่อโมดูลและโคลอน (:) เช่น คำสั่งต่อไปนี้จะเรียกใช้การทดสอบการวัดคุมสำหรับโมดูล mylibrary เท่านั้น
./gradlew mylibrary:connectedAndroidTestเรียกใช้การทดสอบในตัวแปรบิลด์
งาน test และ connectedAndroidTest จะเรียกใช้การทดสอบในแต่ละ
ตัวแปรบิลด์ในโปรเจ็กต์ คุณสามารถกำหนดเป้าหมายตัวแปรบิลด์ที่เฉพาะเจาะจงได้โดยใช้ไวยากรณ์ต่อไปนี้
- สำหรับการทดสอบ 1 หน่วยในเครื่อง
./gradlew testVariantNameUnitTest - สำหรับการทดสอบการวัดคุม
./gradlew connectedVariantNameAndroidTest
เรียกใช้เมธอดหรือคลาสการทดสอบที่เฉพาะเจาะจง
เมื่อเรียกใช้ Local Unit Test Gradle จะช่วยให้คุณกำหนดเป้าหมายการทดสอบที่เฉพาะเจาะจงได้โดยใช้แฟล็ก --tests ตัวอย่างเช่น คำสั่งต่อไปนี้จะเรียกใช้การทดสอบ sampleTestMethod สำหรับตัวแปรบิลด์ที่ระบุเท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้แฟล็ก --tests ได้ที่เอกสารประกอบของ Gradle เกี่ยวกับการกรองการทดสอบ
./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'
เรียกใช้การทดสอบด้วย adb
เมื่อเรียกใช้การทดสอบจากบรรทัดคำสั่งด้วย Android Debug Bridge (adb) คุณจะมีตัวเลือกในการเลือกการทดสอบที่จะเรียกใช้มากกว่าวิธีอื่นๆ คุณสามารถเลือกเมธอดการทดสอบแต่ละรายการ กรองการทดสอบตามคำอธิบายประกอบที่กำหนดเอง หรือระบุตัวเลือกการทดสอบ เนื่องจากระบบควบคุมการเรียกใช้การทดสอบจากบรรทัดคำสั่งทั้งหมด คุณจึงปรับแต่งการทดสอบด้วยสคริปต์เชลล์ได้หลายวิธี
หากต้องการเรียกใช้การทดสอบจากบรรทัดคำสั่ง ให้เรียกใช้ adb shell เพื่อเริ่มเชลล์บรรทัดคำสั่งในอุปกรณ์หรือโปรแกรมจำลอง ภายในเชลล์ดังกล่าว คุณสามารถโต้ตอบกับ
ตัวจัดการกิจกรรม
ได้โดยใช้คำสั่ง am และใช้คำสั่งย่อย instrument เพื่อเรียกใช้การทดสอบ
คุณสามารถเริ่มเชลล์ adb เรียกใช้ am instrument และระบุแฟล็กบรรทัดคำสั่งทั้งหมดในบรรทัดอินพุตเดียวได้ เชลล์จะเปิดขึ้นในอุปกรณ์หรือโปรแกรมจำลอง เรียกใช้การทดสอบ สร้างเอาต์พุต แล้วกลับไปที่บรรทัดคำสั่งในคอมพิวเตอร์
วิธีเรียกใช้การทดสอบด้วย am instrument
- สร้าง หรือสร้างใหม่แอปพลิเคชันหลักและ แพ็กเกจทดสอบ
- ติดตั้งแพ็กเกจทดสอบและไฟล์แพ็กเกจแอปพลิเคชันหลักของ Android (ไฟล์ APK) ในอุปกรณ์ Android หรือโปรแกรมจำลอง Android ปัจจุบัน
ป้อนคำสั่งต่อไปนี้ในบรรทัดคำสั่ง
adb shell am instrument -w <test_package_name>/<runner_class>โดยที่
<test_package_name>คือชื่อแพ็กเกจ Android ของแอปพลิเคชันทดสอบ และ<runner_class>คือชื่อคลาสตัวเรียกใช้การทดสอบ Android ที่คุณใช้ ชื่อแพ็กเกจ Android คือค่าของแอตทริบิวต์แพ็กเกจขององค์ประกอบ Manifest ในไฟล์ Manifest ของแพ็กเกจทดสอบ (AndroidManifest.xml)คลาสตัวเรียกใช้การทดสอบ Android มักจะเป็น
AndroidJUnitRunneradb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
ผลการทดสอบจะปรากฏใน STDOUT
แฟล็ก am instrument
หากต้องการดูรายการแฟล็กทั้งหมดที่จะใช้กับคำสั่ง am instrument ให้เรียกใช้ adb shell am help ตารางต่อไปนี้อธิบายแฟล็กที่สำคัญบางรายการ
ตารางที่ 2 แฟล็ก am instrument ที่สำคัญ
| แฟล็ก | ค่า | คำอธิบาย |
|---|---|---|
-w
|
(ไม่มี) |
บังคับให้ am instrument รอจนกว่าการวัดคุมจะสิ้นสุดลงก่อนที่จะสิ้นสุดตัวเอง ซึ่งจะทำให้เชลล์เปิดอยู่จนกว่าการทดสอบจะเสร็จสิ้น คุณต้องใช้แฟล็กนี้จึงจะ
ดูผลการทดสอบได้
|
-r
|
(ไม่มี) |
แสดงผลลัพธ์ในรูปแบบข้อมูลดิบ ใช้แฟล็กนี้เมื่อต้องการ
รวบรวมการวัดประสิทธิภาพเพื่อให้ระบบไม่จัดรูปแบบเป็น
ผลการทดสอบ แฟล็กนี้ออกแบบมาเพื่อใช้กับแฟล็ก
-e perf true (อธิบายไว้ในส่วน
ตัวเลือก am instrument)
|
-e
|
<test_options>
|
ระบุตัวเลือกการทดสอบเป็นคู่คีย์-ค่า เครื่องมือ
am instrument จะส่งตัวเลือกเหล่านี้ไปยังคลาสการวัดคุมที่ระบุ
โดยใช้เมธอด
onCreate()
คุณสามารถระบุ
-e <test_options> ได้หลายครั้ง คีย์และค่าจะ
อธิบายไว้ใน
ส่วนตัวเลือก am instrument คุณใช้คู่คีย์-ค่าเหล่านี้ได้กับ
AndroidJUnitRunner
หรือกับ InstrumentationTestRunner
และคลาสย่อยเท่านั้น การใช้กับคลาสอื่นๆ จะไม่มีผล
|
--no-hidden-api-checks
|
(ไม่มี) | ปิดใช้ข้อจำกัดในการใช้ API ที่ซ่อนอยู่ ดูข้อมูลเพิ่มเติมเกี่ยวกับ API ที่ซ่อนอยู่และวิธีที่ API เหล่านี้อาจส่งผลต่อแอปได้ที่ ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK |
ตัวเลือก am instrument
เครื่องมือ 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ดูกรณีการใช้งานเพิ่มเติมได้ใน
AndroidJUnitRunner
เอกสารอ้างอิง API
ดูรายงานการทดสอบแบบรวม
ปลั๊กอิน Android Gradle มีงานรายงานการทดสอบแบบรวม ซึ่งสร้างแดชบอร์ด HTML ที่ผสานผลลัพธ์จากการทดสอบ 1 หน่วยและการทดสอบการวัดคุม
สิ่งที่ต้องมีก่อน
- ปลั๊กอิน Android Gradle 9.2.0-alpha07 ขึ้นไป
หากต้องการสร้างรายงานการทดสอบแบบรวม ให้เรียกใช้งานใดงานหนึ่งต่อไปนี้
| ขอบเขตรายงาน | คำสั่ง | คำอธิบาย | ตำแหน่งรายงาน |
|---|---|---|---|
| โมดูลปัจจุบัน | ./gradlew :module_name:createTestReport |
สร้างรายงานการทดสอบแบบรวมสำหรับโมดูลปัจจุบัน โดยผสานผลลัพธ์การทดสอบ 1 หน่วยและการทดสอบการวัดคุม | path_to_your_project/module_name/build/reports/tests/test-report/ |
| โมดูลปัจจุบันและทรัพยากร Dependency | ./gradlew :module_name:createAggregatedTestReport |
สร้างรายงานการทดสอบแบบรวมสำหรับโมดูลแอปปัจจุบันและทรัพยากร Dependency ของไลบรารี | path_to_your_project/module_name/build/reports/tests/aggregated-test-report/ |