ทำการทดสอบ (ล่าสุด)

Atest คือเครื่องมือบรรทัดคำสั่งที่ช่วยให้ผู้ใช้สร้าง ติดตั้ง และเรียกใช้ การทดสอบ Android ในเครื่อง ซึ่งช่วยเพิ่มความเร็วให้การทดสอบซ้ำได้อย่างมากโดยไม่ต้องอาศัย ความรู้เกี่ยวกับเครื่องมือทดสอบของสหพันธ์การค้า ของบรรทัดคำสั่ง หน้านี้จะอธิบายวิธีใช้ Atest เพื่อเรียกใช้การทดสอบ Android

สำหรับข้อมูลทั่วไปเกี่ยวกับการทดสอบการเขียนสำหรับ Android โปรดดู การทดสอบแพลตฟอร์ม Android

สำหรับข้อมูลเกี่ยวกับโครงสร้างโดยรวมของ Atest โปรดไปที่ คู่มือนักพัฒนาซอฟต์แวร์ฉบับล่าสุด

หากต้องการข้อมูลเกี่ยวกับการเรียกใช้การทดสอบในไฟล์ TEST_MAPPING ผ่าน Atest โปรดดู เรียกใช้การทดสอบในไฟล์ TEST_MAPPING

หากต้องการเพิ่มฟีเจอร์ไปยัง Atest ให้ทำตาม เวิร์กโฟลว์ล่าสุดสำหรับนักพัฒนาซอฟต์แวร์

ตั้งค่าสภาพแวดล้อมของคุณ

หากต้องการตั้งค่าสภาพแวดล้อม Atest ของคุณ ให้ทำตามคำแนะนำในการตั้งค่า สภาพแวดล้อม การเลือกเป้าหมาย และการสร้างโค้ด

การใช้งานพื้นฐาน

คำสั่งล่าสุดจะมีรูปแบบต่อไปนี้

atest test-to-run [optional-arguments]

อาร์กิวเมนต์ที่ไม่บังคับ

ตารางต่อไปนี้แสดงอาร์กิวเมนต์ที่ใช้บ่อยที่สุด รายการทั้งหมดคือ ใช้งานได้จนถึงวันที่ atest --help

ตัวเลือก ตัวเลือกแบบยาว คำอธิบาย
-b --build สร้างเป้าหมายการทดสอบ (ค่าเริ่มต้น)
-i --install การติดตั้งอาร์ติแฟกต์ทดสอบ (APK) ในอุปกรณ์ (ค่าเริ่มต้น)
-t --test ทำการทดสอบ (ค่าเริ่มต้น)
-s --serial ทำการทดสอบในอุปกรณ์ที่ระบุ สามารถทดสอบอุปกรณ์ได้ครั้งละ 1 เครื่อง
-d --disable-teardown ปิดใช้การทดสอบการทำลายและการล้างข้อมูล
--dry-run ทดลองเรียกใช้ Atest โดยไม่สร้าง ติดตั้ง หรือเรียกใช้การทดสอบจริง
-m --rebuild-module-info บังคับให้สร้างไฟล์ module-info.json ใหม่
-w --wait-for-debugger รอให้โปรแกรมแก้ไขข้อบกพร่องเสร็จสิ้นก่อนปฏิบัติการ
-v --verbose แสดงการบันทึกระดับ DEBUG
--iterations ทำการทดสอบแบบวนซ้ำจนกว่าจะถึงการทำซ้ำสูงสุด (10 โดยค่าเริ่มต้น)
--rerun-until-failure [COUNT=10] เรียกใช้การทดสอบทั้งหมดซ้ำจนกว่าจะเกิดข้อผิดพลาดหรือถึงจำนวนการวนซ้ำสูงสุด (10 โดยค่าเริ่มต้น)
--retry-any-failure [COUNT=10] เรียกใช้การทดสอบที่ล้มเหลวอีกครั้งจนกว่าจะผ่านหรือถึงการทำซ้ำสูงสุด (10 โดยค่าเริ่มต้น)
--start-avd สร้าง AVD และทำการทดสอบในอุปกรณ์เสมือนโดยอัตโนมัติ
--acloud-create สร้าง AVD โดยใช้คําสั่ง acloud
--[CUSTOM_ARGS] ระบุอาร์กิวเมนต์ที่กำหนดเองสำหรับตัวดำเนินการทดสอบ
-a --all-abi ดำเนินการทดสอบสถาปัตยกรรมอุปกรณ์ทั้งหมดที่มี
--host เรียกใช้การทดสอบทั้งหมดในโฮสต์โดยไม่ต้องมีอุปกรณ์
หมายเหตุ: การเรียกใช้การทดสอบโฮสต์ที่ต้องใช้อุปกรณ์ที่มี --host จะล้มเหลว
--history แสดงผลการทดสอบตามลำดับเวลา
--latest-result พิมพ์ผลตรวจล่าสุด

