Buat executable uji kasus IDT - AWS IoT Greengrass

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat executable uji kasus IDT

Anda dapat membuat dan menempatkan executable uji kasus dalam folder rangkaian tes dengan cara berikut:

  • Untuk rangkaian tes yang menggunakan argumen atau variabel lingkungan dari file test.json untuk menentukan tes mana yang akan dijalankan, Anda dapat membuat uji kasus tunggal yang dapat dieksekusi untuk seluruh rangkaian tes, atau tes yang dapat dijalankan untuk setiap grup uji di rangkaian tes.

  • Untuk rangkaian tes di mana Anda ingin menjalankan tes tertentu berdasarkan perintah tertentu, Anda membuat satu executable uji kasus untuk setiap uji kasus di rangkaian tes.

Sebagai penyusun tes, Anda dapat menentukan pendekatan yang sesuai untuk kasus penggunaan Anda dan menyusun executable uji kasus yang sesuai. Pastikan bahwa Anda menyediakan jalur eksekusi uji kasus yang benar di setiaptest.json file, dan bahwa executable yang ditentukan berjalan dengan benar.

Ketika semua perangkat siap untuk dijalankan oleh uji kasus, IDT akan membaca file-file berikut:

  • test.json untuk uji kasus yang dipilih menentukan proses yang akan dimulai dan variabel lingkungan yang akan diatur.

  • suite.json untuk rangkaian uji tersebut menentukan variabel lingkungan yang akan diatur.

IDT memulai proses eksekusi tes yang diperlukan berdasarkan perintah dan argumen yang ditentukan dalamtest.json file, dan melewati variabel lingkungan yang diperlukan untuk proses tersebut.

Gunakan IDT Client SDK

IDT Client SDK memungkinkan Anda cara Anda menulis logika uji di executable tes Anda dengan perintah API yang dapat Anda gunakan untuk berinteraksi dengan IDT dan perangkat Anda yang sedang diuji. IDT saat ini menyediakan SDK berikut:

  • IDT Client SDK for Python

  • IDT Client SDK for Go

  • IDT Client SDK for Java

SDK ini terletak di folder <device-tester-extract-location>/sdks. Ketika Anda membuat executable uji kasus yang baru, Anda harus menyalin SDK yang ingin Anda gunakan ke folder yang berisi executable uji kasus dan mengacu pada SDK dalam kode Anda. Bagian ini memberikan penjelasan singkat tentang perintah API yang tersedia yang dapat Anda gunakan dalam executable uji kasus Anda.

Interaksi perangkat

Perintah berikut memungkinkan Anda untuk berkomunikasi dengan perangkat yang diuji tanpa harus menerapkan interaksi perangkat tambahan dan fungsi manajemen konektivitas apa pun.

ExecuteOnDevice

Memungkinkan rangkaian tes untuk menjalankan perintah shell pada perangkat yang mendukung SSH atau koneksi Docker shell.

CopyToDevice

Memungkinkan rangkaian tes untuk menyalin file lokal dari mesin host yang menjalankan IDT ke lokasi yang ditentukan pada perangkat yang mendukung SSH atau koneksi Docker shell.

ReadFromDevice

Memungkinkan rangkaian tes untuk membaca dari port serial perangkat yang mendukung koneksi UART.

catatan

Karena IDT tidak mengelola koneksi langsung ke perangkat yang dibuat menggunakan informasi akses perangkat dari konteks, sebaiknya gunakan perintah API interaksi perangkat ini di executable uji kasus. Namun, jika perintah ini tidak memenuhi persyaratan uji kasus Anda, maka Anda dapat mengambil informasi akses perangkat dari konteks IDT dan menggunakannya untuk membuat koneksi langsung ke perangkat dari rangkaian tes.

Untuk membuat sambungan langsung, ambil informasi di device.connectivity dan resource.devices.connectivity masing-masing untuk perangkat Anda yang sedang diuji dan untuk perangkat sumber daya. Untuk informasi lebih lanjut mengenai penggunaan konteks IDT, lihat Gunakan konteks IDT.

Interaksi IDT

Perintah berikut memungkinkan rangkaian tes Anda untuk berkomunikasi dengan IDT.

PollForNotifications

Memungkinkan rangkaian tes untuk memeriksa notifikasi dari IDT.

