Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mode server MTP memungkinkan editor, IDE, atau alat pengujian lainnya meluncurkan aplikasi pengujian dan mendorong penemuan dan eksekusi melalui JSON-RPC. Gunakan mode server saat Anda membuat perangkat yang memanfaatkan MTP. Untuk eksekusi baris perintah dan CI normal, jalankan aplikasi pengujian secara langsung atau gunakan dotnet test.
Mulai server JSON-RPC publik dengan --server atau --server jsonrpc.
Important
SDK .NET menggunakan protokol biner internal terpisah melalui --server dotnettestcli. Jangan berikan nilai itu sendiri.
dotnet test mengonfigurasi argumen transportasi dan protokol.
Menggunakan klien sumber saja
MTP 2.4 menyediakan klien JSON-RPC kanonis. Tambahkan paket Microsoft.Testing.Platform.ServerMode.Client.Sources. Paket menyuntikkan sumber C# ke dalam proyek Anda alih-alih menambahkan rakitan runtime.
Desain khusus sumber menyediakan:
- Tidak ada DLL runtime atau dependensi penyebaran tambahan.
- Serialisasi asli yang kompatibel dengan AOT dan bebas refleksi.
- Jenis protokol dan kode serialisasi dari repositori yang sama dengan server MTP.
IMtpServerClient, MtpServerClient, dan jenis protokol yang diinjeksi dapat menginisialisasi koneksi, menemukan pengujian, menjalankan pengujian, meminta server untuk keluar, dan melaporkan pembaruan node pengujian. Semua tipe yang diinjeksikan tetap internal bagi assembly yang menggunakannya.
Memenuhi persyaratan klien
Gunakan C# 12 atau yang lebih baru. Paket ini mengikuti pengaturan versi bahasa proyek Anda. Jika kerangka kerja target Anda default ke versi C# sebelumnya, atur LangVersion ke 12.0 atau yang lebih baru. Paket ini juga menyediakan jenis kompatibilitas internal untuk .NET Framework 4.6.2 dan netstandard2.0.
Hapus semua salinan klien MTP yang ditulis sendiri sebelum menambahkan paket untuk menghindari tipe internal yang duplikat.
Pilih model peluncuran
Untuk memulai aplikasi pengujian sebagai proses eksternal, gunakan MtpServerClient.LaunchAsync. Klien mengelola proses anak tersebut dan menghentikannya saat pembongkaran, jika diperlukan.
Untuk host yang disematkan atau lingkungan UI-thread yang tidak dapat menggunakan Process.Start, gunakan MtpServerClient.LaunchInProcessAsync. Metode ini menjalankan aplikasi pengujian melalui panggilan balik asinkron dalam proses saat ini. Jangan memblokir thread yang meluncurkan karena callback dan klien berada dalam proses yang sama.
Kedua model peluncuran menggunakan transportasi TCP loopback. Browser WebAssembly tidak dapat membuat listener yang diperlukan, sehingga peluncuran dalam proses memunculkan PlatformNotSupportedException. Peluncuran in-process tidak menyediakan transport WebAssembly alternatif.
Matikan klien
Untuk membongkar klien dan aplikasi yang diluncurkan tanpa memblokir thread pemanggil, panggil IMtpServerClient.ShutdownAsync(). Metode asinkron menghindari masalah responsivitas thread UI dan kebuntuan pada host tersemat.
Untuk host dalam proses, MtpServerClientOptions.ServerShutdownTimeout mengontrol berapa lama teardown menunggu setelah klien menutup transportasi. Defaultnya adalah 30 detik. Baca ServerExitCode setelah penghentian untuk mendapatkan kode keluar callback. Nilai tetap null ada saat aplikasi berjalan atau ketika aplikasi gagal alih-alih mengembalikan kode keluar.
Deklarasikan statefulness klien
Dimulai dengan MTP 2.4.1, atur opsi nullable MtpServerClientOptions.IsStateful agar menjelaskan cara klien menggunakan pembaruan simpul pengujian:
| Value | Deklarasi |
|---|---|
true |
Klien mempertahankan serangkaian node pengujian yang dapat dialamati untuk sesi dan menyimpan status terakhir yang diketahui dari setiap node sampai pembaruan lain mengubahnya, seperti yang mungkin dilakukan oleh penjelajah pengujian IDE. |
false |
Klien menggunakan pembaruan tanpa mempertahankan status simpul pengujian tersebut. |
null (standar) |
Klien tidak mendeklarasikan kapabilitas. Handshake inisialisasi menghilangkan field. |
Klien mengirimkan nilai Boolean eksplisit melalui kemampuan protokol eksperimental capabilities.testing.isStateful . Statefulness tidak bergantung pada masa pakai koneksi dan kemampuan MultiRequestSupport server. Klien tidak menjadi stateful hanya karena mengirimkan beberapa permintaan melalui koneksi yang sama.
MTP 2.4.0 menggunakan opsi Boolean yang tidak boleh bernilai null dengan default false. Untuk menjaga kemampuan yang tidak dinyatakan, gunakan MTP 2.4.1 atau yang lebih baru.
Di dalam kerangka kerja atau ekstensi, gunakan layanan eksperimental IClientInfolayanan untuk memeriksa deklarasi. Baca clientInfo.Capabilities.IsStateful untuk hasil Boolean konservatif, yaitu false ketika kemampuan tidak dideklarasikan. Dalam MTP 2.4.1 atau yang lebih baru, ClientCapabilitiesExtensions.GetIsStateful() mempertahankan perbedaan antara klien yang tidak dinyatakan, secara eksplisit tanpa status, dan klien stateful.
Menegosiasikan kompatibilitas protokol
Mulai MTP 2.4, negosiasi protokol mode server tidak bergantung pada versi paket MTP NuGet. Klien mendeklarasikan versi protokol yang didukungnya, dan server memilih versi umum. Ketika tidak ada versi yang didukung yang tumpang tindih, aplikasi pengujian keluar dengan ProtocolError kode keluar (12) alih-alih melanjutkan dengan kontrak kabel yang tidak kompatibel.
Gunakan skema JSON mode server 1.0 versi untuk memvalidasi pesan. Serializer System.Text.Json dan Jsonite mengikuti skema dan amplop kesalahan yang sama.