ทดสอบจากบรรทัดคำสั่ง

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

เมื่อสร้างแอปโดยใช้ระบบบิลด์ Gradle ปลั๊กอิน Android Gradle จะช่วยให้คุณเรียกใช้การทดสอบจากโปรเจ็กต์ Gradle โดยใช้บรรทัดคำสั่งได้ หากต้องการควบคุมอย่างละเอียดมากขึ้น คุณสามารถเลือกที่จะเรียกใช้การทดสอบผ่านเชลล์ Android Debug Bridge (adb) ซึ่งอาจเป็นประโยชน์เมื่อทำการทดสอบในสภาพแวดล้อมการรวมอย่างต่อเนื่อง

ดูวิธีเรียกใช้การทดสอบที่มีการตรวจสอบอัตโนมัติจากบรรทัดคำสั่งโดยใช้อุปกรณ์เสมือนที่ Gradle จัดการให้คุณได้ที่ขยายขนาดการทดสอบด้วยอุปกรณ์ที่มีการจัดการจาก Gradle

เรียกใช้การทดสอบด้วย Gradle

ปลั๊กอิน Android Gradle ช่วยให้คุณเรียกใช้การทดสอบจากโปรเจ็กต์ Gradle ได้โดยใช้ บรรทัดคำสั่ง

ตารางด้านล่างสรุปวิธีเรียกใช้การทดสอบด้วย Gradle

ตารางที่ 1 วิธีต่างๆ ในการเรียกใช้การทดสอบด้วย Gradle

ประเภทการทดสอบหน่วย คำสั่งที่จะเรียกใช้ ตำแหน่งผลการทดสอบ
การทดสอบ 1 หน่วยในเครื่อง เรียกใช้งาน test ดังนี้

./gradlew test
ไฟล์ผลการทดสอบ HTML:
path_to_your_project/module_name/build/reports/tests/ ไดเรกทอรี

ไฟล์ผลการทดสอบ XML:
path_to_your_project/module_name/build/test-results/ directory

การทดสอบ 1 หน่วยแบบมีเครื่องควบคุม เรียกใช้งาน connectedAndroidTest ดังนี้

./gradlew connectedAndroidTest
ไฟล์ผลการทดสอบ HTML:
path_to_your_project/module_name/build/reports/androidTests/connected/ ไดเรกทอรี

ไฟล์ผลการทดสอบ XML:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ directory

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

  1. สร้างหรือสร้างแอปพลิเคชันหลักและแพ็กเกจทดสอบอีกครั้ง
  2. ติดตั้งแพ็กเกจทดสอบและไฟล์แพ็กเกจ Android ของแอปพลิเคชันหลัก (ไฟล์ APK) ในอุปกรณ์ Android หรือโปรแกรมจำลองปัจจุบัน
  3. ป้อนข้อมูลต่อไปนี้ในบรรทัดคำสั่ง

    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 จะเป็น AndroidJUnitRunner

    adb 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 ซึ่งคุณสร้างได้ด้วยเป้าหมาย coverage

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 ซึ่งมีวิธีการทดสอบ testMethod1
    • TestClass2 ซึ่งมีวิธีการทดสอบ 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/