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

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

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

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

ทำการทดสอบด้วย Gradle

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

ตารางด้านล่างจะสรุปวิธีทำการทดสอบด้วย Gradle

ตาราง 1 วิธีต่างๆ ในการทำการทดสอบ เกรเดิล

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

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

ไฟล์ผลการทดสอบ XML:
วันที่ path_to_your_project/module_name/build/test-results/ ไดเรกทอรี

การทดสอบ 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/ ไดเรกทอรี

รองรับ Gradle ตัวย่อชื่องาน ตัวอย่างเช่น คุณสามารถเริ่มงาน connectedAndroidTest ได้โดย ป้อนคำสั่งต่อไปนี้

./gradlew cAT

นอกจากนี้ คุณยังเลือกเรียกใช้งาน Gradle แบบ check และ connectedCheck ได้ด้วย เหล่านี้ จะทำการทดสอบในเครื่องหรือแบบมีเครื่องวัดตามลำดับ มีการตรวจสอบอื่นๆ ที่เพิ่มโดยปลั๊กอิน Gradle อื่นๆ

เรียกใช้การทดสอบในโมดูล

งาน test และ connectedAndroidTest เรียกใช้การทดสอบในแต่ละโมดูลใน คุณสามารถทำการทดสอบในโมดูลที่ต้องการได้โดย นำหน้างาน test หรือ connectedAndroidTest ด้วยชื่อโมดูลและ เครื่องหมายโคลอน (:) ตัวอย่างเช่น คำสั่งต่อไปนี้จะเรียกใช้การทดสอบแบบมีเครื่องควบคุมสำหรับ โมดูล mylibrary:

./gradlew mylibrary:connectedAndroidTest

ทำการทดสอบในตัวแปรของบิลด์

งาน test และ connectedAndroidTest เรียกใช้การทดสอบในแต่ละงาน สร้างตัวแปรในโปรเจ็กต์ คุณสามารถกำหนดเป้าหมาย ตัวแปรบิลด์ที่เฉพาะเจาะจงโดยใช้ไวยากรณ์ต่อไปนี้

  • สำหรับการทดสอบ 1 หน่วยในเครื่อง
    ./gradlew testVariantNameUnitTest
  • สำหรับการทดสอบแบบมีเครื่องวัด ให้ทำดังนี้
    ./gradlew connectedVariantNameAndroidTest

เรียกใช้วิธีหรือคลาสการทดสอบที่เฉพาะเจาะจง

เมื่อเรียกใช้การทดสอบหน่วยท้องถิ่น Gradle ช่วยให้คุณสามารถกำหนดเป้าหมายการทดสอบที่เฉพาะเจาะจงโดยใช้ ธง--tests ตัวอย่างเช่น คำสั่งต่อไปนี้จะเรียกใช้เฉพาะ sampleTestMethod การทดสอบสำหรับตัวแปรบิลด์ที่ระบุ หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ โดยใช้แฟล็ก --tests โปรดอ่านเอกสารประกอบของ Gradle การกรองทดสอบ


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

ทำการทดสอบด้วย adb

เมื่อคุณเรียกใช้การทดสอบจากบรรทัดคำสั่งด้วย Android Debug Bridge (adb) มีตัวเลือกเพิ่มเติมสำหรับ การเลือกการทดสอบที่จะเรียกใช้มากกว่าวิธีอื่นๆ คุณสามารถเลือก วิธีการทดสอบ กรองการทดสอบตามคำอธิบายประกอบที่กำหนดเอง หรือระบุการทดสอบ ตัวเลือก เนื่องจากการดำเนินการทดสอบควบคุมจากบรรทัดคำสั่งทั้งหมด สามารถปรับแต่งการทดสอบด้วยสคริปต์ Shell ได้หลายวิธี

