Otomatik test altyapısı

Android 9, AOSP genel sistem imajını (GSI) çalıştıran iş ortağı cihazlarında VTS, CTS veya diğer testlerin otomatik olarak test edilmesi için bir Tedarikçi Test Paketi (VTS) altyapısı içerir. Daha önce bu testleri çalıştırmak oldukça manuel bir işlemdi. Yeni VTS test altyapısı, birden fazla cihazda günde birden çok kez otomatik testi desteklemek için tasarlanmıştır.

Mimari

VTS otomatik test altyapısı aşağıdaki mimariyi kullanır:

Otomatik test mimarisi

Şekil 1. VTS otomatik test altyapısı mimarisi

Bir test tetiklendiğinde VTS otomatik test altyapısı aşağıdaki görevleri gerçekleştirir:

  1. Derleme yapılarını ve test kaynaklarını farklı konumlardan getirir:
    • İş Ortağı Android Derlemesi (PAB). GSI, VTS için ve diğer derlemeleri içerir.
    • Yerel dosya sistemi, Google Cloud Storage veya tedarikçi firmaya özgü diğer uygulamalar derleme sistemidir. Google'ın kendi derlemelerini Google'ın teşekkür ederiz.
  2. Derleme yapıları (cihazdan) ve GSI'yı (AOSP'den) bağlı cihazlar.
  3. Bulutta yerel TradeFed veya bir TradeFed kullanarak VTS testleri çalıştırır.
  4. Test sonuçlarını VTS kontrol paneline bildirir

Bu süreç, laboratuvardaki ve test altındaki tüm bağlı cihazların davranışını yöneten bir makine olan VTS ana makine denetleyicisi (HC) tarafından koordine edilir. HC, en son derlemeleri getirme, cihazlara yükleme ve testleri çağırma (yerel olarak veya komutan aracılığıyla) işlemlerinden sorumludur. Ayrıca kullanıcıların ve planlayıcı ile planlayıcı arasındaki trafiği yönlendirir ve bu da Yardım Merkezi'nde çalışan TradeFed örneği (veya başka bir donanım). Düzenleyen denetleyici hakkında ayrıntılı bilgi için Düzenleyen Denetleyici Mimarisi başlıklı makaleyi inceleyin.

Kaynak sağlayıcılar

Otomatik test için sistem derlemeleri, test dosyaları ve VTS yapıları. Bunları kaynaktan oluşturmak mümkün olsa da bunları düzenli olarak ağacın tepesinden oluşturmak ve ardından yapıları indirmek için yayınlamak daha kolaydır.

İş ortakları, aşağıdaki konumları kullanarak otomasyon kaynaklarına erişebilir:

  • İş Ortağı Android Derlemesi. Şunda programatik erişim verildi: hesap bazında hesaplanır.
  • Yerel dosya sistemi (veya benzeri). Bunu yapmayan iş ortakları için: İş Ortağı Android Derlemesi'ni kullanın.

Cihazları daha sonra flaşlamada kullanmak için kaynaklar, her iki seçenek için de derleme sağlayıcıları içerir. Bu sağlayıcılar, derlemeleri yerel geçici dizinlerde depolayan tek bir build_provider.py'ten genişler.

İş Ortağı Android Derlemesi