ดูข้อมูลเพิ่มเติมเกี่ยวกับ -b, -i และ -t ได้ที่ ระบุขั้นตอน: สร้าง ติดตั้ง หรือเรียกใช้ส่วน

ระบุการทดสอบ

หากต้องการเรียกใช้การทดสอบ ให้ระบุการทดสอบอย่างน้อย 1 รายการโดยใช้ตัวระบุต่อไปนี้

  • ชื่อโมดูล
  • โมดูล:ชั้นเรียน
  • ชื่อชั้นเรียน
  • การทดสอบการผสานรวมที่มีการแลกเปลี่ยน
  • เส้นทางของไฟล์
  • ชื่อแพ็กเกจ

แยกการอ้างอิงไปยังการทดสอบหลายรายการด้วยการเว้นวรรค ดังนี้

atest test-identifier-1 test-identifier-2

ชื่อโมดูล

หากต้องการเรียกใช้โมดูลทดสอบทั้งโมดูล ให้ใช้ชื่อโมดูล ป้อนชื่อตามที่ปรากฏในตัวแปร LOCAL_MODULE หรือ LOCAL_PACKAGE_NAME ในไฟล์ Android.mk หรือ Android.bp ของการทดสอบนั้น

ตัวอย่าง

atest FrameworksServicesTests
atest CtsVideoTestCases

โมดูล:ชั้นเรียน

หากต้องการเรียกใช้คลาสเดียวภายในโมดูล ให้ใช้ Module:Class โมดูล คือ เหมือนกับที่อธิบายไว้ในชื่อโมดูล คลาสคือชื่อของคลาสทดสอบในไฟล์ .java และอาจเป็นชื่อคลาสที่มีคุณสมบัติครบถ้วนหรือชื่อพื้นฐานก็ได้

ตัวอย่าง

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

ชื่อชั้นเรียน

หากต้องการเรียกใช้คลาสเดียวโดยไม่ระบุชื่อโมดูลอย่างชัดเจน ให้ใช้คลาส ชื่อ

ตัวอย่าง

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

การทดสอบการผสานรวม Tradefed

หากต้องการเรียกใช้การทดสอบที่ผสานรวมกับ TradeFed โดยตรง (ไม่ใช่โมดูล) ให้ป้อนชื่อตามที่ปรากฏในเอาต์พุตของคำสั่ง tradefed.sh list configs สำหรับ ตัวอย่าง:

หากต้องการเรียกใช้ฟังก์ชัน การทดสอบ reboot.xml:

atest example/reboot

หากต้องการเรียกใช้ฟังก์ชัน การทดสอบ native-benchmark.xml:

atest native-benchmark

เส้นทางของไฟล์

Atest รองรับทั้งการทดสอบตามโมดูลและการทดสอบตามการผสานรวมโดย ป้อนเส้นทางไปยังไฟล์หรือไดเรกทอรีทดสอบตามความเหมาะสม และ รองรับการเรียกใช้คลาสเดียวโดยการระบุเส้นทางไปยังไฟล์ Java ของคลาส ระบบรองรับทั้งเส้นทางแบบสัมพัทธ์และสัมบูรณ์