หากต้องการเรียกใช้การทดสอบจากบรรทัดคำสั่ง ให้เรียกใช้ adb shell เพื่อเริ่มต้นบรรทัดคำสั่ง Shell บนอุปกรณ์หรือโปรแกรมจำลองของคุณ ภายในเชลล์ดังกล่าวคุณสามารถโต้ตอบกับ เครื่องมือจัดการกิจกรรม โดยใช้คำสั่ง am และใช้คำสั่งย่อย instrument เพื่อทำการทดสอบ

คุณสามารถเริ่มต้น Shell 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 ที่คุณใช้อยู่ ชื่อแพ็กเกจ Android คือค่าขององค์ประกอบในไฟล์ Manifest แอตทริบิวต์แพ็กเกจในไฟล์ Manifest ของแพ็กเกจทดสอบ (AndroidManifest.xml)

    คลาสตัวดำเนินการทดสอบ Android มักจะ AndroidJUnitRunner:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
    

ผลการทดสอบจะปรากฏในภาษาSTDOUT

ธงเครื่องดนตรี AM

หากต้องการดูรายการแฟล็กทั้งหมดที่จะใช้กับคำสั่ง am instrument เรียกใช้ adb shell am help การแจ้งว่าไม่เหมาะสมที่สำคัญได้อธิบายไว้ใน ตารางต่อไปนี้

ตาราง 2 am instrumentที่สำคัญ Flag

ตั้งค่าสถานะ ค่า คำอธิบาย
-w (ไม่มี) บังคับให้ am instrument รอจนกว่าจะมีการใช้เครื่องมือ สิ้นสุดก่อนที่จะสิ้นสุดการใช้งานเอง ซึ่งทำให้ เปิดเชลล์ไว้จนกว่าการทดสอบจะเสร็จสิ้น แฟล็กนี้จำเป็นสำหรับ ดูผลการทดสอบของคุณ
-r (ไม่มี) เอาต์พุตที่ได้จะอยู่ในรูปแบบไฟล์ข้อมูล RAW ใช้แฟล็กนี้เมื่อคุณต้องการ รวบรวมการวัดประสิทธิภาพเพื่อไม่ให้มีการจัดรูปแบบเป็น ผลการทดสอบ ธงนี้ได้รับการออกแบบมาเพื่อใช้กับ Flag ดังกล่าว -e perf true (บันทึกไว้ใน am instrument options)
-e <test_options> ให้ตัวเลือกการทดสอบเป็นคู่คีย์-ค่า เครื่องมือ am instrument ส่งรายการเหล่านี้ไปยัง คลาสการใช้เครื่องมือ onCreate() คุณสามารถระบุหลายรายการของ -e <test_options> คีย์และค่ามีดังนี้ ตามที่อธิบายไว้ใน ตัวเลือกเครื่องดนตรี Am คุณสามารถ ให้ใช้คู่คีย์-ค่าเหล่านี้เฉพาะกับ AndroidJUnitRunner หรือด้วย InstrumentationTestRunner และคลาสย่อยด้วย การใช้ส่วนขยายดังกล่าวกับชั้นเรียนอื่นจะไม่ส่งผลใดๆ
--no-hidden-api-checks (ไม่มี) ปิดใช้ข้อจำกัดในการใช้ API ที่ซ่อนอยู่ สำหรับข้อมูลเพิ่มเติม ข้อมูลว่า API ที่ซ่อนอยู่คืออะไร และสิ่งนี้จะส่งผลกระทบต่อ แอป, อ่าน ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK

ตัวเลือกเครื่องมือ AM

เครื่องมือ 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 Flag ที่จะใช้กับ ตัวดำเนินการทดสอบของคุณ

คีย์ ค่า คำอธิบาย
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 เพื่อให้เอาต์พุตอยู่ในรูปแบบไฟล์ข้อมูล RAW และไม่มีการจัดรูปแบบใหม่เป็นผลการทดสอบ
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 หากคุณระบุ แล้วระบุคลาสภายในแพ็กเกจนั้นแยกกัน เรียกใช้การทดสอบทั้งหมดในแพ็กเกจและละเว้นคีย์คลาส
  • คีย์ 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