GetContextValue dan GetContextString

Memungkinkan rangkaian tes untuk mengambil nilai-nilai dari konteks IDT. Untuk informasi selengkapnya, lihat Gunakan konteks IDT.

SendResult

Memungkinkan rangkaian tes untuk melaporkan hasil uji kasus ke IDT. Perintah ini harus dipanggil pada akhir setiap uji kasus di rangkaian tes.

Interaksi host

Perintah berikut memungkinkan rangkaian tes Anda untuk berkomunikasi dengan mesin host.

PollForNotifications

Memungkinkan rangkaian tes untuk memeriksa notifikasi dari IDT.

GetContextValue dan GetContextString

Memungkinkan rangkaian tes untuk mengambil nilai-nilai dari konteks IDT. Untuk informasi selengkapnya, lihat Gunakan konteks IDT.

ExecuteOnHost

Memungkinkan rangkaian tes untuk menjalankan perintah pada mesin lokal dan memungkinkan IDT untuk mengelola siklus hidup executable uji kasus.

Aktifkan perintah IDT CLI

Perintah run-suite IDT CLI menyediakan beberapa pilihan yang membiarkan test runner untuk mengkustomisasi pelaksanaan tes. Untuk memungkinkan test runner menggunakan opsi ini untuk menjalankan rangkaian tes kustom Anda, Anda menerapkan dukungan untuk IDT CLI. Jika Anda tidak menerapkan dukungan, test runner masih akan dapat menjalankan tes, tetapi beberapa opsi CLI tidak akan berfungsi dengan benar. Untuk memberikan pengalaman pelanggan yang ideal, kami merekomendasikan agar Anda menerapkan dukungan untuk argumen berikut untuk perintah run-suite dalam IDT CLI:

timeout-multiplier

Menentukan nilai yang lebih besar dari 1,0 yang akan diterapkan pada semua batas waktu saat menjalankan tes.

Test runner dapat menggunakan argumen ini untuk meningkatkan batas waktu untuk uji kasus yang ingin dijalankannya. Ketika test runner menentukan argumen ini pada perintah run-suite, IDT akan menggunakannya untuk menghitung nilai variabel lingkungan IDT_TEST_TIMEOUT dan menetapkan kolom config.timeoutMultiplier dalam konteks IDT. Untuk mendukung argumen ini, Anda harus melakukan hal berikut:

  • Alih-alih langsung menggunakan nilai batas waktu dari file test.json, baca variabel lingkungan IDT_TEST_TIMEOUT untuk mendapatkan nilai batas waktu yang dihitung dengan benar.

  • Ambil nilai config.timeoutMultiplier dari konteks IDT dan terapkan ia pada batas waktu yang panjang.

Untuk informasi selengkapnya tentang keluar lebih awal karena peristiwa habis waktu, lihat Tentukan perilaku keluar.

stop-on-first-failure

Tentukan bahwa IDT harus berhenti menjalankan semua tes jika menemui kegagalan.

Ketika test runner menentukan argumen ini pada perintah run-suite, IDT akan berhenti menjalankan pengujian tersebut segera setelah menemui kegagalan. Namun, jika uji kasus berjalan secara paralel, hal ini dapat menyebabkan hasil yang tidak terduga. Untuk menerapkan dukungan, pastikan bahwa jika IDT menemui peristiwa ini, logika pengujian Anda akan menginstruksikan semua uji kasus yang sedang berjalan untuk berhenti, membersihkan sumber daya sementara, dan melaporkan hasil tes ke IDT. Untuk informasi selengkapnya tentang keluar lebih awal karena menemui kegagalan, lihat Tentukan perilaku keluar.

group-id dan test-id

Menentukan bahwa IDT harus menjalankan hanya grup uji atau uji kasus yang dipilih.

Test runner dapat menggunakan argumen ini dengan perintah run-suite untuk menentukan perilaku eksekusi tes berikut:

  • Jalankan semua tes di dalam grup uji yang ditentukan.

  • Jalankan pilihan tes dari dalam grup uji tertentu.

