Platform kodunu atest ile test etme

Platform için Android Studio (ASfP), atest ve Soong test modülleriyle entegre olur. Böylece, IDE'den Linux ana makinenizde, bağlı cihazınızda veya Cuttlefish sanal cihazınızda platform testlerini çalıştırıp hatalarını ayıklayabilirsiniz.

Ön koşullar

  • AOSP ödemeniz ve lunch hedefinizle yapılandırılmış bir ASfP projesi açın.
  • Cihaz testleri için fiziksel bir cihaz bağlayın veya eşleşen bir derlemenin çalıştığı bir Cuttlefish sanal cihazı başlatın.

Testleri çalıştırma ve hatalarını ayıklama

ASfP'de platform testlerini ve hata ayıklama oturumlarını birkaç yerden başlatabilirsiniz:

  • Android.bp test hedefleri: Bir Android.bp dosyasını açın ve herhangi bir test modülünün (*_test veya *_test_host) yanındaki olukta Çalıştır'ı tıklayın:
    • Çalıştır: Tüm Soong test modülü türlerinde (android_test, java_test_host, cc_test, rust_test, python_test, sh_test ve android_robolectric_test) kullanılabilir.
    • Hata ayıklama: android_test modülleri (atest --wait-for-debugger kullanılarak Java hata ayıklayıcı ile eklenmiş) ve C++ veya Rust test modülleri (cc_test, cc_test_host, rust_test ve rust_test_host, ASfP'nin yerleşik LLDB hata ayıklayıcısı altında başlatılmış) için kullanılabilir.
  • Kaynak dosya oluğu simgeleri: Belirli bir testi çalıştırmak veya hata ayıklamak için kaynak kodunuzdaki bir test sınıfının ya da @Test yönteminin yanındaki Çalıştır'ı tıklayın.
  • Sağ tıklama bağlam menüsü: Bir test dosyasını, sınıfı, yöntemi veya Android.bp modülünü sağ tıklayın ve Çalıştır ya da Hata ayıklama'yı seçin.
  • Yerleşik Yapay Zeka Aracı (Android Studio'da Yapay Zeka): Yapay Zeka Aracı araç penceresinde, Yerleşik Yapay Zeka Aracı, kodu düzenledikten sonra değişiklikleri doğrulamak için atest hedeflerini çalıştırabilir.
  • Entegre terminal: View > Tool Windows > Terminal'i (Görünüm > Araç Pencereleri > Terminal) açarak atest komutlarını doğrudan çalıştırın.

Akıllı test yapılandırması ve hata ayıklama

Bir testi oluktan veya bağlam menüsünden başlattığınızda ASfP, Android.bp modül grafiğinizi kullanarak bir Soong Testi çalıştırma yapılandırması oluşturur ve yapılandırır.

android_test Java ve Kotlin hedeflerinde hata ayıklama

Android.bp içinde bir android_test modülünün veya bir Java ya da Kotlin JUnit sınıfının ya da @Test yönteminin yanındaki oluk simgesini tıklayın ve Debug '<TestName>' seçeneğini belirleyin. ASfP, bir kaynak dosyası oluğundan, srcs dosyayı içeren ve yapılandırmaya <module>, <module>:<SimpleClass> veya <module>:<SimpleClass>#<method> adını veren en yakın kapsayan android_test modülünü seçer.

ASfP, atest ile --wait-for-debugger'yi çalıştırır, hedef package özelliğini modülün AndroidManifest.xml'sinden okur, bağlı cihazda bu işlemin tamamlanmasını bekler ve Java hata ayıklayıcısını ekler.

android_test yönteminde hata ayıklama

LLDB altında cc_test ve rust_test hedeflerinde hata ayıklama

Bir C++ veya Rust test modülünde (cc_test, cc_test_host, rust_test veya rust_test_host) hata ayıklamak için Android.bp oluk simgesini tıklayın ve Debug '<TestName>' seçeneğini belirleyin. ASfP, derlenmiş test ikilisini atest üzerinden çalıştırmak yerine yerleşik LLDB hata ayıklayıcısı altında başlatır.

Soong Test çalıştırma yapılandırmasını ayarlama

Run > Edit Configurations'ı (Çalıştır > Yapılandırmaları Düzenle) açın ve testlerin nasıl oluşturulacağını, dağıtılacağını ve başlatılacağını özelleştirmek için bir Soong Test yapılandırması seçin:

  • Modül otomatik tamamlama ve Android.bp gezinme: Modül alanı, projenizdeki dizine eklenmiş Soong test modüllerinden otomatik olarak tamamlanır. Android.bp içindeki modülün bildirimine gitmek için alanın yanındaki Go to Android.bp'yi tıklayın.
  • Çalışma alanı: Cihaz veya ana makine (host_supported: true dahil): ASfP, modül kuralını ve geçişli defaults zincirini (host_supported, device_supported, enabled, target.android.enabled ve target.host.enabled) değerlendirir:
    • Çift hedefli testler (cc_test ve rust_test ile host_supported: true): Hem Cihaz hem de Ana Makine radyo düğmeleri kullanılabilir (varsayılan olarak Cihaz seçilidir). Cihaz ve Ana Makine, her biri kendi bağımsız LLDB hata ayıklayıcı şablonunu korur. Run on'u Device ve Host arasında değiştirerek her hedefte yapılan özelleştirmeleri korurken uzak cihaz lldb-server yapılandırması ile yerel ana makine ikili yapılandırması arasında geçiş yapabilirsiniz.
    • Tek hedefli testler: Bir C++ veya Rust testi yalnızca bir ortam için oluşturuluyorsa (ör. yalnızca cihaz cc_test veya yalnızca ana makine cc_test_host ya da rust_test_host), ASfP desteklenen hedefi seçer ve desteklenmeyen radyo düğmesini açıklayıcı bir ipucuyla devre dışı bırakır: "<module> (<ruleType>) doesn't build for the host or device."
  • Lansman öncesi görevler (Yerel Test Modülü Oluşturma ve atest ile Dağıtma): Her Soong Test yapılandırması varsayılan olarak iki Lansman öncesi görev içerir:
    • Yerel Test Modülü Oluşturma: LLDB'yi başlatmadan önce <module>-target (Cihaz için) veya <module>-host (Ana Makine için) oluşturur.
    • atest ile dağıtma: Cihaz'da hata ayıklama yapılırken atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi> çalıştırılır. Böylece Tradefed, test bağımlılıklarını gönderir ve LLDB ikiliyi başlatmadan önce hedef hazırlayıcıları yürütür. Tam atest komutunu önizlemek için işaretçiyi Deploy with atest çipinin üzerine getirin. Bağımlılıklar cihazda bulunduktan sonra daha hızlı yineleme için Deploy with atest'i kaldırın. Böylece ASfP, yalnızca test ikilisini doğrudan gönderir. Şu cihazda çalıştır: Ana makine'yi seçtiğinizde ASfP, En son sürümle dağıt'ı otomatik olarak atlar.
  • Seçenekleri değiştirme ve hata ayıklayıcı (LLDB seçenekleri kartları): İsteğe bağlı yapılandırma alanları eklemek için Seçenekleri değiştir'i kullanın:
    • Program bağımsız değişkenleri (yalnızca işletim sistemi, C++ ve Rust testleri): Hata ayıklama sırasında --gtest_filter veya libtest filtresinden sonra doğrudan cc_test veya rust_test ikilisine iletilen ek bağımsız değişkenler.
    • atest bağımsız değişkenleri (Test): Test çalıştırılırken veya atest ile dağıt kullanılarak cihaz hazırlanırken atest'e iletilen ek işaretler.
    • Hata ayıklayıcı (yalnızca C++ ve Rust testleri): Modül, cc_test* veya rust_test* hedefi olduğunda gösterilir. LLDB seçenekleri kartlarını (ör. Rust testleri için Girişte durdur, Oturumlar arasında sembolleri önbelleğe al, Sembolleri isteğe bağlı olarak yükle veya Rust görselleştiricileriyle) değiştirin, etkin Cihaz veya Ana Makine şablonunu sıfırlamak için Varsayılanlara sıfırla'yı tıklayın ya da Seçenekleri değiştir > Hata ayıklayıcı'dan Sembol dizinleri, Başlatma, Ön çalıştırma, Çalıştırma sonrası veya Çıkış komutları ve Başlatma JSON'u'nu (DAP Ayarları) ekleyin.

Soong Test çalıştırma yapılandırmasında lansman öncesi görevler, cihaz veya ana makine hedefleri ve LLDB seçenekleri gösteriliyor

Test sonuçlarını görüntüleme

Test yürütme ilerleme durumu, başarılı veya başarısız durumu, yığın izleri ve cihaz günlükleri, ASfP'deki Çalıştır veya Hata Ayıkla araç penceresinde anlık olarak gösterilir.

Testle ilgili ipuçları

  • Hedeflenen testler çalıştırma: Bir test paketinin tamamını çalıştırmadan düzenleyici oluğundaki yöntemleri tek tek test edin.
  • Cuttlefish anlık görüntülerini kullanma: Cuttlefish sanal cihazlarında cihaz testleri çalıştırırken çalıştırmalar arasında temiz bir cihaz durumu geri yüklemek için anlık görüntüleri kullanın.
  • Soong derleme günlüklerini inceleyin: Bir test çalıştırılmadan önce derlenemezse derleyici teşhisleri için Soong araç penceresini kontrol edin.