Birden fazla cihazla test çalıştırma

Bu sayfa, test sırasında Ticaret Federasyonu Test Harness'ını birden fazla cihazla kullanmanıza yardımcı olur.Öncelikle uçtan uca örnekte açıklandığı gibi normal kullanımla ilgili bilgi edinmeniz gerekir.

Birden fazla cihaz kullanırken ne gibi farklılıklar olur?

Trade Federation'da çok cihazlı testler yapılandırılırken ve çalıştırılırken özellikle aşağıdaki noktalarda farklılıklar vardır:

Mevcut tek cihaz yapılandırmaları, çok cihazlı modda geçerlidir.

<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>

Birden fazla cihaz yapılandırması

Bu belgede, normal TF testi yapılandırmasına zaten aşina olduğunuz varsayılmaktadır. İki cihazla yapılan tipik bir test yapılandırması şu şekilde görünür:

<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ı hakkında belirtilmesi gereken birkaç nokta vardır:

  • Gerekli her cihaz için <device> beklenir.
  • Gerekirse <build_provider>, <target_preparer>, <device_recovery>, <device_requirements> ve <device_options> öğeleri <device> etiketi içine eklenmelidir. Aksi takdirde istisna oluşturulur.
  • <device> için name özelliği zorunludur ve yapılandırmada bulunan tüm cihazlar arasında benzersiz olmalıdır. Bu tanımlayıcı, kendisiyle ilişkili cihaza referans vermek için kullanılır. Bu sayede testiniz belirli bir cihazı hedefleyebilir.
  • <option>, yapılandırmanın kök dizininde olduğunda genel bir 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çerliliğini korur. 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 bir 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

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

--{device2}device-setup:disable

Bu örnekte, device2 cihaz kurulumunu atlıyor ancak device1 atlamıyor.

TF, cihazları nasıl seçer?

Ticaret Federasyonu, yapılandırmada cihazın görünme sırasına göre device_requirements ile eşleşen bir cihaz arar (genellikle cihaz türü, ürün vb.). Her cihaz ayrıldığında TF, bir sonraki cihazı ayırmaya çalışır. Tüm cihazları ayırmak 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 fazla cihaz için hazırlık adımı, tek cihazlar için hazırlık adımıyla büyük ölçüde aynıdır. Her cihaz, <target_preparer> çağrılarak <device> içinde görünme sırasına göre hazırlanır.

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

Alternatif olarak, target_preparer adımından önce çalışan <pre_multi_target_preparer> kullanabilirsiniz.

  • <pre_multi_target_preparer>, bireysel cihaz kurulumundan önce yapılması <pre_multi_target_preparer> 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.

Örneğin:

flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)

Çoklu cihaz testi yazma

Normal 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 size tam bağlamı (cihaz, IBuildInfo ve meta veriler) verir.

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

Henüz bir cihazdan diğerine işlem yapmaya yarayan API'ler yoktur. Örneğin:device1.sync(device2) Desteklenmesi gereken zorlayıcı 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 uygulaması örneği de var: HelloWorldMultiTargetPreparer.

Bu örnekte şunlar yer almaktadır:

  • İki cihaz ayırma
  • Her iki cihaza da multi_target_preparer üzerinden erişme
  • İki cihazı da 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örmeniz gerekir:

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 şu yollarla 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ğırmaya dahil olan cihazları ve mevcut tüm cihazları ve bunların durumlarını görebilirsiniz.

Bu örnekte yapılandırmadaki iki cihaza device1 ve device2 adını verdiğimizi unutmayın. Mümkünse gerçekten ayarlanmasını beklediğiniz cihazın türüne bağlı olarak daha açıklayıcı bir ad vermelisiniz.