Untuk mendukung argumen ini, orkestrator tes untuk rangkaian tes Anda harus menyertakan serangkaianChoice keadaanRunTask dan keadaan tertentu dalam orkestrator pengujian Anda. Jika Anda tidak menggunakan state machine kustom, maka state machine IDT default akan meliputi keadaan yang diperlukan untuk Anda dan Anda tidak perlu melakukan tindakan tambahan. Namun, jika Anda menggunakan state orkestrator kustom, gunakanContoh mesin status: Jalankan grup uji yang dipilih pengguna sebagai contoh untuk menambahkan keadaan yang diperlukan dalam orkestrator tes Anda.

Untuk informasi selengkapnya tentang perintah IDT CLI, lihat Debug dan jalankan rangkaian tes kustom.

Menulis log peristiwa

Saat tes berjalan, Anda mengirim data ke stdout dan stderr untuk menuliskan log peristiwa dan pesan kesalahan pada konsol. Untuk informasi lebih lanjut tentang format pesan konsol, lihat Format pesan konsol.

Ketika IDT selesai menjalankan rangkaian tes tersebut, informasi ini juga tersedia di file test_manager.log yang terletak di <devicetester-extract-location>/results/<execution-id>/logs.

Anda dapat mengonfigurasi setiap uji kasus untuk menuliskan log dari pengujiannya yang dijalankan, termasuk log dari perangkat yang diuji, ke file <group-id>_<test-id> yang terletak di <device-tester-extract-location>/results/execution-id/logs. Untuk melakukan ini, ambil path ke berkas log dari konteks IDT dengan kueri testData.logFilePath, buat file di path itu, dan tuliskan konten yang Anda inginkan padanya. IDT secara otomatis memperbarui jalur berdasarkan uji kasus yang berjalan. Jika Anda memilih untuk tidak membuat file log untuk uji kasus, maka tidak ada file yang akan dibuat untuk uji kasus itu.

Anda juga dapat mengatur executable teks Anda untuk membuat berkas log tambahan yang diperlukan dalam folder <device-tester-extract-location>/logs. Kami menyarankan Anda untuk menentukan prefiks yang unik untuk nama file log sehingga file Anda tidak akan ditimpa.

Laporkan hasil ke IDT

IDT menuliskan hasil tes ke file awsiotdevicetester_report.xml dan suite-name_report.xml. File laporan ini terletak di <device-tester-extract-location>/results/<execution-id>/. Kedua laporan tersebut menangkap hasil dari eksekusi rangkaian tes. Untuk informasi selengkapnya tentang skema yang menggunakan IDT untuk laporan ini, lihat Tinjau hasil tes dan log IDT

Untuk mengisi konten file suite-name_report.xml, Anda harus menggunakan perintah SendResult untuk melaporkan hasil tes ke IDT sebelum eksekusi tes itu selesai. Jika IDT tidak dapat menemukan hasil tes, ia akan mengeluarkan kesalahan untuk uji kasus tersebut. Kutipan Python berikut menunjukkan perintah yang akan mengirimkan hasil tes ke IDT:

request-variable = SendResultRequest(TestResult(result)) client.send_result(request-variable)

Jika Anda tidak melaporkan hasil melalui API, IDT akan mencari hasil tes di folder artefak tes. Path ke folder ini disimpan dalam testData.testArtifactsPath yang disimpan dalam konteks IDT. Dalam folder ini, IDT menggunakan file XML yang diurutkan menurut abjad pertama yang ditempatkannya sebagai hasil tes.

Jika logika tes Anda menghasilkan hasil JUnit XML, Anda dapat menuliskan hasil tes itu ke file XML dalam folder artefak untuk langsung memberikan hasil ke IDT dan bukan mem-parsing hasilnya dan kemudian menggunakan API untuk mengirimkannya ke IDT.

Jika Anda menggunakan metode ini, pastikan bahwa logika pengujian Anda secara akurat merangkum hasil pengujian dan memformat file hasil Anda dalam format yang sama seperti file suite-name_report.xml. IDT tidak melakukan validasi data yang Anda berikan, dengan pengecualian berikut:

  • IDT mengabaikan semua properti dari tanda testsuites. Sebaliknya, IDT menghitung properti tag dari hasil grup pengujian lainnya yang dilaporkan.

  • Setidaknya satu testsuite tag harus ada dalam testsuites.

