Birden fazla cihazla test yapma

Bu sayfa, test sırasında Trade Federation Test Harness'i birden fazla cihazla kullanmanıza yardımcı olur.Öncelikle uçtan uca örnekte açıklandığı şekilde normal kullanımı öğrenmeniz gerekir.

Birden fazla cihazda ne gibi farklılıklar var?

Trade Federation'da çok cihazlı testleri yapılandırırken ve çalıştırırken özellikle aşağıdakiler farklıdır:

Mevcut tek cihazlı yapılandırmalar çok cihazlı mod için geçerlidir.

<! -- YAPILACAKLAR: İkinci bir cümleye birden fazla cihaz moduyla ilgili tek cihaz kullanım alanı örneği ekleyerek yukarıdaki cümleye hemen açıklık getirin. -->>

Birden fazla cihaz yapılandırması

Bu dokümanda, tipik TF test yapılandırmasına aşina olduğunuz varsayılmaktadır. İki cihazlı tipik bir test yapılandırmasının görünümü aşağıdaki gibidir:

<configuration description="A simple multi-devices example in Tradefed">

    <device name="device1">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <option name="log-level" value="verbose" />
    <test class="com.android.tradefed.HelloWorldMultiDevices" />

    <logger class="com.android.tradefed.log.FileLogger" />
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

</configuration>

Yapıyla ilgili birkaç noktanın belirtilmesi gerekir:

  • Gereken her cihaz için bir <device> beklenir.
  • <build_provider>, <target_preparer>, <device_recovery>, <device_requirements> ve gerekirse <device_options>, <device> etiketine dahil edilmelidir. Aksi takdirde istisna atılır.
  • <device> için name özelliği zorunludur ve yapılandırmada bulunan tüm cihazlar arasında benzersiz olmalıdır. Bu, ilişkili belirli cihaza referans vermek için kullanılır. Bu sayede testiniz belirli bir cihazı hedefleyebilir.
  • <option>, yapılandırma kökündeyken genel kapsama sahip olabilir veya <device> etiketi içinde belirtildiğinde cihaz kapsamıyla sınırlı olabilir.

Tek cihaz yapılandırması için geçerli olan diğer tüm kurallar burada da geçerlidir. Daha fazla bilgi için aşağıdaki Merhaba Dünya örneğine bakın.

Komut satırı güncellemesi

TF komut satırında seçenekleri belirtirken {<device name>} kullanarak cihaz kapsamı da belirtebilirsiniz. Burada <device name>, XML yapılandırmasında belirtilen addır.

Yukarıdaki örnekte aşağıdaki seçeneklere izin verilmiştir:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Aşağıdaki gibi cihaz adını kullanarak cihaz build_provider nesnelerinden yalnızca birini hedefleyebilirsiniz:

--{device2}device-setup:disable

Bu örnekte, device2 cihaz kurulumunu atlarken device1 atlamaz.

TF, cihazları nasıl seçiyor?

Trade Federation, yapılandırmadaki cihaz görünümüne göre device_requirements ile eşleşen bir cihaz (genellikle cihaz çeşidi, ürün vb.) arar. Bir cihaz her ayrıldığında TF bir sonraki cihazı ayırmaya çalışır. Tüm cihazların tahsis edilmesi mümkün değilse tüm cihazlar serbest bırakılır ve tüm cihazlar eşleştirildiğinde komut yeniden denenir.

TF cihazları nasıl hazırlar?

Birden çok cihaz için hazırlık adımı, tek cihazlarla büyük ölçüde aynıdır. Her cihaz, <device> içinde görünme sırasına göre <target_preparer> çağrılarak hazırlanır.

Ayrıca, cihazların eşlenmesi gibi birden fazla cihaz gerektiren hazırlık adımlarını etkinleştiren yapılandırmanın kök dizininde belirtilen <multi_target_preparer> öğesini de kullanabilirsiniz. target_preparer adımı sonrasında çalışır.

Alternatif olarak, target_preparer adımını önce çalıştıran <pre_multi_target_preparer> kullanabilirsiniz.

  • <pre_multi_target_preparer>, bağımsız cihaz kurulumundan önce yapılması gereken kurulum için kullanılmalıdır.
  • <multi_target_preparer>, tek tek cihaz kurulumlarından sonra yapılması gereken kurulumlar için kullanılmalıdır.

Örnek:

1. cihazı flaşla (target_preparer) 2. cihazı flaşla (target_preparer) bluetooth ile iki cihazı da bağla (multi_target_preparer)

Çoklu cihaz testi yazma

Normal bir tek cihaz testi yazarken IDeviceTest arayüzünü uygularsınız.

Testlerin test edilen cihazları alması için IMultiDeviceTest veya IInvocationContextReceiver'ı uygulayabilirsiniz.

IMultiDeviceTest, cihazın IBuildInfo ile doğrudan eşlemesini sağlar. IInvocationContextReceiver ise daha sonra bağlamı (cihaz, IBuildInfo ve meta veriler) eksiksiz olarak sağlar.

Ardından, TF'nin test yazma için kullanıma sunduğu normal ITestDevice API'lerini kullanabilirsiniz.

Henüz bir cihazdan başka bir cihaza işlem yapmak için device1.sync(device2) gibi API'ler mevcut değildir. Desteklenmeye değer bir kullanım alanınız olduğunu düşünüyorsanız gerekçenizi android-platform listesine gönderin.

Çok cihazlı Merhaba Dünya örneği

Hello World benzeri bir örnek yapılandırma ekledik: multi-devices.xml Ayrıca, cihazların listesini ve derlemelerini nasıl alacağınızı gösteren multi_target_preparer uygulama örneği HelloWorldMultiTargetPreparer de mevcuttur.

Aşağıda, aşağıdakileri içeren tam bir örnek verilmiştir:

  • İki cihaz ayırma
  • multi_target_preparer üzerinden her iki cihaza da erişme
  • İki cihazı kullanan bir test çalıştırma

Tradefed'i oluşturduktan sonra TF kabuğunda aşağıdaki komutu kullanabilirsiniz:

run example/multi-devices

Aşağıdakileri içeren bir çıkış göreceksiniz:

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'

Yukarıdakileri çalıştırmak için iki cihazın bağlı olması gerekir. Bu, şuradan kontrol edilebilir: adb devices

Çağırma işlemi devam ederken list i ve list d ile tek cihazlar gibi izleyebilirsiniz:

tf >list i
Command Id  Exec Time  Device                          State
1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
tf >list d
Serial            State      Product   Variant   Build   Battery
00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
LP5A390056        Allocated  shamu     shamu     NRD90I  100

Her çağrıya dahil olan cihazları, kullanılabilir tüm cihazları ve bu cihazların ilgili durumlarını görebilirsiniz.

Bu örnekte, device1 ve device2 yapılandırmasındaki iki cihazı adlandırdık. Gerçekten ayarlanmasını beklediğiniz cihaz türüne bağlı olarak mümkünse daha açıklayıcı bir ad vermeniz gerekir.