Atest

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

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

สำหรับข้อมูลเกี่ยวกับโครงสร้างโดยรวมของ Atest ดู คู่มือนักพัฒนา Atest

สำหรับข้อมูลเกี่ยวกับการทดสอบการทำงานในแฟ้ม TEST_MAPPING ผ่าน Atest ดู วิ่งทดสอบในแฟ้ม TEST_MAPPING

และเพื่อเพิ่มคุณสมบัติในการ Atest ทำตาม Atest ผู้พัฒนาเวิร์กโฟลว์

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

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

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

ชุด test_suite สำหรับ Soong หรือ LOCAL_COMPATIBILITY_SUITE สำหรับ Make ต่อ บรรจุภัณฑ์กฎสร้างสคริปต์

เรียกใช้ envsetup.sh

จากรูทของการชำระเงินต้นทาง Android ให้เรียกใช้:

source build/envsetup.sh

วิ่งอาหารกลางวัน

รัน lunch คำสั่งเพื่อนำมาขึ้นเมนูของอุปกรณ์ที่สนับสนุน ค้นหาอุปกรณ์และเรียกใช้คำสั่งนั้น

ตัวอย่างเช่น หากคุณมีอุปกรณ์ ARM เชื่อมต่ออยู่ ให้รันคำสั่งต่อไปนี้:

lunch aosp_arm64-eng

ชุดนี้ตัวแปรสภาพแวดล้อมต่าง ๆ ที่จำเป็นสำหรับการทำงาน Atest และเพิ่มคำสั่ง Atest ที่คุณ $PATH

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

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

atest test-to-run [optional-arguments]

อาร์กิวเมนต์ทางเลือก

ด้านล่างนี้เป็นอาร์กิวเมนต์ที่ใช้บ่อยที่สุด รายการที่สมบูรณ์สามารถใช้ได้ผ่าน atest --help

ตัวเลือก ตัวเลือกยาว คำอธิบาย
-b --build สร้างเป้าหมายการทดสอบ (ค่าเริ่มต้น)
-i --install ติดตั้งสิ่งประดิษฐ์ทดสอบ (APK) บนอุปกรณ์ (ค่าเริ่มต้น)
-t --test ดำเนินการทดสอบ (ค่าเริ่มต้น)
-s --serial รันการทดสอบบนอุปกรณ์ที่ระบุ สามารถทดสอบอุปกรณ์ได้ครั้งละหนึ่งเครื่อง
-d --disable-teardown ปิดใช้งานการทดสอบการฉีกขาดและการล้างข้อมูล
--info แสดงข้อมูลที่เกี่ยวข้องของเป้าหมายและทางออกที่ระบุ
--dry-run การทดสอบการทำงานแบบแห้งโดยไม่ต้องสร้าง ติดตั้ง และเรียกใช้การทดสอบจริง
-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 สร้าง AVDs ใช้ acloud command.
--[CUSTOM_ARGS] ระบุ args ที่กำหนดเองสำหรับนักวิ่งทดสอบ
-a --all-abi ดำเนินการทดสอบสถาปัตยกรรมอุปกรณ์ที่มีอยู่ทั้งหมด
--host รันการทดสอบอย่างสมบูรณ์บนโฮสต์โดยไม่ต้องใช้อุปกรณ์
(หมายเหตุ: การรันการทดสอบโฮสต์ที่ต้องใช้อุปกรณ์ที่มี --host จะล้มเหลว.)
--flakes-info แสดงผลการทดสอบพร้อมข้อมูลเกล็ด
--history แสดงผลการทดสอบตามลำดับเวลา
--latest-result พิมพ์ผลการทดสอบล่าสุด

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

ทดสอบการทำงาน

คุณสามารถเรียกใช้อย่างใดอย่างหนึ่งหรือมากกว่าการทดสอบโดยใช้ test-to-run หากต้องการเรียกใช้การทดสอบหลายรายการ ให้แยกการอ้างอิงการทดสอบด้วยช่องว่าง ตัวอย่างเช่น:

atest test-to-run-1 test-to-run-2

นี่คือตัวอย่างบางส่วน:

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsVideoTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการอ้างอิงการทดสอบให้ดูที่ การระบุการทดสอบ

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

คุณสามารถระบุ test-to-run ทะเลาะกับชื่อการทดสอบของโมดูล Module: ชั้นชื่อชั้น, การทดสอบการรวม TF, เส้นทางของไฟล์หรือชื่อแพคเกจ

ชื่อโมดูล

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

ตัวอย่าง:

atest FrameworksServicesTests
atest CtsVideoTestCases

โมดูล:คลาส

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

ตัวอย่าง:

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

ชื่อคลาส

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

ตัวอย่าง:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

การใช้ Module: อ้างอิงชั้นขอแนะนำเมื่อใดก็ตามที่เป็นไปได้ตั้งแต่ Atest ต้องใช้เวลามากขึ้นในการค้นหาต้นไม้ที่สมบูรณ์สำหรับการแข่งขันที่อาจเกิดขึ้นหากไม่มีโมดูลที่ระบุไว้

