Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memperluas lingkungan pengujian khusus di Device Farm
Mode Kustom Device Farm memungkinkan Anda menjalankan lebih dari sekedar rangkaian pengujian Anda. Di bagian ini, Anda mempelajari cara memperluas rangkaian pengujian dan mengoptimalkan pengujian Anda.
Mengatur PIN
Beberapa aplikasi mengharuskan Anda mengatur PIN pada perangkat. Device Farm tidak mendukung pengaturan PIN pada perangkat secara native. Namun, ini dimungkinkan dengan peringatan berikut:
-
Perangkat harus menjalankan Android 8 atau lebih tinggi.
-
PIN harus dilepas setelah tes selesai.
Untuk mengatur PIN dalam pengujian Anda, gunakanpre_test
danpost_test
fase untuk mengatur dan menghapus PIN, seperti yang ditunjukkan berikut:
phases: pre_test: - # ... among your pre_test commands - DEVICE_PIN_CODE="1234" - adb shell locksettings set-pin "$DEVICE_PIN_CODE" post_test: - # ... Among your post_test commands - adb shell locksettings clear --old "$DEVICE_PIN_CODE"
Saat rangkaian pengujian Anda dimulai, PIN 1234 disetel. Setelah rangkaian pengujian Anda keluar, PIN akan dihapus.
Awas
Jika Anda tidak menghapus PIN dari perangkat setelah pengujian selesai, perangkat dan akun Anda akan dikarantina.
Mempercepat tes berbasis Appium melalui kemampuan yang diinginkan
Saat menggunakan Appium, Anda mungkin menemukan bahwa rangkaian pengujian mode standar sangat lambat. Ini karena Device Farm menerapkan pengaturan default dan tidak membuat asumsi tentang bagaimana Anda ingin menggunakan lingkungan Appium. Meskipun default ini dibangun di sekitar praktik terbaik industri, mereka mungkin tidak berlaku untuk situasi Anda. Untuk menyempurnakan parameter server Appium, Anda dapat menyesuaikan kemampuan Appium default dalam spesifikasi pengujian Anda. Misalnya, berikut ini menetapkanusePrebuildWDA
kemampuan untuktrue
dalam rangkaian pengujian iOS untuk mempercepat waktu mulai awal:
phases: pre_test: - # ... Start up Appium - >- appium --log-timestamp --default-capabilities "{\"usePrebuiltWDA\": true, \"derivedDataPath\":\"$DEVICEFARM_WDA_DERIVED_DATA_PATH\", \"deviceName\": \"$DEVICEFARM_DEVICE_NAME\", \"platformName\":\"$DEVICEFARM_DEVICE_PLATFORM_NAME\", \"app\":\"$DEVICEFARM_APP_PATH\", \"automationName\":\"XCUITest\", \"udid\":\"$DEVICEFARM_DEVICE_UDID_FOR_APPIUM\", \"platformVersion\":\"$DEVICEFARM_DEVICE_OS_VERSION\"}" >> $DEVICEFARM_LOG_DIR/appiumlog.txt 2>&1 &
Kemampuan Appium harus berupa struktur JSON yang dikutip dari cangkang.
Kemampuan Appium berikut adalah sumber umum peningkatan kinerja:
noReset
danfullReset
-
Kedua kemampuan ini, yang saling eksklusif, menggambarkan perilaku Appium setelah setiap sesi selesai. Kapan
noReset
diatur ketrue
, server Appium tidak menghapus data dari aplikasi Anda ketika sesi Appium berakhir, secara efektif tidak melakukan pembersihan apa pun.fullReset
menghapus instalasi dan menghapus semua data aplikasi dari perangkat setelah sesi ditutup. Untuk informasi lebih lanjut, lihatAtur Ulang Strategidalam dokumentasi Appium. ignoreUnimportantViews
(Hanya Android)-
Menginstruksikan Appium untuk mengompres hierarki UI Android hanya kerelevantampilan untuk pengujian, mempercepat pencarian elemen tertentu. Namun, ini dapat merusak beberapa rangkaian pengujian berbasis XPath karena hierarki tata letak UI telah diubah.
skipUnlock
(Hanya Android)-
Menginformasikan Appium bahwa tidak ada kode PIN yang saat ini disetel, yang mempercepat pengujian setelah peristiwa layar mati atau peristiwa kunci lainnya.
webDriverAgentUrl
(Hanya iOS)-
Menginstruksikan Appium untuk menganggap bahwa ketergantungan iOS yang penting,
webDriverAgent
, sudah berjalan dan tersedia untuk menerima permintaan HTTP di URL yang ditentukan. JikawebDriverAgent
belum aktif dan berjalan, Appium membutuhkan waktu beberapa saat di awal rangkaian pengujian untuk memulaiwebDriverAgent
. Jika Anda mulaiwebDriverAgent
dirimu sendiri dan tetapkanwebDriverAgentUrl
kepadahttp://localhost:8100
saat memulai Appium, Anda dapat mem-boot suite pengujian Anda lebih cepat. Perhatikan bahwa kemampuan ini tidak boleh digunakan bersamauseNewWDA
kemampuan.Anda dapat menggunakan kode berikut untuk memulai
webDriverAgent
dari file spesifikasi pengujian Anda di port lokal perangkat8100
, lalu teruskan ke port lokal host uji8100
(ini memungkinkan Anda untuk mengaturwebDriverAgentUrl
nilai untukhttp://localhost:8100
). Kode ini harus dijalankan selama fase instalasi setelah kode apa pun untuk menyiapkan Appium danwebDriverAgent
variabel lingkungan telah didefinisikan:# Start WebDriverAgent and iProxy - >- xcodebuild test-without-building -project /usr/local/avm/versions/$APPIUM_VERSION/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -derivedDataPath $DEVICEFARM_WDA_DERIVED_DATA_PATH -destination id=$DEVICEFARM_DEVICE_UDID_FOR_APPIUM IPHONEOS_DEPLOYMENT_TARGET=$DEVICEFARM_DEVICE_OS_VERSION GCC_TREAT_WARNINGS_AS_ERRORS=0 COMPILER_INDEX_STORE_ENABLE=NO >> $DEVICEFARM_LOG_DIR/webdriveragent_log.txt 2>&1 & iproxy 8100 8100 >> $DEVICEFARM_LOG_DIR/iproxy_log.txt 2>&1 &
Kemudian, Anda dapat menambahkan kode berikut ke file spesifikasi pengujian Anda untuk memastikannya
webDriverAgent
Dimulai dengan sukses. Kode ini harus dijalankan pada akhir fase pra-pengujian setelah memastikan bahwa Appium berhasil dimulai:# Wait for WebDriverAgent to start - >- start_wda_timeout=0; while [ true ]; do if [ $start_wda_timeout -gt 60 ]; then echo "WebDriverAgent server never started in 60 seconds."; exit 1; fi; grep -i "ServerURLHere" $DEVICEFARM_LOG_DIR/webdriveragent_log.txt >> /dev/null 2>&1; if [ $? -eq 0 ]; then echo "WebDriverAgent REST http interface listener started"; break; else echo "Waiting for WebDriverAgent server to start. Sleeping for 1 seconds"; sleep 1; start_wda_timeout=$((start_wda_timeout+1)); fi; done;
Untuk informasi selengkapnya tentang kemampuan yang didukung Appium, lihatKemampuan yang Diinginkan Appium
Menggunakan Webhook dan API lainnya setelah pengujian Anda dijalankan
Anda dapat meminta Device Farm memanggil webhook setelah setiap rangkaian pengujian selesai menggunakancurl. Proses untuk melakukan ini bervariasi dengan tujuan dan pemformatan. Untuk webhook spesifik Anda, lihat dokumentasi untuk webhook tersebut. Contoh berikut memposting pesan setiap kali rangkaian pengujian selesai ke webhook Slack:
phases: post_test: - curl -X POST -H 'Content-type: application/json' --data '{"text":"Tests on '$DEVICEFARM_DEVICE_NAME' have finished!"}'
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Untuk informasi selengkapnya tentang penggunaan webhook dengan Slack, lihatMengirim pesan Slack pertama Anda menggunakan Webhook
Anda tidak terbatas pada penggunaancurluntuk memanggil webhooks. Paket pengujian dapat menyertakan skrip dan alat tambahan, asalkan kompatibel dengan lingkungan eksekusi Device Farm. Misalnya, paket pengujian Anda mungkin menyertakan skrip tambahan yang membuat permintaan ke API lain. Pastikan bahwa setiap paket yang diperlukan diinstal bersamaan dengan persyaratan suite pengujian Anda. Untuk menambahkan skrip yang berjalan setelah rangkaian pengujian Anda selesai, sertakan skrip dalam paket pengujian Anda dan tambahkan yang berikut ini ke spesifikasi pengujian Anda:
phases: post_test: -
python post_test.py
catatan
Mempertahankan kunci API atau token otentikasi lain yang digunakan dalam paket pengujian Anda adalah tanggung jawab Anda. Kami menyarankan agar Anda menyimpan segala bentuk kredensi keamanan di luar kendali sumber, menggunakan kredensi dengan hak istimewa sesedikit mungkin, dan menggunakan token yang dapat diulang dan berumur pendek bila memungkinkan. Untuk memverifikasi persyaratan keamanan, lihat dokumentasi untuk API pihak ketiga yang Anda gunakan.
Jika Anda berencana menggunakanAWSlayanan sebagai bagian dari rangkaian eksekusi pengujian Anda, Anda harus menggunakan kredensi sementara IAM, yang dihasilkan di luar rangkaian pengujian Anda dan disertakan dalam paket pengujian Anda. Kredensi ini harus memiliki izin paling sedikit yang diberikan dan umur sesingkat mungkin. Untuk informasi selengkapnya tentang membuat kredensil sementara, lihatMeminta kredensil keamanan sementaradiPanduan Pengguna IAM.
Menambahkan file tambahan ke paket pengujian Anda
Anda mungkin ingin menggunakan file tambahan sebagai bagian dari pengujian Anda baik sebagai file konfigurasi tambahan atau data pengujian tambahan. Anda dapat menambahkan file tambahan ini ke paket pengujian Anda sebelum mengunggahnyaAWS Device Farm, lalu mengaksesnya dari mode lingkungan khusus. Pada dasarnya, semua format unggahan paket uji (ZIP, IPA, APK, JAR, dll.) Adalah format arsip paket yang mendukung operasi ZIP standar.
Anda dapat menambahkan file ke arsip pengujian sebelum mengunggahnyaAWS Device Farmdengan menggunakan perintah berikut:
$ zip zip-with-dependencies.zip extra_file
Untuk direktori file tambahan:
$ zip -r zip-with-dependencies.zip extra_files/
Perintah ini berfungsi seperti yang diharapkan untuk semua format unggahan paket pengujian kecuali untuk file IPA. Untuk file IPA, terutama bila digunakan dengan XCUITests, kami sarankan Anda meletakkan file tambahan di lokasi yang sedikit berbeda karena caranyaAWS Device Farmmengundurkan diri dari paket uji iOS. Saat membuat pengujian iOS Anda, direktori aplikasi pengujian akan berada di dalam direktori lain bernamaMuatan
.
Misalnya, ini adalah bagaimana satu direktori pengujian iOS seperti itu terlihat:
$ tree . └── Payload └── ADFiOSReferenceAppUITests-Runner.app ├── ADFiOSReferenceAppUITests-Runner ├── Frameworks │ ├── XCTAutomationSupport.framework │ │ ├── Info.plist │ │ ├── XCTAutomationSupport │ │ ├── _CodeSignature │ │ │ └── CodeResources │ │ └── version.plist │ └── XCTest.framework │ ├── Info.plist │ ├── XCTest │ ├── _CodeSignature │ │ └── CodeResources │ ├── en.lproj │ │ └── InfoPlist.strings │ └── version.plist ├── Info.plist ├── PkgInfo ├── PlugIns │ ├── ADFiOSReferenceAppUITests.xctest │ │ ├── ADFiOSReferenceAppUITests │ │ ├── Info.plist │ │ └── _CodeSignature │ │ └── CodeResources │ └── ADFiOSReferenceAppUITests.xctest.dSYM │ └── Contents │ ├── Info.plist │ └── Resources │ └── DWARF │ └── ADFiOSReferenceAppUITests ├── _CodeSignature │ └── CodeResources └── embedded.mobileprovision
Untuk paket XCUITest ini, tambahkan file tambahan apa pun ke direktori yang diakhiri.aplikasi
di dalamMuatan
direktori. Misalnya, perintah berikut menunjukkan bagaimana Anda dapat menambahkan file ke paket pengujian ini:
$ mv extra_file Payload/*.app/ $ zip -r my_xcui_tests.ipa Payload/
Saat Anda menambahkan file ke paket pengujian, Anda dapat mengharapkan perilaku interaksi yang sedikit berbedaAWS Device Farmberdasarkan format unggahannya. Jika unggahan menggunakan ekstensi file ZIP,AWS Device Farmakan secara otomatis membuka zip unggahan sebelum pengujian Anda dan meninggalkan file yang tidak di-zip di lokasi dengan$DEVICEFARM_TEST_PACKAGE_PATH
variabel lingkungan. (Ini berarti bahwa jika Anda menambahkan file bernamaekstra_file
ke akar arsip seperti pada contoh pertama, itu akan berlokasi di$deviceFarm_test_package_path/ekstra_file
selama tes).
Untuk menggunakan contoh yang lebih praktis, jika Anda adalah pengguna Appium TestNG yang ingin menyertakantestng.xml
file dengan tes Anda, Anda dapat memasukkannya ke dalam arsip Anda menggunakan perintah berikut:
$ zip zip-with-dependencies.zip testng.xml
Kemudian, Anda dapat mengubah perintah pengujian Anda dalam mode lingkungan khusus menjadi berikut:
java -D appium.screenshots.dir=$DEVICEFARM_SCREENSHOT_PATH org.testng.TestNG -testjar *-tests.jar -d $DEVICEFARM_LOG_DIR/test-output $DEVICEFARM_TEST_PACKAGE_PATH/testng.xml
Jika ekstensi unggahan paket pengujian Anda bukan ZIP (misalnya, file APK, IPA, atau JAR), file paket yang diunggah itu sendiri ditemukan di$DEVICEFARM_TEST_PACKAGE_PATH
. Karena ini masih file format arsip, Anda dapat unzip file untuk mengakses file tambahan dari dalam. Misalnya, perintah berikut akan membuka zip isi paket pengujian (untuk file APK, IPA, atau JAR) ke/tmp
direktori:
unzip $DEVICEFARM_TEST_PACKAGE_PATH -d /tmp
Dalam kasus file APK atau JAR, Anda akan menemukan file tambahan Anda dibuka ritsleting ke/tmp
direktori (mis.,/tmp/ekstra_file
). Dalam kasus file IPA, seperti yang dijelaskan sebelumnya, file tambahan akan berada di lokasi yang sedikit berbeda di dalam folder yang diakhiri.aplikasi
, yang ada di dalamMuatan
direktori. Misalnya, berdasarkan contoh IPA di atas, file akan ditemukan di lokasi/tmp/payload/AdfiosReferenceAppUitests-Runner.app/Extra_File
(dapat direferensikan sebagai/tmp/payload/ *.app/extra_file
).