ทดสอบโค้ดแพลตฟอร์มด้วย atest

Android Studio for Platform (ASfP) ผสานรวมกับ atest และโมดูลทดสอบ Soong เพื่อให้คุณเรียกใช้และแก้ไขข้อบกพร่องของการทดสอบแพลตฟอร์มในเครื่องโฮสต์ Linux, อุปกรณ์ที่เชื่อมต่อ หรืออุปกรณ์เสมือนจริง Cuttlefish จาก IDE ได้

สิ่งที่ต้องมีก่อน

  • เปิดโปรเจ็กต์ ASfP ที่กำหนดค่าด้วยการชำระเงิน AOSP และเป้าหมาย lunch
  • สำหรับการทดสอบอุปกรณ์ ให้เชื่อมต่ออุปกรณ์จริงหรือเปิดอุปกรณ์เสมือน Cuttlefish ที่ใช้บิลด์ที่ตรงกัน

เรียกใช้และแก้ไขข้อบกพร่องของการทดสอบ

คุณสามารถเปิดตัวการทดสอบแพลตฟอร์มและเซสชันการแก้ไขข้อบกพร่องได้จากหลายที่ใน ASfP ดังนี้

  • Android.bpเป้าหมายการทดสอบ: เปิดไฟล์ Android.bp แล้วคลิก เรียกใช้ในแถบข้างถัดจากโมดูลการทดสอบ (*_test หรือ *_test_host) ดังนี้
    • เรียกใช้: พร้อมใช้งานสำหรับโมดูลทดสอบ Soong ทุกประเภท (android_test, java_test_host, cc_test, rust_test, python_test, sh_test และ android_robolectric_test)
    • แก้ไขข้อบกพร่อง: ใช้ได้กับโมดูล android_test (แนบมากับดีบักเกอร์ Java โดยใช้ atest --wait-for-debugger) และโมดูลทดสอบ C++ หรือ Rust (cc_test, cc_test_host, rust_test และ rust_test_host ซึ่งเปิดตัว ภายใต้ดีบักเกอร์ LLDB ในตัวของ ASfP)
  • ไอคอนแถบด้านข้างของไฟล์ต้นฉบับ: คลิกเรียกใช้ข้างคลาสทดสอบหรือ@Test เมธอดในซอร์สโค้ดเพื่อเรียกใช้หรือแก้ไขข้อบกพร่องของการทดสอบนั้นๆ
  • เมนูตามบริบทคลิกขวา: คลิกขวาที่ไฟล์ทดสอบ คลาส เมธอด หรือ Android.bp โมดูล แล้วเลือกเรียกใช้หรือแก้ไขข้อบกพร่อง
  • เอเจนต์ในตัว (AI ใน Android Studio): ในหน้าต่างเครื่องมือ Agent เอเจนต์ในตัวจะเรียกใช้atestเป้าหมายเพื่อยืนยันการเปลี่ยนแปลงหลังจากแก้ไขโค้ดได้
  • เทอร์มินัลในตัว: เปิดดู > หน้าต่างเครื่องมือ > เทอร์มินัลเพื่อเรียกใช้คำสั่ง atestโดยตรง

การกำหนดค่าและการแก้ไขข้อบกพร่องของการทดสอบอัจฉริยะ

เมื่อเปิดใช้การทดสอบจากแถบด้านข้างหรือเมนูตามบริบท ASfP จะสร้างและ กำหนดค่าการกำหนดค่าการเรียกใช้ Soong Test โดยใช้กราฟโมดูล Android.bp

แก้ไขข้อบกพร่องของเป้าหมาย android_test Java และ Kotlin

คลิกไอคอนแถบข้างที่อยู่ถัดจากandroid_testโมดูลใน Android.bp หรือถัดจาก คลาส JUnit ของ Java หรือ Kotlin หรือเมธอด @Test จากนั้นเลือกแก้ไขข้อบกพร่อง '<TestName>' จากแถบข้างของไฟล์ต้นฉบับ ASfP จะเลือกandroid_testโมดูลที่ใกล้ที่สุดซึ่งมีsrcsรวมไฟล์และตั้งชื่อการกำหนดค่า <module>, <module>:<SimpleClass> หรือ <module>:<SimpleClass>#<method>