เรียกใช้โมดูล

ตัวอย่างต่อไปนี้แสดงวิธีเรียกใช้โมดูล CtsVideoTestCases 2 วิธีโดยใช้ เส้นทางของไฟล์

เรียกใช้จาก Android repo-root

atest cts/tests/video

เรียกใช้จาก Android repo-root/cts/tests/video:

    atest .

เรียกใช้คลาสทดสอบ

ตัวอย่างต่อไปนี้แสดงวิธีเรียกใช้ชั้นเรียนที่ต้องการภายใน CtsVideoTestCases โดยใช้เส้นทางไฟล์

จาก Android repo-root

    atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

ทำการทดสอบการผสานรวม

ตัวอย่างต่อไปนี้แสดงวิธีทำการทดสอบการผสานรวมโดยใช้เส้นทางของไฟล์ จาก Android repo-root:

    atest tools/tradefederation/contrib/res/config/example/reboot.xml

ชื่อแพ็กเกจ

Atest รองรับการค้นหาการทดสอบตามชื่อแพ็กเกจ

ตัวอย่าง

    atest com.android.server.wm
    atest com.android.uibench.janktests

ระบุขั้นตอน: สร้าง ติดตั้ง หรือเรียกใช้

ใช้ตัวเลือก -b, -i และ -t เพื่อระบุขั้นตอนที่จะเรียกใช้ หากไม่ได้ระบุตัวเลือก ระบบจะเรียกใช้ทุกขั้นตอน

  • เป้าหมายของบิลด์เท่านั้น: atest -b test-to-run
  • เรียกใช้การทดสอบเท่านั้น: atest -t test-to-run
  • ติดตั้ง APK และทำการทดสอบ: atest -it test-to-run
  • สร้างและเรียกใช้ แต่ไม่ติดตั้ง: atest -bt test-to-run

การทดสอบอาจบังคับให้การทดสอบข้ามขั้นตอนการทำความสะอาดหรือล้างข้อมูล การทดสอบจำนวนมาก เช่น CTS ทำความสะอาดอุปกรณ์หลังทำการทดสอบ ดังนั้นให้ลองทำการทดสอบอีกครั้ง ด้วย -t จะล้มเหลวหากไม่มีพารามิเตอร์ --disable-teardown ใช้ -d ก่อน -t เพื่อข้ามขั้นตอนการล้างข้อมูลและทดสอบซ้ำ

atest -d test-to-run
atest -t test-to-run

เรียกใช้บางวิธี

Atest รองรับการเรียกใช้เมธอดที่เฉพาะเจาะจงภายในคลาสทดสอบ แม้ว่าภาพรวม จำเป็นต้องสร้างโมดูล ซึ่งจะช่วยลดเวลาที่ต้องใช้ในการทำการทดสอบ เพื่อเรียกใช้ ระบุชั้นเรียนโดยใช้วิธีที่รองรับสำหรับ การระบุคลาส (โมดูล:คลาส, เส้นทางไฟล์ ฯลฯ) และเพิ่มชื่อของฟิลด์ วิธีการ:

atest reference-to-class#method1

เมื่อระบุหลายวิธี ให้คั่นแต่ละวิธีด้วยเครื่องหมายจุลภาค

atest reference-to-class#method1,method2,method3

ตัวอย่าง

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

ตัวอย่าง 2 ข้อต่อไปนี้แสดงวิธีเรียกใช้เมธอดเดียว testFlagChange เราขอแนะนำให้ดูตัวอย่างเหล่านี้แทนที่จะใช้ชื่อคลาสเพียงอย่างเดียว เนื่องจากการระบุโมดูลหรือตำแหน่งไฟล์ Java จะทำให้ Atest สามารถค้นหา ได้เร็วขึ้นมาก

การใช้ Module:Class

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

จาก Android repo-root

atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange

คุณสามารถเรียกใช้เมธอดจากชั้นเรียนและโมดูลต่างๆ ได้หลายแบบ ดังนี้

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

เรียกใช้หลายชั้นเรียน

