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
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกสำหรับการทดสอบเท่านั้นได้ที่ ส่งตัวเลือกไปยังโมดูล