ASfP จะเรียกใช้ atest ด้วย --wait-for-debugger อ่านแอตทริบิวต์ package เป้าหมายจาก AndroidManifest.xml ของโมดูล รอให้กระบวนการนั้นทำงานใน อุปกรณ์ที่เชื่อมต่อ และแนบดีบักเกอร์ Java

การแก้ไขข้อบกพร่องของเมธอด android_test จากแถบด้านข้างของเอดิเตอร์

แก้ไขข้อบกพร่องของเป้าหมาย cc_test และ rust_test ภายใต้ LLDB

หากต้องการแก้ไขข้อบกพร่องของโมดูลทดสอบ C++ หรือ Rust (cc_test, cc_test_host, rust_test หรือ rust_test_host) ให้คลิกไอคอน Android.bp ที่กัตเตอร์ แล้วเลือกแก้ไขข้อบกพร่อง '<TestName>' ASfP จะเปิดใช้ไบนารีทดสอบที่คอมไพล์ภายใต้โปรแกรมแก้ไขข้อบกพร่อง LLDB ในตัวแทนที่จะเรียกใช้ผ่าน atest

กำหนดค่าการกำหนดค่าการทดสอบ Soong

เปิดเรียกใช้ > แก้ไขการกำหนดค่า แล้วเลือกการกำหนดค่า Soong Test เพื่อ ปรับแต่งวิธีสร้าง ทดสอบ และเปิดใช้การทดสอบ

  • การเติมข้อความอัตโนมัติของโมดูลและAndroid.bpการนำทาง: ฟิลด์โมดูลจะเติมข้อความอัตโนมัติจากโมดูลทดสอบ Soong ที่จัดทำดัชนีไว้ในโปรเจ็กต์ คลิกไปที่ Android.bp ข้างช่องเพื่อไปยังการประกาศของโมดูลใน Android.bp
  • ทำงานบน: อุปกรณ์หรือโฮสต์ (รวมถึง host_supported: true): ASfP จะประเมินกฎของโมดูลและห่วงโซ่ defaults แบบทรานซิทีฟ (host_supported, device_supported, enabled, target.android.enabled และ target.host.enabled) ดังนี้
    • การทดสอบแบบ 2 เป้าหมาย (cc_test และ rust_test ที่มี host_supported: true): มีปุ่มตัวเลือกทั้งอุปกรณ์และโฮสต์ (ค่าเริ่มต้นคืออุปกรณ์) อุปกรณ์และโฮสต์แต่ละรายการ จะดูแลเทมเพลตโปรแกรมแก้ไขข้อบกพร่อง LLDB ของตนเองแยกกัน การสลับเรียกใช้ ในระหว่างอุปกรณ์กับโฮสต์จะสลับระหว่างการกำหนดค่าอุปกรณ์ระยะไกล lldb-serverกับการกำหนดค่าไบนารีของโฮสต์ในเครื่อง ขณะที่ยังคงการปรับแต่งที่ทำในแต่ละเป้าหมายไว้
    • การทดสอบเป้าหมายเดียว: หากการทดสอบ C++ หรือ Rust สร้างขึ้นสำหรับสภาพแวดล้อมเดียวเท่านั้น (เช่น cc_testเฉพาะอุปกรณ์ หรือcc_test_hostเฉพาะโฮสต์ หรือrust_test_host) ASfP จะเลือกเป้าหมายที่รองรับ และปิดใช้ปุ่มตัวเลือกที่ไม่รองรับพร้อมเคล็ดลับเครื่องมืออธิบายว่า "<module> (<ruleType>) doesn't build for the host or device."
  • งานก่อนการเปิดตัว (สร้างโมดูลทดสอบดั้งเดิมและติดตั้งใช้งานด้วย atest) การกำหนดค่า Soong Test ทุกรายการจะมีงานก่อนการเปิดตัว 2 รายการโดย ค่าเริ่มต้น
    • สร้างโมดูลทดสอบเนทีฟ: สร้าง <module>-target (สำหรับอุปกรณ์) หรือ <module>-host (สำหรับโฮสต์) ก่อนเริ่ม LLDB
    • ติดตั้งใช้งานด้วย atest: เมื่อแก้ไขข้อบกพร่องในอุปกรณ์ จะเรียกใช้ atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi> เพื่อให้ Tradefed พุชการขึ้นต่อกันของการทดสอบและเรียกใช้ Target Preparer ก่อนที่ LLDB จะเปิดใช้ไบนารี วางเคอร์เซอร์เหนือชิปDeploy with atest เพื่อดูตัวอย่างคำสั่ง atest ที่แน่นอน หากต้องการ ทำซ้ำได้เร็วขึ้นเมื่อมีการขึ้นต่อกันในอุปกรณ์อยู่แล้ว ให้นำ Deploy with atest ออกเพื่อให้ ASfP พุชเฉพาะไบนารีทดสอบโดยตรง เมื่อคุณเลือกเรียกใช้ใน: โฮสต์ ASfP จะข้ามติดตั้งใช้งานด้วย การทดสอบโดยอัตโนมัติ
  • แก้ไขตัวเลือกและโปรแกรมแก้ไขข้อบกพร่อง (การ์ดตัวเลือก LLDB): ใช้แก้ไขตัวเลือก เพื่อเพิ่มฟิลด์กำหนดค่าที่ไม่บังคับ
    • อาร์กิวเมนต์ของโปรแกรม (ระบบปฏิบัติการ, การทดสอบ C++ และ Rust เท่านั้น): อาร์กิวเมนต์เพิ่มเติมที่ส่งไปยังไบนารี cc_test หรือ rust_test โดยตรง หลังจากตัวกรอง --gtest_filter หรือ libtest เมื่อทำการแก้ไขข้อบกพร่อง
    • อาร์กิวเมนต์ atest (Test): แฟล็กเพิ่มเติมที่ส่งไปยัง atest เมื่อเรียกใช้การทดสอบหรือเมื่อเตรียมอุปกรณ์ด้วยDeploy with atest
    • โปรแกรมแก้ไขข้อบกพร่อง (การทดสอบ C++ และ Rust เท่านั้น): แสดงเมื่อ โมดูล เป็นเป้าหมาย cc_test* หรือ rust_test* สลับการ์ดตัวเลือก LLDB (เช่น หยุดเมื่อเข้า แคชสัญลักษณ์ในเซสชัน โหลดสัญลักษณ์ตามต้องการ หรือด้วย Visualizer ของ Rust สำหรับการทดสอบ Rust) คลิกรีเซ็ตเป็นค่าเริ่มต้นเพื่อรีเซ็ตเทมเพลตอุปกรณ์หรือโฮสต์ที่ใช้งานอยู่ หรือเพิ่มไดเรกทอรีสัญลักษณ์ คำสั่ง Init, Pre-run, Post-run หรือ Exit และ Launch JSON (การตั้งค่า DAP) จากแก้ไขตัวเลือก > Debugger

การกำหนดค่าการทดสอบ Soong ที่แสดงงานก่อนเปิดตัว เป้าหมายอุปกรณ์หรือโฮสต์ และตัวเลือก LLDB

ดูผลการทดสอบ

ความคืบหน้าในการดำเนินการทดสอบ สถานะผ่านหรือไม่ผ่าน สแต็กเทรซ และบันทึกของอุปกรณ์ จะปรากฏแบบเรียลไทม์ภายในหน้าต่างเครื่องมือเรียกใช้หรือแก้ไขข้อบกพร่องใน ASfP

เคล็ดลับในการทดสอบ

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