Birden fazla cihazla test çalıştırma

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 birden fazla cihazla ilgili 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.

<! -- TODO: İkinci bir cümlede çok cihazlı modla ilgili olarak tek cihazlı bir kullanım alanı örneği ekleyerek hemen yukarıdaki cümleyi açıklayın. -->>

Birden fazla cihaz yapılandırması

Bu dokümanda, tipik TF test yapılandırmasına aşina olduğunuz varsayılmaktadır. İki cihaz içeren tipik bir test yapılandırması 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ç noktayı belirtmek gerekir:

  • Gerekli olan her cihaz için bir <device> gerekir.
  • <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ırmadaki 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 cihazlı yapılandırma 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çenekler belirtilirken {<device name>} kullanılarak cihaz kapsamı da belirtilebilir. 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

Cihaz adını kullanarak cihaz build_provider nesnelerinden yalnızca birini hedefleyebilirsiniz. Örneğin:

--{device2}device-setup:disable

Bu örnekte, device2 cihaz kurulumunu atlarken device1 atlamaz.

TF cihazları nasıl seçer?

Trade Federation, yapılandırmaya göre cihaz görünümüne göre device_requirements ile eşleşen bir cihaz (genellikle cihaz çeşidi, ürün vb.) arar. Her cihaz atandığında TF bir sonraki cihazı atamaya çalışır. Tüm cihazların atanması mümkün değilse tüm cihazlar serbest bırakılır ve tüm cihazlar eşleştiğinde komut tekrar denenir.

TF cihazları nasıl hazırlar?

Birden fazla cihaz için hazırlık adımı, çoğunlukla tek cihaz için olanla 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, yapılandırmanın kökünde belirtilen <multi_target_preparer> değerini de kullanabilirsiniz. Bu değer, cihaz eşleme gibi birden fazla cihaz gerektiren hazırlık adımlarını etkinleştirir. 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>, cihazların tek tek ayarlanmasından önce yapılması gereken kurulum için kullanılmalıdır.
  • <multi_target_preparer>, cihazların tek tek ayarlanması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 cihazlı test 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 bir multi_target_preparer uygulama örneği HelloWorldMultiTargetPreparer bulunmaktadır.

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örürsünüz:

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 durum ş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ıda yer alan cihazların yanı sıra mevcut tüm cihazları ve ilgili durumlarını görebilirsiniz.

Bu örnekte yapılandırmadaki iki cihazı device1 ve device2 olarak adlandırdığımızı unutmayın. Ayarlanmasını beklediğiniz cihaz türüne bağlı olarak mümkünse daha açıklayıcı bir ad vermeniz gerekir.