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

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

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

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

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

หากต้องการเพิ่มฟีเจอร์ลงใน Atest ให้ทําตามเวิร์กโฟลว์ของนักพัฒนาซอฟต์แวร์ Atest

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

หากต้องการตั้งค่าสภาพแวดล้อม Atest ให้ทําตามวิธีการในการตั้งค่าสภาพแวดล้อม การเลือกเป้าหมาย และการสร้างโค้ด

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

คำสั่ง Atest มีรูปแบบดังนี้

atest test-to-run [optional-arguments]

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

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

ตัวเลือก ตัวเลือกแบบยาว คำอธิบาย
-b --build สร้างเป้าหมายการทดสอบ (ค่าเริ่มต้น)
-i --install ติดตั้งอาร์ติแฟกต์ทดสอบ (APK) ในอุปกรณ์ (ค่าเริ่มต้น)
-t --test ทำการทดสอบ (ค่าเริ่มต้น)
-s --serial เรียกใช้การทดสอบในอุปกรณ์ที่ระบุ ทดสอบได้ทีละอุปกรณ์
-d --disable-teardown ปิดใช้การทดสอบการทำลายและการล้างข้อมูล
--dry-run เรียกใช้ Atest แบบจำลองโดยไม่ต้องสร้าง ติดตั้ง หรือเรียกใช้การทดสอบจริง
-m --rebuild-module-info บังคับให้สร้างไฟล์ module-info.json ใหม่
-w --wait-for-debugger รอให้โปรแกรมแก้ไขข้อบกพร่องเสร็จสิ้นก่อนปฏิบัติการ
-v --verbose แสดงการบันทึกระดับการแก้ไขข้อบกพร่อง
--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 รายการโดยใช้ตัวระบุต่อไปนี้

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

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

atest test-identifier-1 test-identifier-2

ชื่อโมดูล

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

ตัวอย่าง

atest FrameworksServicesTests
atest CtsVideoTestCases

Module:Class

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

ตัวอย่าง

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

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

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

ตัวอย่าง

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

การทดสอบการผสานรวมที่มีการแลกเปลี่ยน

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

วิธีทำการทดสอบ reboot.xml

atest example/reboot

วิธีทำการทดสอบ native-benchmark.xml

atest native-benchmark

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

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

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

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

เรียกใช้จาก 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

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

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

เรียกใช้เมธอดที่เฉพาะเจาะจง

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

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 จะทำการทดสอบซ้ำจนกว่าจะถึงจำนวนการวนซ้ำสูงสุด

ตัวอย่าง

โดยค่าเริ่มต้น การทดสอบจะทำซ้ำ 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

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

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

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