

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
<a name="custom-test-environments-extending"></a>

AWS Device Farm memungkinkan mengonfigurasi lingkungan khusus untuk pengujian otomatis (mode kustom), yang merupakan pendekatan yang disarankan untuk semua pengguna Device Farm. Mode kustom Device Farm memungkinkan Anda menjalankan lebih dari sekadar rangkaian pengujian. Di bagian ini, Anda mempelajari cara memperluas rangkaian pengujian dan mengoptimalkan pengujian Anda.

Untuk informasi selengkapnya tentang lingkungan pengujian kustom di Device Farm, lihat[Lingkungan pengujian khusus di AWS Device Farm](custom-test-environments.md).

**Topics**
+ [Menyetel PIN perangkat saat menjalankan pengujian di Device Farm](custom-test-environments-extending-set-pin.md)
+ [Mempercepat pengujian berbasis Appium di Device Farm melalui kemampuan yang diinginkan](custom-test-environments-extending-speed.md)
+ [Menggunakan Webhook dan lainnya APIs setelah pengujian dijalankan di Device Farm](custom-test-environments-extending-webhooks.md)
+ [Menambahkan file tambahan ke paket pengujian Anda di Device Farm](custom-test-environments-extending-files.md)

# Menyetel PIN perangkat saat menjalankan pengujian di Device Farm
<a name="custom-test-environments-extending-set-pin"></a>

 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 menyetel PIN dalam pengujian Anda, gunakan `post_test` fase `pre_test` dan 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.

Untuk lebih banyak cara untuk memperluas rangkaian pengujian dan mengoptimalkan pengujian, lihat[Memperluas lingkungan pengujian khusus di Device Farm](custom-test-environments-extending.md).

# Mempercepat pengujian berbasis Appium di Device Farm melalui kemampuan yang diinginkan
<a name="custom-test-environments-extending-speed"></a>

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 menyetel `usePrebuildWDA` kemampuan ke `true` 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` dan `fullReset`  
Kedua kemampuan ini, yang saling eksklusif, menggambarkan perilaku Appium setelah setiap sesi selesai. Ketika `noReset` disetel ke`true`, 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 selengkapnya, lihat [Reset Strategi](http://appium.io/docs/en/writing-running-appium/other/reset-strategies/) dalam dokumentasi Appium.

`ignoreUnimportantViews`(Hanya Android)  
Menginstruksikan Appium untuk mengompres hierarki UI Android hanya ke tampilan *yang relevan* untuk pengujian, mempercepat pencarian elemen tertentu. Namun, ini dapat merusak beberapa suite pengujian XPath berbasis 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 penting,`webDriverAgent`, sudah berjalan dan tersedia untuk menerima permintaan HTTP di URL yang ditentukan. Jika `webDriverAgent` belum aktif dan berjalan, Appium membutuhkan waktu beberapa saat di awal rangkaian pengujian untuk memulai. `webDriverAgent` Jika Anda memulai `webDriverAgent` sendiri dan mengatur `webDriverAgentUrl` ke `http://localhost:8100` saat memulai Appium, Anda dapat mem-boot suite pengujian Anda lebih cepat. Perhatikan bahwa kemampuan ini tidak boleh digunakan bersama `useNewWDA` kemampuan.  
Anda dapat menggunakan kode berikut untuk memulai `webDriverAgent` dari file spesifikasi pengujian di port lokal perangkat`8100`, lalu meneruskannya ke port lokal host pengujian `8100` (ini memungkinkan Anda untuk menetapkan `webDriverAgentUrl` nilainya`http://localhost:8100`). Kode ini harus dijalankan selama fase penginstalan setelah kode apa pun untuk menyiapkan variabel Appium dan `webDriverAgent` lingkungan telah ditentukan:  

