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çinname
ö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.