หากต้องการเรียกใช้หลายคลาส ให้คั่นด้วยเว้นวรรคเช่นเดียวกับการเรียกใช้การทดสอบหลายรายการ Atest สร้างและเรียกใช้ชั้นเรียนอย่างมีประสิทธิภาพ ดังนั้นการระบุ ชั้นเรียนย่อยในโมดูลจะช่วยปรับปรุงประสิทธิภาพได้มากกว่าการเรียกใช้ทั้งชั้นเรียน

หากต้องการเรียกใช้ 2 ชั้นเรียนในโมดูลเดียวกัน ให้ทำดังนี้

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

หากต้องการเรียกใช้ 2 ชั้นเรียนในโมดูลที่ต่างกัน ให้ทำดังนี้

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

เรียกใช้ไบนารีของ GTest

Atest จะเรียกใช้ไบนารีของ GTest ได้ ใช้ -a เพื่อทำการทดสอบทั้งหมดที่มี สถาปัตยกรรมอุปกรณ์ ซึ่งในตัวอย่างนี้คือ armeabi-v7a (ARM 32 บิต) และ arm64-v8a (ARM 64 บิต)

ตัวอย่างการทดสอบอินพุต

atest -a libinput_tests inputflinger_tests

หากต้องการเลือกไบนารี GTest ที่เจาะจง ให้ใช้เครื่องหมายโคลอน (:) เพื่อระบุการทดสอบ และแฮชแท็ก (#) เพื่อระบุเพิ่มเติมสำหรับแต่ละเมธอด

ตัวอย่างเช่น สำหรับคำจำกัดความการทดสอบต่อไปนี้

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

เรียกใช้คำสั่งต่อไปนี้เพื่อระบุการทดสอบทั้งหมด

atest inputflinger_tests:InputDispatcherTest

หรือทำการทดสอบแต่ละรายการโดยใช้สิ่งต่อไปนี้

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

เรียกใช้การทดสอบใน TEST_MAPPING

Atest สามารถเรียกใช้การทดสอบได้ในไฟล์ TEST_MAPPING รายการ

เรียกใช้การทดสอบการส่งล่วงหน้าโดยปริยาย

เรียกใช้การทดสอบการส่งล่วงหน้าใน TEST_MAPPING ไฟล์ในไดเรกทอรีปัจจุบันและไดเรกทอรีระดับบน:

atest

เรียกใช้การทดสอบการส่งล่วงหน้าใน TEST_MAPPING ไฟล์ใน /path/to/project และ ไดเรกทอรีระดับบน:

atest --test-mapping /path/to/project

เรียกใช้กลุ่มทดสอบที่ระบุ

กลุ่มทดสอบที่มีอยู่ ได้แก่ presubmit(ค่าเริ่มต้น), postsubmit mainline-presubmit และ all

ทำการทดสอบหลังส่งในไฟล์ TEST_MAPPING ในไดเรกทอรีปัจจุบันและไดเรกทอรีระดับบน:

atest :postsubmit

เรียกใช้การทดสอบจากทุกกลุ่มในไฟล์ TEST_MAPPING:

atest :all

ทำการทดสอบหลังส่งในไฟล์ TEST_MAPPING ใน /path/to/project และ ไดเรกทอรีระดับบน:

atest --test-mapping /path/to/project:postsubmit

เรียกใช้การทดสอบหลักในไฟล์ TEST_MAPPING ใน /path/to/project และไดเรกทอรีหลัก

atest --test-mapping /path/to/project:mainline-presubmit

เรียกใช้การทดสอบในไดเรกทอรีย่อย

โดยค่าเริ่มต้น Atest จะค้นหาเฉพาะการทดสอบในไฟล์ TEST_MAPPING ขึ้นไป (จาก ไดเรกทอรีปัจจุบันหรือไดเรกทอรีที่ระบุไปยังไดเรกทอรีระดับบน) หากคุณต้องการ หากต้องการเรียกใช้การทดสอบในไฟล์ TEST_MAPPING ในไดเรกทอรีย่อย ให้ใช้ --include-subdirs เพื่อบังคับให้ Atest รวมการทดสอบเหล่านั้นด้วย:

atest --include-subdirs /path/to/project

ทำการทดสอบซ้ำ

ทำการทดสอบซ้ำโดยการส่งอาร์กิวเมนต์ --iterations ผ่านหรือไม่ หรือล้มเหลว Atest จะทดสอบซ้ำจนกว่าจะถึงจำนวนครั้งสูงสุดที่ทำซ้ำ

ตัวอย่าง

โดยค่าเริ่มต้น Atest จะวนซ้ำ 10 ครั้ง จำนวนการทำซ้ำต้องเป็นจำนวนบวก จำนวนเต็ม

atest test-to-run --iterations
atest test-to-run --iterations 5

วิธีการต่อไปนี้ช่วยให้ตรวจพบการทดสอบที่ไม่สม่ำเสมอได้ง่ายขึ้น

วิธีที่ 1: ทำการทดสอบทั้งหมดจนกว่าจะเกิดข้อผิดพลาดหรือถึงจำนวนครั้งสูงสุดที่ทำได้

  • หยุดเมื่อการทำงานล้มเหลวเกิดขึ้นหรือการทำซ้ำถึงรอบที่ 10 (โดยค่าเริ่มต้น)
    atest test-to-run --rerun-until-failure
    
  • หยุดเมื่อเกิดความล้มเหลวหรือการทำซ้ำถึงรอบที่ 100
    atest test-to-run --rerun-until-failure 100
    

วิธีที่ 2: เรียกใช้การทดสอบที่ล้มเหลวเท่านั้นจนกว่าจะผ่านหรือถึงการทำซ้ำสูงสุด

  • สมมติว่า test-to-run มีกรอบการทดสอบหลายรายการและหนึ่งใน การทดสอบล้มเหลว เรียกใช้การทดสอบที่ล้มเหลว 10 ครั้งเท่านั้น (โดยค่าเริ่มต้น) หรือจนกว่า บัตรผ่านทดสอบ
    atest test-to-run --retry-any-failure
    
  • หยุดดำเนินการทดสอบที่ล้มเหลวเมื่อผ่านหรือถึงรอบที่ 100
    atest test-to-run --retry-any-failure 100
    

ทำการทดสอบใน AVD

Atest สามารถเรียกใช้การทดสอบใน AVD ที่สร้างขึ้นใหม่ เรียกใช้ acloud create เพื่อสร้าง AVD และอาร์ติแฟกต์บิลด์ จากนั้นใช้ตัวอย่างต่อไปนี้เพื่อทำการทดสอบ

เริ่มใช้ AVD และทำการทดสอบด้วยคำสั่งต่อไปนี้

acloud create --local-instance --local-image && atest test-to-run

เริ่มใช้ AVD เป็นส่วนหนึ่งของการทดสอบ

atest test-to-run --acloud-create "--local-instance --local-image"

โปรดเรียกใช้ acloud create --help เพื่อดูข้อมูลเพิ่มเติม

ส่งตัวเลือกไปยังโมดูล

Atest ส่งตัวเลือกไปยังโมดูลทดสอบได้ วิธีเพิ่มบรรทัดคำสั่ง TradeFed ในการทดสอบ ใช้โครงสร้างต่อไปนี้ และตรวจสอบให้แน่ใจว่า อาร์กิวเมนต์จะใช้รูปแบบตัวเลือกบรรทัดคำสั่งที่ Tradefed

atest test-to-run -- [CUSTOM_ARGS]

ส่งตัวเลือกโมดูลทดสอบไปยังผู้เตรียมการเป้าหมายหรือโปรแกรมรันทดสอบที่ระบุไว้ในไฟล์การกําหนดค่าการทดสอบ

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

ส่งตัวเลือกไปยังประเภทหรือคลาสนักวิ่ง

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกสำหรับการทดสอบเท่านั้นได้ที่ ส่งตัวเลือกไปยังโมดูล