Coba Ulang

Fitur ini memerlukan paket NuGet Microsoft.Testing.Extensions.Retry .

Petunjuk / Saran

Saat menggunakan Microsoft.Testing.Platform.MSBuild (disertakan secara transitif oleh runner MSTest, NUnit, dan xUnit), ekstensi ini didaftarkan secara otomatis saat Anda menginstal paket NuGet-nya — tidak diperlukan perubahan kode. Pendaftaran manual di bagian berikut hanya diperlukan jika Anda menonaktifkan titik masuk yang dihasilkan secara otomatis dengan mengatur <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>.

Pendaftaran manual

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddRetryProvider();

Coba Ulang

Ekstensi ketahanan pengujian .NET dan penanganan kesalahan sementara.

Ekstensi ini ditujukan untuk pengujian integrasi di mana pengujian sangat bergantung pada keadaan lingkungan dan dapat mengalami kesalahan sementara.

Nota

Paket dikirim dengan lisensi Microsoft.Testing.Platform Tools yang ketat. Lisensi lengkap tersedia di https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.0.0/License.

Opsi

Option Deskripsi
--retry-failed-tests Jalankan ulang tes yang gagal hingga berhasil atau hingga jumlah upaya maksimum tercapai. Diperlukan untuk mengaktifkan ekstensi.
--retry-failed-tests-max-percentage Menghindari pengulangan pengujian ketika persentase kasus pengujian yang gagal melebihi ambang yang ditentukan. Tidak dapat dikombinasikan dengan --retry-failed-tests-max-tests. Membutuhkan --retry-failed-tests.
--retry-failed-tests-max-tests Menghindari pengulangan pengujian ketika jumlah kasus uji yang gagal melewati batas yang ditentukan. Tidak dapat dikombinasikan dengan --retry-failed-tests-max-percentage. Membutuhkan --retry-failed-tests.
--retry-failed-tests-delay Menambahkan penundaan antara percobaan ulang. Penundaan dinyatakan sebagai nilai waktu, misalnya 200, , 500ms, 1s2.5m, 1h, atau 1d. Unit default adalah milidetik. Membutuhkan --retry-failed-tests. Tersedia di MTP yang dimulai dengan versi 2.3.0.

Kedua opsi ambang batas (--retry-failed-tests-max-percentage dan --retry-failed-tests-max-tests) memerlukan --retry-failed-tests juga diatur.

Untuk penulis kerangka kerja, ekstensi ini memerlukan UID simpul pengujian yang stabil dan penanganan filter permintaan yang benar. Percobaan ulang meluncurkan proses pengujian baru dan memilih pengujian yang gagal melalui --filter-uid. Jika framework Anda mengabaikan TestNodeUidListFilter, framework dapat menjalankan ulang pengujian yang tidak dipilih alih-alih hanya pengujian yang gagal.

Dimulai dengan MTP 2.4.0, ringkasan percobaan ulang melaporkan hitungan flaky dan retried secara terpisah dan mencantumkan nama pengujian yang dipulihkan di bawah pengujian Flaky. Untuk menghindari total yang menyesatkan, MTP tidak mencetak ringkasan seluruh suite untuk percobaan ulang yang difilter setelah upaya pertama. Gunakan opsi --show-flaky-tests reporter terminal untuk menampilkan atau menyembunyikan detail flaky.

Setiap upaya coba lagi menulis artefak laporannya di bawah direktori Retries. Untuk JUnit, laporan tingkat atas hanya mewakili percobaan ulang terakhir yang telah difilter, bukan rangkaian lengkap asli; kumpulkan laporan percobaan sebelumnya dari Retries saat CI Anda memerlukan cakupan lengkap. Tata letak ini berlaku untuk --retry-failed-tests. [Retry] in-process milik MSTest malah menciutkan percobaan yang digantikan menjadi satu hasil JUnit atau TRX akhir per pengujian.

Contoh

Coba lagi pengujian yang gagal hingga 3 kali:

dotnet run --project Contoso.MyTests -- --retry-failed-tests 3

Coba lagi pengujian yang gagal hingga 2 kali, tetapi berhenti mencoba kembali jika lebih dari 50% pengujian gagal:

dotnet run --project Contoso.MyTests -- --retry-failed-tests 2 --retry-failed-tests-max-percentage 50

Coba lagi pengujian yang gagal hingga 3 kali, tetapi berhenti mencoba kembali jika lebih dari 10 pengujian gagal:

dotnet run --project Contoso.MyTests -- --retry-failed-tests 3 --retry-failed-tests-max-tests 10

Keterbatasan

  • Tidak didukung pada platform browser.
  • Tidak didukung dalam mode hot reload.