Android 8.1 ve önceki sürümlerde, Android iş ortaklarının İş Ortağı Android Derleme web sitesini (https://partner.android.com/build) ziyaret etmesi, hesaplarına gitmesi ve kullanıcı arayüzü üzerinden en son sistem resimlerini getirmesi gerekiyordu. İş ortaklarının bu yavaş ve zahmetli süreçten kaçınmasına yardımcı olmak için Android 9, uygun kimlik bilgileri sağlandığında bu kaynakları PAB'den otomatik olarak indirme desteği içerir.

Erişim sağlayın

Programatik erişim, gerekli UPÇ'lere erişmek için Google API'lerinde OAuth2'yi kullanır. Her bir standart yaklaşımında OAuth2 kimlik bilgilerinin oluşturulması için iş ortağının bir web sitesi istemci kimliği/gizli anahtarı çiftiyle ilişkilendirin. PartnerAndroidBuildClient, ilk e-posta adresi için bu gizli anahtara yönlendirildi. kullanıcının Google Rehber'e giriş yapması için bir tarayıcı penceresi hesabı oluşturun. Kimlik bilgileri (erişim jetonu ve yenileme jetonu) yerel olarak depolanır. Bu nedenle, iş ortaklarının yalnızca bir kez giriş yapması gerekir.

URL için POST isteği

PAB'deki bir kaynak bağlantısını tıkladığınızda, söz konusu kaynak için gerekli verileri içeren bir POST isteği gönderilir. Bu veriler şunlardır:

  • derleme kimliği, derleme hedefi
  • kaynak adı
  • dal
  • sürüm adayı adı ve adayın dahili bir derleme olup olmadığı

POST isteği, buildsvc RPC'nin downloadBuildArtifact yöntemi tarafından alınır. Bu yöntem, kaynağa erişmek için kullanılabilecek bir URL döndürür.

  • Clockwork Companion APK kaynakları için URL, PAB'de barındırılan okunabilir bir URL'dir (bu URL, kimlik doğrulama korumalıdır ve uygun OAuth2 kimlik bilgileriyle erişilebilir).
  • Diğer kaynaklar için URL, dahili Android Build API'den gelen uzun, korunmayan URL'dir (süresi beş dakika sonra dolar).

URL'yi al

Siteler arası istek sahtekarlığını önlemek için buildsvc TBG'si, XSRF jetonu, diğer parametrelerle birlikte POSTA oluşturulacaktır. Bu jeton daha güvenli hale getirse de, görüntülü reklamcılık jeton (yalnızca PAB sayfasının JavaScript'inde bulunur) gereklidir.

Android 9, bu sorunu önlemek için URL'yi yeniden tasarlar tüm dosyalar (yalnızca APK'lar değil) için tahmin edilebilir URL adları kullanmak üzere yapı listelerine ve yapı URL'lerine erişir. PAB artık kullanışlı bir URL kullanıyor iş ortaklarının kaynakları indirmesini sağlayan bir biçim; Yardım Merkezi komut dosyaları indirebilir URL biçimi bilindiği için bu APK'ları kolayca kullanabilir ve HC buildsvc RPC'sine ihtiyaç duymadığından XSRF/çerez sorunları.

Yerel dosya sistemi

Yapıların listesini (veya zip dosyasını) içeren bir dizin verildiğinde derleme sağlayıcı dizindeki içeriğe göre alakalı resimleri belirler. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için gsutil aracını kullanın.

Flash derlemeleri

En son cihaz resimleri ana makineye indirildikten sonra bu resimler cihazlara yüklenmelidir. Bu işlem, derleme sağlayıcıları tarafından saklanan geçici dosya yollarına göre standart adb ve fastboot komutları ile Python alt süreçleri kullanılarak yapılır.

Desteklenen işlemler:

  • Yalnızca GSI'yı yanıp söndürme
  • Ana sistemden tek tek resimleri yanıp sönen görüntüler (ör. fastboot flash boot boot.img)
  • Tüm görüntüleri ana sistemden flaşlama. Örnek:
    • fastboot flashall (yerleşik flashall kullanarak) yardımcı program)
    • fastboot flash (birer birer)

Test çalıştırma

Android 9'da VTS otomatik test altyapısı yalnızca TradeFed test donanımını destekler ancak gelecekte diğer donanımları da desteklemek için genişletilebilir.

Cihazlar hazırlandıktan sonra aşağıdaki seçeneklerden birini kullanarak testleri çağırabilirsiniz:

  • TradeFed'i yerel olarak kullanırken ana makine kontrol cihazında test komutunu kullanın. Bu komut, bir VTS test planının adını alır (ör. vts-selftest) ve testi çalıştırır.
  • TradeFed kümesi (isteğe bağlı olarak MTT'ye bağlı) kullanırken, ana makine denetleyicisi konsolunda lease komutunu kullanarak tamamlanmamış test çalıştırmalarını arayın.

TradeFedCluster kullanılıyorsa TradeFed yerel olarak uzaktan yönetici olarak çalışır. Aksi takdirde, testler Python alt işlemleri kullanılarak çağrılır.

Sonuçları raporlama

Test sonuçları, tarafından bazı VTS kontrol paneli projelerine otomatik olarak bildirilir. VtsMultiDeviceTest