ตัวอย่าง (เรียงลำดับจากเร็วไปช้าที่สุด):

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

การทดสอบการรวม TF

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

เมื่อต้องการเรียกใช้ reboot.xml ทดสอบ :

atest example/reboot

เมื่อต้องการเรียกใช้ native-benchmark.xml ทดสอบ :

atest native-benchmark

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

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

วิธีที่สองในการเรียกใช้: ตัวอย่าง CtsVideoTestCases โมดูลผ่านเส้นทาง

  1. เรียกใช้โมดูลจาก Android repo-root :

    atest cts/tests/video
    
  2. จาก Android repo-root / กะรัต / ทดสอบ / วิดีโอ:

    atest .
    

ตัวอย่าง: Run เรียนเฉพาะภายใน 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

ใช้วิธีการเฉพาะ

คุณสามารถเรียกใช้เมธอดเฉพาะภายในคลาสทดสอบ แม้ว่าจะต้องสร้างโมดูลทั้งหมด แต่ก็ช่วยลดเวลาที่ต้องใช้ในการทำการทดสอบ ในการรันเมธอดเฉพาะ ให้ระบุคลาสโดยใช้วิธีใดๆ ที่รองรับเพื่อระบุคลาส (Module:Class, file path ฯลฯ) และต่อท้ายชื่อของเมธอด

atest reference-to-class#method1

คุณสามารถระบุวิธีการได้หลายวิธีด้วยเครื่องหมายจุลภาค

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

ตัวอย่าง:

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

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

  1. การใช้โมดูล:Class

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. จาก 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 สร้างและรันคลาสได้อย่างมีประสิทธิภาพ ดังนั้นการระบุชุดย่อยของคลาสในโมดูลจะช่วยเพิ่มประสิทธิภาพได้มากกว่าการรันทั้งโมดูล

ตัวอย่าง:

  • สองคลาสในโมดูลเดียวกัน:

    atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
    
  • สองคลาสในโมดูลที่แตกต่างกัน:

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
    

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

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

ตัวอย่าง:

  • การทดสอบอินพุต:

    atest -a libinput_tests inputflinger_tests
    

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

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

คุณสามารถเรียกใช้การทดสอบทั้งหมดโดยใช้

atest inputflinger_tests:InputDispatcherTest

หรือวิธีการทดสอบของแต่ละบุคคลโดยใช้

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

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

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

  1. เรียกใช้การทดสอบล่วงหน้าโดยปริยายในไฟล์ TEST_MAPPING ในไดเร็กทอรีปัจจุบัน พาเรนต์ หรือเฉพาะ

    เรียกใช้การทดสอบ presubmit ในแฟ้ม TEST_MAPPING ในไดเรกทอรีปัจจุบันและผู้ปกครอง:

    atest
    

    เรียกใช้การทดสอบ presubmit ในแฟ้ม TEST_MAPPING ใน /path/to/project และไดเรกทอรีแม่:

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

  2. เรียกใช้กลุ่มการทดสอบที่ระบุไว้ในไฟล์ TEST_MAPPING; กลุ่มการทดสอบที่มีอยู่: presubmit (เริ่มต้น), postsubmit , mainline-presubmit และ all

    • เรียกใช้การทดสอบ postsubmit ในแฟ้ม TEST_MAPPING ในไดเรกทอรีปัจจุบันและผู้ปกครอง:

      atest :postsubmit
      

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

      atest :all
      

    • เรียกใช้การทดสอบ postsubmit ในแฟ้ม 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
      

  3. เรียกใช้การทดสอบในไฟล์ TEST_MAPPING รวมถึงไดเรกทอรีย่อย

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

เรียกใช้การทดสอบ presubmit ในแฟ้ม TEST_MAPPING ในปัจจุบันผู้ปกครองและไดเรกทอรีย่อย:

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
    

ทำการทดสอบกับ AVDs

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

ตัวอย่าง:

  • เริ่มต้น AVD ก่อนที่จะใช้การทดสอบบนอุปกรณ์ที่สร้างขึ้นใหม่:

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

  • เริ่ม AVDs โดย specifing acloud create ข้อโต้แย้งและการทดสอบการทำงานบนอุปกรณ์ที่สร้างขึ้นใหม่

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

ที่จะได้รับรายละเอียดการใช้งานเกี่ยวกับการโต้แย้งวิ่ง acloud create --help

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

Atest สามารถส่งตัวเลือกไปยังโมดูลได้ รูปแบบสั้น ๆ ในบรรทัดคำสั่ง Atest เพื่อเพิ่ม TradeFed ตัวเลือกบรรทัดคำสั่ง

atest test-to-run -- [CUSTOM_ARGS]
จอ [CUSTOM_ARGS] ควรเป็นไปตาม Tradefed บรรทัดคำสั่งรูปแบบตัวเลือก

ตัวอย่างของการผ่านตัวเลือกโมดูลการทดสอบไปยังผู้จัดเตรียมเป้าหมายหรือผู้ดำเนินการทดสอบที่กำหนดไว้ในไฟล์กำหนดค่าการทดสอบ:

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

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