```
      # 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 berhasil `webDriverAgent` dimulai. 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, lihat [Kemampuan yang Diinginkan Appium](http://appium.io/docs/en/writing-running-appium/caps/) dalam dokumentasi Appium. 

Untuk lebih banyak cara untuk memperluas rangkaian pengujian dan mengoptimalkan pengujian, lihat[Memperluas lingkungan pengujian khusus di Device Farm](custom-test-environments-extending.md).

# Menggunakan Webhook dan lainnya APIs setelah pengujian dijalankan di Device Farm
<a name="custom-test-environments-extending-webhooks"></a>

Anda dapat meminta Device Farm memanggil webhook setelah setiap rangkaian pengujian selesai digunakan. **curl** 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, lihat [Mengirim pesan Slack pertama Anda menggunakan Webhook](https://api.slack.com/tutorials/slack-apps-hello-world) di referensi Slack API.

Untuk lebih banyak cara untuk memperluas rangkaian pengujian dan mengoptimalkan pengujian, lihat[Memperluas lingkungan pengujian khusus di Device Farm](custom-test-environments-extending.md).

Anda tidak terbatas pada menggunakan **curl** untuk 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 yang lain APIs. 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 kredensil dengan hak istimewa sesedikit mungkin, dan menggunakan token yang dapat diulang dan berumur pendek bila memungkinkan. Untuk memverifikasi persyaratan keamanan, lihat dokumentasi untuk pihak ketiga APIs yang Anda gunakan.

Jika Anda berencana menggunakan AWS layanan sebagai bagian dari rangkaian eksekusi pengujian, Anda harus menggunakan kredenal sementara IAM, yang dihasilkan di luar rangkaian pengujian dan disertakan dalam paket pengujian Anda. Kredensi ini harus memiliki izin paling sedikit yang diberikan dan umur sesingkat mungkin. *Untuk informasi selengkapnya tentang cara membuat kredensil sementara, lihat [Meminta kredensil keamanan sementara di Panduan Pengguna IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_temp_request.html).*

Untuk lebih banyak cara untuk memperluas rangkaian pengujian dan mengoptimalkan pengujian, lihat[Memperluas lingkungan pengujian khusus di Device Farm](custom-test-environments-extending.md).

# Menambahkan file tambahan ke paket pengujian Anda di Device Farm
<a name="custom-test-environments-extending-files"></a>

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 sebelum mengunggahnya AWS 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 mengunggahnya AWS Device Farm dengan 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 saat digunakan XCUITests, kami sarankan Anda meletakkan file tambahan di lokasi yang sedikit berbeda karena cara AWS Device Farm mengundurkan diri paket uji iOS. Saat membuat pengujian iOS Anda, direktori aplikasi pengujian akan berada di dalam direktori lain bernama*Payload*.

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 XCUITest paket-paket ini, tambahkan file tambahan ke direktori yang berakhir di *.app* dalam *Payload* 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 menambahkan file ke paket pengujian, Anda dapat mengharapkan perilaku interaksi yang sedikit berbeda AWS Device Farm berdasarkan format unggahannya. Jika unggahan menggunakan ekstensi file ZIP, secara otomatis AWS Device Farm akan membuka zip unggahan sebelum pengujian Anda dan membiarkan file yang tidak di-zip di lokasi dengan variabel lingkungan. *\$1DEVICEFARM\$1TEST\$1PACKAGE\$1PATH* (Ini berarti bahwa jika Anda menambahkan file yang dipanggil *extra\$1file* ke root arsip seperti pada contoh pertama, itu akan ditempatkan di *\$1DEVICEFARM\$1TEST\$1PACKAGE\$1PATH/extra\$1file* selama pengujian). 

Untuk menggunakan contoh yang lebih praktis, jika Anda adalah pengguna Appium TestNG yang ingin menyertakan *testng.xml* file dengan pengujian Anda, Anda dapat memasukkannya ke dalam arsip 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 dapat ditemukan di. *\$1DEVICEFARM\$1TEST\$1PACKAGE\$1PATH* 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 direktori: */tmp*

```
unzip $DEVICEFARM_TEST_PACKAGE_PATH -d /tmp
```

Dalam kasus file APK atau JAR, Anda akan menemukan file tambahan Anda dibuka ritsleting ke */tmp* direktori (misalnya,*/tmp/extra\$1file*). Dalam kasus file IPA, seperti yang dijelaskan sebelumnya, file tambahan akan berada di lokasi yang sedikit berbeda di dalam folder yang diakhiri*.app*, yang ada di dalam *Payload* direktori. Misalnya, berdasarkan contoh IPA di atas, file akan ditemukan di lokasi */tmp/Payload/ADFiOSReferenceAppUITests-Runner.app/extra\$1file* (dapat direferensikan sebagai). */tmp/Payload/\$1.app/extra\$1file*

Untuk lebih banyak cara untuk memperluas rangkaian pengujian dan mengoptimalkan pengujian, lihat[Memperluas lingkungan pengujian khusus di Device Farm](custom-test-environments-extending.md).