Coyote
Coyote adalah perpustakaan dan alat lintas platform untuk menguji kode C# bersamaan dan mereproduksi bug.
Menggunakan Coyote, Anda dapat dengan mudah menguji konkurensi dan nondeterminisme lainnya dalam kode C# Anda, dengan menulis apa yang kami sebut tes unit konkurensi . Ini terlihat seperti tes unit reguler Anda, tetapi dapat dengan andal menguji beban kerja bersamaan (seperti aktor, tugas, atau permintaan bersamaan untuk pengontrol ASP.NET). Dalam tes unit reguler, Anda biasanya akan menghindari konkurensi karena serpihan, tetapi dengan coyote Anda didorong untuk merangkul konkurensi dalam tes Anda untuk menemukan bug.
Coyote digunakan oleh banyak tim di Azure untuk menguji sistem dan layanan mereka yang terdistribusi, dan telah menemukan ratusan bug yang berhubungan dengan konkurensi sebelum menggunakan kode dalam produksi dan mempengaruhi pengguna. Dalam kata -kata arsitek layanan biru:
Coyote menemukan beberapa masalah di awal proses dev, masalah semacam ini yang biasanya akan berdarah ke dalam produksi dan menjadi sangat mahal untuk diperbaiki nanti.
Coyote dibuat dengan ❤️ oleh Microsoft Research.
Pertimbangkan tes sederhana berikut:
[ Fact ]
public async Task TestTask ( )
{
int value = 0 ;
Task task = Task . Run ( ( ) =>
{
value = 1 ;
} ) ;
Assert . Equal ( 0 , value ) ;
await task ;
}
Tes ini akan berlalu sebagian besar waktu karena pernyataan biasanya akan dieksekusi sebelum tugas dimulai, tetapi ada satu jadwal di mana tugas dimulai cukup cepat untuk menetapkan value
menjadi 1
menyebabkan pernyataan gagal. Tentu saja, ini adalah contoh yang sangat naif dan bugnya jelas, tetapi Anda bisa membayangkan kondisi ras yang jauh lebih rumit yang tersembunyi di jalur eksekusi yang kompleks.
Cara Coyote bekerja, adalah terlebih dahulu mengonversi tes di atas menjadi uji unit konkurensi menggunakan Coyote TestingEngine
API:
using Microsoft . Coyote . SystematicTesting ;
[ Fact ]
public async Task CoyoteTestTask ( )
{
var configuration = Configuration . Create ( ) . WithTestingIterations ( 10 ) ;
var engine = TestingEngine . Create ( configuration , TestTask ) ;
engine . Run ( ) ;
}
Selanjutnya, Anda menjalankan perintah coyote rewrite
dari CLI (biasanya sebagai tugas pasca-membangun) untuk secara otomatis menulis ulang IL dari biner tes dan produksi Anda. Ini memungkinkan Coyote untuk menyuntikkan kait yang mengendalikan eksekusi bersamaan selama pengujian.
Anda kemudian dapat menjalankan tes unit bersamaan dari kerangka pengujian unit favorit Anda (seperti Xunit). Coyote akan mengambil alih dan berulang kali menjalankan tes dari awal hingga akhir untuk iterasi N (dalam contoh di atas n dikonfigurasi menjadi 10
). Di bawah kap, Coyote menggunakan strategi pencarian cerdas untuk mengeksplorasi semua jenis jalur eksekusi yang mungkin menyembunyikan bug di setiap iterasi.
Yang luar biasa adalah bahwa begitu bug ditemukan, Coyote memberi Anda jejak melalui engine.TestReport
API Testreport yang dapat Anda gunakan untuk mereproduksi bug sebanyak yang Anda inginkan, membuat debug dan memperbaiki masalah secara signifikan lebih mudah.
Memulai dengan Coyote itu mudah! Pertama, ikuti panduan ini untuk menginstal alat baris perintah coyote
dari Nuget. Anda sekarang siap untuk memeriksa situs web Coyote untuk tutorial, dokumentasi, bagaimana-ke, sampel, dan informasi lebih lanjut tentang proyek tersebut. Menikmati!
Meningkatkan dependensi coyote
Anda? Periksa changelog di sini.
Perhatikan bahwa Coyote adalah proyek open-source yang disediakan "adisi apa". Kami tidak dapat memberikan dukungan formal apa pun. Untuk karyawan Microsoft, kami memiliki Saluran Teman dari Coyote Teams, yang merupakan komunitas internal yang dapat membantu menjawab pertanyaan dan belajar dari satu sama lain.
Proyek ini menyambut kontribusi dan saran. Sebagian besar kontribusi mengharuskan Anda untuk menyetujui perjanjian lisensi kontributor (CLA) yang menyatakan bahwa Anda memiliki hak untuk, dan benar -benar melakukannya, beri kami hak untuk menggunakan kontribusi Anda. Untuk detailnya, kunjungi https://cla.opensource.microsoft.com.
Saat Anda mengirimkan permintaan tarik, bot CLA akan secara otomatis menentukan apakah Anda perlu memberikan CLA dan menghiasi PR secara tepat (misalnya, pemeriksaan status, komentar). Cukup ikuti instruksi yang disediakan oleh bot. Anda hanya perlu melakukan ini sekali di semua repositori menggunakan CLA kami.
Proyek ini telah mengadopsi kode perilaku open source Microsoft. Untuk informasi lebih lanjut, lihat FAQ Kode Perilaku atau hubungi [email protected] dengan pertanyaan atau komentar tambahan.