Karena IDT menggunakan folder artefak yang sama untuk semua uji kasus dan tidak menghapus file hasil antara pengujian yang berjalan, metode ini mungkin juga akan menyebabkan pelaporan yang salah jika IDT membaca file yang salah. Kami menyarankan Anda menggunakan nama yang sama untuk file hasil XML yang dihasilkan di semua uji kasus untuk menimpa hasil untuk setiap uji kasus dan pastikan bahwa hasil yang benar tersedia untuk digunakan oleh IDT. Meskipun Anda dapat menggunakan pendekatan campuran untuk pelaporan di rangkaian pengujian Anda, yaitu menggunakan file hasil XML untuk beberapa uji kasus dan mengirimkan hasil melalui API untuk uji kasus lainnya, kami tidak merekomendasikan pendekatan ini.

Tentukan perilaku keluar

Konfigurasikan executable teks Anda agar selalu keluar dengan kode keluar 0, meskipun uji kasus melaporkan kegagalan atau hasil kesalahan. Gunakan kode keluar bukan nol hanya untuk menunjukkan bahwa suatu uji kasus tidak berjalan atau jika executable uji kasus tidak dapat menyampaikan hasil apapun ke IDT. Ketika IDT menerima kode keluar bukan nol, IDT akan menandai uji kasus tersebut telah mengalami kesalahan yang mencegahnya berjalan.

IDT mungkin meminta atau mengharapkan uji kasus untuk berhenti berjalan sebelum selesai dalam peristiwa berikut. Gunakan informasi ini untuk mengonfigurasi executable uji kasus untuk mendeteksi setiap peristiwa ini dari uji kasus:

Batas waktu

Terjadi ketika uji kasus berjalan lebih lama daripada nilai batas waktu yang ditentukan dalam file test.json. Jika test runner menggunakan argumen timeout-multiplier untuk menentukan pengali batas waktu, IDT akan menghitung nilai batas waktu dengan pengali tersebut.

Untuk mendeteksi peristiwa ini, gunakan variabel lingkungan IDT_TEST_TIMEOUT. Ketika test runner meluncurkan tes, IDT akan menetapkan nilai variabel lingkungan IDT_TEST_TIMEOUT pada nilai batas waktu yang dihitung (dalam detik) dan melewati variabel pada executable uji kasus. Anda dapat membaca nilai variabel untuk menetapkan penghitung waktu yang sesuai.

Interupsi

Terjadi ketika test runner menginterupsi IDT. Misalnya, dengan menekan Ctrl+C.

Karena terminal menyebarkan sinyal ke semua proses anak, Anda cukup mengonfigurasi bagian yang menangani sinyal dalam uji kasus Anda untuk mendeteksi sinyal yang terinterupsi.

Atau, Anda dapat secara berkala mengumpulkan API untuk memeriksa nilai boolean CancellationRequested di respons API PollForNotifications. Ketika IDT menerima sinyal terinterupsi, ia akan menetapkan nilai boolean CancellationRequested untuk true.

Berhenti pada kegagalan pertama

Terjadi ketika uji kasus yang berjalan secara paralel dengan uji kasus gagal dan test runner menggunakan argumen stop-on-first-failure untuk menentukan bahwa IDT harus berhenti ketika menemui kegagalan apa pun.

Untuk mendeteksi peristiwa ini, Anda dapat secara berkala mengumpulkan API untuk memeriksa nilai boolean CancellationRequested di respons API PollForNotifications. Ketika IDT menemui kegagalan dan dikonfigurasi untuk berhenti pada kegagalan pertama, tetapkan nilai boolean CancellationRequested untuk true.

Ketika salah satu peristiwa ini terjadi, IDT akan menunggu selama 5 menit untuk setiap uji kasus yang sedang berjalan saat ini untuk menyelesaikan prosesnya. Jika semua uji kasus yang berjalan tidak keluar dalam waktu 5 menit, IDT akan memaksa masing-masing proses untuk berhenti. Jika IDT belum menerima hasil tes sebelum proses berakhir, ia akan menandai uji kasus telah habis waktu. Sebagai praktik terbaik, Anda harus memastikan bahwa uji kasus Anda melakukan tindakan berikut ketika menghadapi salah satu peristiwa berikut:

  1. Berhenti menjalankan logika uji normal.

  2. Bersihkan sumber daya sementara apa pun, seperti uji artefak pada perangkat yang sedang diuji.

  3. Laporkan hasil tes ke IDT, seperti kegagalan uji atau kesalahan.

  4. Keluar