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 |
เรียกใช้การทดสอบในอุปกรณ์ที่ระบุ ทดสอบอุปกรณ์ได้ครั้งละ 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 รายการโดยใช้ตัวระบุต่อไปนี้
- ชื่อโมดูล
- โมดูล:Class
- ชื่อชั้นเรียน
- การทดสอบการผสานรวม Tradefed
- เส้นทางของไฟล์
- ชื่อแพ็กเกจ
คั่นการอ้างอิงถึงการทดสอบหลายรายการด้วยการเว้นวรรค ดังนี้
atest test-identifier-1 test-identifier-2
ชื่อโมดูล
หากต้องการเรียกใช้โมดูลการทดสอบทั้งหมด ให้ใช้ชื่อโมดูล ป้อนชื่อตามที่ปรากฏ
ในตัวแปร LOCAL_MODULE
หรือ LOCAL_PACKAGE_NAME
ในAndroid.mk
หรือAndroid.bp
ไฟล์ของการทดสอบนั้น
ตัวอย่าง
atest FrameworksServicesTests
atest CtsVideoTestCases
โมดูล:Class
หากต้องการเรียกใช้ชั้นเรียนเดียวภายในโมดูล ให้ใช้ Module:Class Module เหมือนกับที่อธิบายไว้ในModule name Class คือชื่อของคลาสทดสอบในไฟล์ .java
และอาจเป็นชื่อคลาสที่มีคุณสมบัติครบถ้วนหรือชื่อพื้นฐานก็ได้
ตัวอย่าง
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
ชื่อชั้นเรียน
หากต้องการเรียกใช้คลาสเดียวโดยไม่ต้องระบุชื่อโมดูลอย่างชัดเจน ให้ใช้ class name
ตัวอย่าง
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
การทดสอบการผสานรวม Tradefed
หากต้องการเรียกใช้การทดสอบที่ผสานรวมโดยตรงใน 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
before
-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 และเรียกใช้การทดสอบใน 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการทดสอบเท่านั้นได้ที่ ส่งตัวเลือกไปยังโมดูล